diff --git a/DiabloUI/diabloui_gcc.def b/DiabloUI/diabloui_gcc.def index fcb5c693e..e56045762 100644 --- a/DiabloUI/diabloui_gcc.def +++ b/DiabloUI/diabloui_gcc.def @@ -14,6 +14,7 @@ EXPORTS UiCategoryCallback @6 UiCategoryCallback@28 @6 NONAME UiCopyProtError @7 + UiCopyProtError@4 @7 NONAME UiCreateGameCallback @8 UiCreateGameCallback@24 @8 NONAME UiCreateGameCriteria @9 diff --git a/Source/_render.cpp b/Source/_render.cpp index f1f6ce061..582ce3786 100644 --- a/Source/_render.cpp +++ b/Source/_render.cpp @@ -2303,7 +2303,7 @@ __declspec(naked) void drawTopArchesUpperScreen(BYTE *pBuff) } } -__declspec(naked) void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) +__declspec(naked) void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *pMask) { __asm { push ebx @@ -7350,7 +7350,7 @@ __declspec(naked) void drawTopArchesLowerScreen(BYTE *pBuff) } } -__declspec(naked) void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) +__declspec(naked) void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *pMask) { __asm { push ebx diff --git a/Source/appfat.h b/Source/appfat.h index 77d9c620a..144870f07 100644 --- a/Source/appfat.h +++ b/Source/appfat.h @@ -3,8 +3,8 @@ #define __APPFAT_H__ extern char sz_error_buf[256]; -extern int terminating; // weak -extern int cleanup_thread_id; // weak +extern int terminating; +extern int cleanup_thread_id; void TriggerBreak(); #ifdef _DEBUG diff --git a/Source/automap.cpp b/Source/automap.cpp index 850ef9b27..667df9539 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -175,7 +175,7 @@ void DrawAutomap() return; } - gpBufEnd = (unsigned char *)&gpBuffer[(PANEL_Y) * BUFFER_WIDTH]; + gpBufEnd = &gpBuffer[(PANEL_Y) * BUFFER_WIDTH]; MapX = (ViewX - 16) >> 1; while (MapX + AutoMapXOfs < 0) diff --git a/Source/control.cpp b/Source/control.cpp index 0d317bf9c..05afc568d 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -6,17 +6,17 @@ BYTE sgbNextTalkSave; BYTE sgbTalkSavePos; BYTE *pDurIcons; BYTE *pChrButtons; -BOOL drawhpflag; // idb +BOOL drawhpflag; BOOL dropGoldFlag; int panbtn[8]; int chrbtn[4]; BYTE *pMultiBtns; BYTE *pPanelButtons; BYTE *pChrPanel; -int lvlbtndown; // weak +BOOL lvlbtndown; char sgszTalkSave[8][80]; -int dropGoldValue; // idb -BOOL drawmanaflag; // idb +int dropGoldValue; +BOOL drawmanaflag; BOOL chrbtnactive; char sgszTalkMsg[MAX_SEND_STR_LEN]; BYTE *pPanelText; @@ -25,40 +25,40 @@ BYTE *pLifeBuff; BYTE *pBtmBuff; BYTE *pTalkBtns; int pstrjust[4]; -int pnumlines; // idb +int pnumlines; BOOL pinfoflag; BOOL talkbtndown[3]; -int pSpell; // weak +int pSpell; BYTE *pManaBuff; -char infoclr; // weak -int sgbPlrTalkTbl; // weak // should be char [4] +char infoclr; +int sgbPlrTalkTbl; // should be char [4] BYTE *pGBoxBuff; BYTE *pSBkBtnCel; char tempstr[256]; BOOLEAN whisper[MAX_PLRS]; -int sbooktab; // weak -int pSplType; // weak -int frame; // idb -int initialDropGoldIndex; // idb -int talkflag; // weak +int sbooktab; +int pSplType; +int frame; +int initialDropGoldIndex; +BOOL talkflag; BYTE *pSBkIconCels; -int sbookflag; // weak -int chrflag; +BOOL sbookflag; +BOOL chrflag; BOOL drawbtnflag; BYTE *pSpellBkCel; char infostr[MAX_PATH]; -int numpanbtns; // weak +int numpanbtns; BYTE *pStatusPanel; char panelstr[256]; -int panelflag; // weak -unsigned char SplTransTbl[256]; -int initialDropGoldValue; // idb +BOOL panelflag; +BYTE SplTransTbl[256]; +int initialDropGoldValue; BYTE *pSpellCels; BOOL panbtndown; BYTE *pTalkPanel; -int spselflag; // weak +int spselflag; -const unsigned char fontframe[128] = { +const BYTE fontframe[128] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 44, 57, 58, 56, 55, 47, 40, 41, 59, 39, 50, 37, 51, 52, @@ -68,7 +68,7 @@ const unsigned char fontframe[128] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 40, 66, 41, 67, 0 }; -const unsigned char fontkern[68] = { +const BYTE fontkern[68] = { 8, 10, 7, 9, 8, 7, 6, 8, 8, 3, 3, 8, 6, 11, 9, 10, 6, 9, 9, 6, 9, 11, 10, 13, 10, 11, 7, 5, 7, 7, @@ -104,7 +104,7 @@ const int lineoffset[25] = { BUFFER_WIDTH * 606 + 241, BUFFER_WIDTH * 617 + 241 }; -const unsigned char gbFontTransTbl[256] = { +const BYTE gbFontTransTbl[256] = { // clang-format off '\0', 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -500,8 +500,6 @@ void DrawSpellList() } } } -// 4B8834: using guessed type int pSpell; -// 4B8954: using guessed type int pSplType; void SetSpell() { @@ -1135,7 +1133,7 @@ void InitControlPan() CelDecodeRect(pLifeBuff, 0, 87, 88, pStatusPanel, 1, 88); CelDecodeRect(pManaBuff, 0, 87, 88, pStatusPanel, 2, 88); MemFreeDbg(pStatusPanel); - talkflag = 0; + talkflag = FALSE; if (gbMaxPlayers != 1) { pTalkPanel = LoadFileInMem("CtrlPan\\TalkPanl.CEL", NULL); CelDecodeRect(pBtmBuff, 0, (PANEL_HEIGHT + 16) * 2 - 1, PANEL_WIDTH, pTalkPanel, 1, PANEL_WIDTH); @@ -1149,8 +1147,8 @@ void InitControlPan() for (i = 0; i < sizeof(talkbtndown) / sizeof(talkbtndown[0]); i++) talkbtndown[i] = FALSE; } - panelflag = 0; - lvlbtndown = 0; + panelflag = FALSE; + lvlbtndown = FALSE; pPanelButtons = LoadFileInMem("CtrlPan\\Panel8bu.CEL", NULL); for (i = 0; i < sizeof(panbtn) / sizeof(panbtn[0]); i++) panbtn[i] = 0; @@ -1168,13 +1166,13 @@ void InitControlPan() ClearPanel(); drawhpflag = TRUE; drawmanaflag = TRUE; - chrflag = 0; + chrflag = FALSE; spselflag = 0; pSpellBkCel = LoadFileInMem("Data\\SpellBk.CEL", NULL); pSBkBtnCel = LoadFileInMem("Data\\SpellBkB.CEL", NULL); pSBkIconCels = LoadFileInMem("Data\\SpellI2.CEL", NULL); sbooktab = 0; - sbookflag = 0; + sbookflag = FALSE; if (plr[myplr]._pClass == PC_WARRIOR) { SpellPages[0][0] = SPL_REPAIR; } else if (plr[myplr]._pClass == PC_ROGUE) { @@ -1327,7 +1325,7 @@ void CheckPanelInfo() { int i, c, v, s; - panelflag = 0; + panelflag = FALSE; ClearPanel(); for (i = 0; i < numpanbtns; i++) { if (MouseX >= PanBtnPos[i][0] @@ -1347,14 +1345,14 @@ void CheckPanelInfo() AddPanelString(tempstr, TRUE); } infoclr = COL_WHITE; - panelflag = 1; + panelflag = TRUE; pinfoflag = TRUE; } } if (!spselflag && MouseX >= 565 && MouseX < 621 && MouseY >= 416 && MouseY < 472) { strcpy(infostr, "Select current spell button"); infoclr = COL_WHITE; - panelflag = 1; + panelflag = TRUE; pinfoflag = TRUE; strcpy(tempstr, "Hotkey : 's'"); AddPanelString(tempstr, TRUE); @@ -1416,12 +1414,6 @@ void CheckPanelInfo() if (MouseX > 190 && MouseX < 437 && MouseY > 356 && MouseY < 385) pcursinvitem = CheckInvHLight(); } -// 484368: using guessed type int FriendlyMode; -// 4B883C: using guessed type int infoclr; -// 4B8A7C: using guessed type int numpanbtns; -// 4B8B84: using guessed type int panelflag; -// 4B8C98: using guessed type int spselflag; -// 4B8CB8: using guessed type char pcursinvitem; void CheckBtnUp() { @@ -1449,10 +1441,10 @@ void CheckBtnUp() switch (i) { case PANBTN_CHARINFO: questlog = FALSE; - chrflag = chrflag == 0; + chrflag = !chrflag; break; case PANBTN_QLOG: - chrflag = 0; + chrflag = FALSE; if (!questlog) StartQuestlog(); else @@ -1467,7 +1459,7 @@ void CheckBtnUp() gamemenuOff = 0; break; case PANBTN_INVENTORY: - sbookflag = 0; + sbookflag = FALSE; invflag = invflag == 0; if (dropGoldFlag) { dropGoldFlag = FALSE; @@ -1480,7 +1472,7 @@ void CheckBtnUp() dropGoldFlag = FALSE; dropGoldValue = 0; } - sbookflag = sbookflag == 0; + sbookflag = !sbookflag; break; case PANBTN_SENDMSG: if (talkflag) @@ -1933,14 +1925,14 @@ void MY_PlrStringXY(int x, int y, int width, char *pszStr, char col, int base) void CheckLvlBtn() { if (!lvlbtndown && MouseX >= 40 && MouseX <= 81 && MouseY >= 313 && MouseY <= 335) - lvlbtndown = 1; + lvlbtndown = TRUE; } void ReleaseLvlBtn() { if (MouseX >= 40 && MouseX <= 81 && MouseY >= 313 && MouseY <= 335) - chrflag = 1; - lvlbtndown = 0; + chrflag = TRUE; + lvlbtndown = FALSE; } void DrawLevelUpIcon() @@ -2468,14 +2460,14 @@ void DrawTalkPan() } } -char *control_print_talk_msg(char *msg, int x, int y, int *a4, int color) +char *control_print_talk_msg(char *msg, int x, int y, int *nOffset, int color) { BYTE c; int width; x += 264; width = x; - *a4 = PitchTbl[y + 534] + x; + *nOffset = PitchTbl[y + 534] + x; while (*msg) { c = fontframe[gbFontTransTbl[(BYTE)*msg]]; @@ -2484,11 +2476,11 @@ char *control_print_talk_msg(char *msg, int x, int y, int *a4, int color) return msg; msg++; if (c) { - CPrintString(*a4, c, color); + CPrintString(*nOffset, c, color); } - *a4 += fontkern[c] + 1; + *nOffset += fontkern[c] + 1; } - return 0; + return NULL; } BOOL control_check_talk_btn() @@ -2558,7 +2550,7 @@ void control_type_message() return; } - talkflag = 1; + talkflag = TRUE; sgszTalkMsg[0] = 0; frame = 1; for (i = 0; i < 3; i++) { @@ -2571,7 +2563,7 @@ void control_type_message() void control_reset_talk() { - talkflag = 0; + talkflag = FALSE; sgbPlrTalkTbl = 0; drawpanflag = 255; } diff --git a/Source/control.h b/Source/control.h index f1f963611..803bdc4c3 100644 --- a/Source/control.h +++ b/Source/control.h @@ -4,16 +4,16 @@ extern BYTE *pDurIcons; extern BYTE *pChrButtons; -extern BOOL drawhpflag; // idb +extern BOOL drawhpflag; extern BOOL dropGoldFlag; extern int panbtn[8]; extern int chrbtn[4]; extern BYTE *pMultiBtns; extern BYTE *pPanelButtons; extern BYTE *pChrPanel; -extern int lvlbtndown; // weak -extern int dropGoldValue; // idb -extern BOOL drawmanaflag; // idb +extern BOOL lvlbtndown; +extern int dropGoldValue; +extern BOOL drawmanaflag; extern BOOL chrbtnactive; extern BYTE *pPanelText; extern int nGoldFrame; @@ -21,37 +21,37 @@ extern BYTE *pLifeBuff; extern BYTE *pBtmBuff; extern BYTE *pTalkBtns; extern int pstrjust[4]; -extern int pnumlines; // idb +extern int pnumlines; extern BOOL pinfoflag; extern BOOL talkbtndown[3]; -extern int pSpell; // weak +extern int pSpell; extern BYTE *pManaBuff; -extern char infoclr; // weak +extern char infoclr; extern BYTE *pGBoxBuff; extern BYTE *pSBkBtnCel; extern char tempstr[256]; extern BOOLEAN whisper[MAX_PLRS]; -extern int sbooktab; // weak -extern int pSplType; // weak -extern int frame; // idb -extern int initialDropGoldIndex; // idb -extern int talkflag; // weak +extern int sbooktab; +extern int pSplType; +extern int frame; +extern int initialDropGoldIndex; +extern BOOL talkflag; extern BYTE *pSBkIconCels; -extern int sbookflag; // weak -extern int chrflag; +extern BOOL sbookflag; +extern BOOL chrflag; extern BOOL drawbtnflag; extern BYTE *pSpellBkCel; extern char infostr[MAX_PATH]; -extern int numpanbtns; // weak +extern int numpanbtns; extern BYTE *pStatusPanel; extern char panelstr[256]; -extern int panelflag; // weak -extern unsigned char SplTransTbl[256]; -extern int initialDropGoldValue; // idb +extern BOOL panelflag; +extern BYTE SplTransTbl[256]; +extern int initialDropGoldValue; extern BYTE *pSpellCels; extern BOOL panbtndown; extern BYTE *pTalkPanel; -extern int spselflag; // weak +extern int spselflag; void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w); void SetSpellTrans(char t); @@ -109,7 +109,7 @@ void control_drop_gold(char vkey); void control_remove_gold(int pnum, int gold_index); void control_set_gold_curs(int pnum); void DrawTalkPan(); -char *control_print_talk_msg(char *msg, int x, int y, int *a4, int just); +char *control_print_talk_msg(char *msg, int x, int y, int *nOffset, int just); BOOL control_check_talk_btn(); void control_release_talk_btn(); void control_reset_talk_msg(); @@ -121,10 +121,10 @@ void control_press_enter(); void control_up_down(int v); /* rdata */ -extern const unsigned char fontframe[128]; -extern const unsigned char fontkern[68]; +extern const BYTE fontframe[128]; +extern const BYTE fontkern[68]; extern const int lineoffset[25]; -extern const unsigned char gbFontTransTbl[256]; +extern const BYTE gbFontTransTbl[256]; /* data */ diff --git a/Source/cursor.cpp b/Source/cursor.cpp index acfa1a5a1..7739bc75e 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -7,7 +7,7 @@ int icursH28; int cursW; int pcursmonst; int icursW28; -void *pCursCels; +BYTE *pCursCels; int icursH; // inv_item value @@ -261,8 +261,8 @@ void CheckCursMove() } pcursinvitem = -1; pcursplr = -1; - uitemflag = 0; - panelflag = 0; + uitemflag = FALSE; + panelflag = FALSE; trigflag = FALSE; if (plr[myplr]._pInvincible) { diff --git a/Source/cursor.h b/Source/cursor.h index 64a336921..5fbb42419 100644 --- a/Source/cursor.h +++ b/Source/cursor.h @@ -7,7 +7,7 @@ extern int icursH28; extern int cursW; extern int pcursmonst; extern int icursW28; -extern void *pCursCels; +extern BYTE *pCursCels; extern int icursH; extern char pcursinvitem; extern int icursW; diff --git a/Source/dead.h b/Source/dead.h index df8caacab..bc16374d3 100644 --- a/Source/dead.h +++ b/Source/dead.h @@ -2,7 +2,7 @@ #ifndef __DEAD_H__ #define __DEAD_H__ -extern int spurtndx; // weak +extern int spurtndx; extern DeadStruct dead[MAXDEAD]; extern int stonendx; diff --git a/Source/debug.cpp b/Source/debug.cpp index c132d876f..7a5a963cd 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -10,7 +10,7 @@ int seed_index; int level_seeds[NUMLEVELS]; int seed_table[4096]; -void *pSquareCel; +BYTE *pSquareCel; char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; char dFlagDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; diff --git a/Source/debug.h b/Source/debug.h index 61160f98e..d3dacf707 100644 --- a/Source/debug.h +++ b/Source/debug.h @@ -2,7 +2,7 @@ #ifndef __DEBUG_H__ #define __DEBUG_H__ -extern void *pSquareCel; +extern BYTE *pSquareCel; extern char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; extern char dFlagDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 678131202..6205e03a9 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -8,33 +8,33 @@ HWND ghMainWnd; int glMid1Seed[NUMLEVELS]; int glMid2Seed[NUMLEVELS]; int gnLevelTypeTbl[NUMLEVELS]; -int MouseY; // idb -int MouseX; // idb -BOOL gbGameLoopStartup; // idb +int MouseY; +int MouseX; +BOOL gbGameLoopStartup; DWORD glSeedTbl[NUMLEVELS]; BOOL gbRunGame; int glMid3Seed[NUMLEVELS]; BOOL gbRunGameResult; -int zoomflag; // weak +int zoomflag; BOOL gbProcessPlayers; int glEndSeed[NUMLEVELS]; BOOL gbLoadGame; -HINSTANCE ghInst; // idb +HINSTANCE ghInst; int DebugMonsters[10]; -char cineflag; // weak -int drawpanflag; // weak -int visiondebug; // weak -int scrollflag; /* unused */ +BOOLEAN cineflag; +int drawpanflag; +BOOL visiondebug; +BOOL scrollflag; /* unused */ BOOL light4flag; -int leveldebug; // weak -int monstdebug; // weak -int trigdebug; /* unused */ -int setseed; // weak -int debugmonsttypes; // weak -int PauseMode; // weak +BOOL leveldebug; +BOOL monstdebug; +BOOL trigdebug; /* unused */ +int setseed; +int debugmonsttypes; +int PauseMode; int sgnTimeoutCurs; -char sgbMouseDown; // weak -int color_cycle_timer; // weak +char sgbMouseDown; +int color_cycle_timer; /* rdata */ @@ -63,8 +63,8 @@ char *spszMsgTbl[4] = { "Follow me.", "Here's something for you.", "Now you DIE!" -}; // weak -char *spszMsgKeyTbl[4] = { "F9", "F10", "F11", "F12" }; // weak +}; +char *spszMsgKeyTbl[4] = { "F9", "F10", "F11", "F12" }; void FreeGameMem() { @@ -120,7 +120,6 @@ BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer) SNetDestroy(); return gbRunGameResult; } -// 678640: using guessed type char byte_678640; void run_game_loop(unsigned int uMsg) { @@ -194,9 +193,6 @@ void run_game_loop(unsigned int uMsg) DoEnding(); } } -// 525718: using guessed type char cineflag; -// 52571C: using guessed type int drawpanflag; -// 679660: using guessed type char gbMaxPlayers; void start_game(unsigned int uMsg) { @@ -214,9 +210,6 @@ void start_game(unsigned int uMsg) sgbMouseDown = 0; track_repeat_walk(0); } -// 52569C: using guessed type int zoomflag; -// 525718: using guessed type char cineflag; -// 525748: using guessed type char sgbMouseDown; void free_game() { @@ -336,7 +329,7 @@ void diablo_parse_flags(char *args) gbBackBuf = 1; args += strlen("dd_backbuf"); } else if (_strnicmp("ds_noduplicates", args, strlen("ds_noduplicates")) == 0) { - gbDupSounds = 0; + gbDupSounds = FALSE; args += strlen("ds_noduplicates"); } else { c = tolower(*args); @@ -379,7 +372,7 @@ void diablo_parse_flags(char *args) break; case 'l': setlevel = FALSE; - leveldebug = 1; + leveldebug = TRUE; while (isspace(*args)) { args++; } @@ -401,7 +394,7 @@ void diablo_parse_flags(char *args) plr[0].plrlevel = i; break; case 'm': - monstdebug = 1; + monstdebug = TRUE; while (isspace(*args)) { args++; } @@ -441,7 +434,7 @@ void diablo_parse_flags(char *args) debug_mode_key_s = 1; break; case 't': - leveldebug = 1; + leveldebug = TRUE; setlevel = TRUE; while (isspace(*args)) { args++; @@ -454,7 +447,7 @@ void diablo_parse_flags(char *args) setlvlnum = i; break; case 'v': - visiondebug = 1; + visiondebug = TRUE; break; case 'w': debug_mode_key_w = 1; @@ -467,8 +460,6 @@ void diablo_parse_flags(char *args) } } } -// 52A548: using guessed type char gbBackBuf; -// 52A549: using guessed type char gbEmulate; void diablo_init_screen() { @@ -636,13 +627,6 @@ BOOL PressEscKey() return rv; } -// 4B8960: using guessed type int talkflag; -// 4B8C98: using guessed type int spselflag; -// 52575C: using guessed type int doomflag; -// 52B9F0: using guessed type char msgdelay; -// 52B9F1: using guessed type char msgflag; -// 646D00: using guessed type char qtextflag; -// 6AA705: using guessed type char stextflag; LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -686,7 +670,6 @@ LRESULT CALLBACK DisableInputWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM return MainWndProc(hWnd, uMsg, wParam, lParam); } -// 525748: using guessed type char sgbMouseDown; LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -787,9 +770,6 @@ LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return MainWndProc(hWnd, uMsg, wParam, lParam); } -// 52571C: using guessed type int drawpanflag; -// 525748: using guessed type char sgbMouseDown; -// 679660: using guessed type char gbMaxPlayers; BOOL LeftMouseDown(int wParam) { @@ -946,9 +926,6 @@ BOOL TryIconCurs() return FALSE; } -// 4B8CB8: using guessed type char pcursinvitem; -// 4B8CC1: using guessed type char pcursobj; -// 4B8CC2: using guessed type char pcursplr; void LeftMouseUp() { @@ -963,8 +940,6 @@ void LeftMouseUp() if (stextflag) ReleaseStoreBtn(); } -// 4B851C: using guessed type int lvlbtndown; -// 6AA705: using guessed type char stextflag; void RightMouseDown() { @@ -988,12 +963,6 @@ void RightMouseDown() } } } -// 4B8968: using guessed type int sbookflag; -// 4B8C98: using guessed type int spselflag; -// 4B8CB8: using guessed type char pcursinvitem; -// 525740: using guessed type int PauseMode; -// 52575C: using guessed type int doomflag; -// 6AA705: using guessed type char stextflag; BOOL PressSysKey(int wParam) { @@ -1026,9 +995,6 @@ void diablo_hotkey_msg(DWORD dwMsg) GetPrivateProfileString("NetMsg", spszMsgKeyTbl[dwMsg], spszMsgTbl[dwMsg], szMsg, sizeof(szMsg), szFileName); NetSendCmdString(-1, szMsg); } -// 48436C: using guessed type char *spszMsgTbl[4]; -// 48437C: using guessed type char *spszMsgKeyTbl[4]; -// 679660: using guessed type char gbMaxPlayers; void ReleaseKey(int vkey) { @@ -1102,11 +1068,11 @@ void PressKey(int vkey) track_repeat_walk(0); } else { invflag = 0; - chrflag = 0; - sbookflag = 0; + chrflag = FALSE; + sbookflag = FALSE; spselflag = 0; if (qtextflag && leveltype == DTYPE_TOWN) { - qtextflag = 0; + qtextflag = FALSE; sfx_stop(); } questlog = FALSE; @@ -1220,11 +1186,11 @@ void PressKey(int vkey) } helpflag = 0; invflag = 0; - chrflag = 0; - sbookflag = 0; + chrflag = FALSE; + sbookflag = FALSE; spselflag = 0; if (qtextflag && leveltype == DTYPE_TOWN) { - qtextflag = 0; + qtextflag = FALSE; sfx_stop(); } questlog = FALSE; @@ -1234,17 +1200,10 @@ void PressKey(int vkey) doom_close(); } } -// 4B8960: using guessed type int talkflag; -// 4B8968: using guessed type int sbookflag; -// 4B8C98: using guessed type int spselflag; -// 525740: using guessed type int PauseMode; -// 52B9F0: using guessed type char msgdelay; -// 646D00: using guessed type char qtextflag; -// 6AA705: using guessed type char stextflag; void diablo_pause_game() { - if ((unsigned char)gbMaxPlayers <= 1u) { + if (gbMaxPlayers <= 1) { if (PauseMode) { PauseMode = 0; } else { @@ -1255,9 +1214,6 @@ void diablo_pause_game() drawpanflag = 255; } } -// 52571C: using guessed type int drawpanflag; -// 525740: using guessed type int PauseMode; -// 679660: using guessed type char gbMaxPlayers; /* NOTE: `return` must be used instead of `break` to be bin exact as C++ */ void PressChar(int vkey) @@ -1293,7 +1249,7 @@ void PressChar(int vkey) case 'I': case 'i': if (!stextflag) { - sbookflag = 0; + sbookflag = FALSE; invflag = invflag == 0; if (!invflag || chrflag) { if (MouseX < 480 && MouseY < PANEL_TOP) { @@ -1310,7 +1266,7 @@ void PressChar(int vkey) case 'c': if (!stextflag) { questlog = FALSE; - chrflag = chrflag == 0; + chrflag = !chrflag; if (!chrflag || invflag) { if (MouseX > 160 && MouseY < PANEL_TOP) { SetCursorPos(MouseX - 160, MouseY); @@ -1325,7 +1281,7 @@ void PressChar(int vkey) case 'Q': case 'q': if (!stextflag) { - chrflag = 0; + chrflag = FALSE; if (!questlog) { StartQuestlog(); } else { @@ -1353,7 +1309,7 @@ void PressChar(int vkey) case 'b': if (!stextflag) { invflag = 0; - sbookflag = sbookflag == 0; + sbookflag = !sbookflag; } return; case '+': @@ -1524,18 +1480,12 @@ void PressChar(int vkey) #endif } } -// 4B8968: using guessed type int sbookflag; -// 4B8C98: using guessed type int spselflag; -// 52569C: using guessed type int zoomflag; -// 525740: using guessed type int PauseMode; -// 52575C: using guessed type int doomflag; -// 6AA705: using guessed type char stextflag; void LoadLvlGFX() { /// ASSERT: assert(! pDungeonCels); - switch ((unsigned char)leveltype) { + switch (leveltype) { case DTYPE_TOWN: pDungeonCels = LoadFileInMem("Levels\\TownData\\Town.CEL", NULL); pMegaTiles = LoadFileInMem("Levels\\TownData\\Town.TIL", NULL); @@ -1835,8 +1785,6 @@ void LoadGameLevel(BOOL firstflag, int lvldir) if (setlevel && setlvlnum == SL_SKELKING && quests[QTYPE_KING]._qactive == 2) PlaySFX(USFX_SKING1); } -// 525738: using guessed type int setseed; -// 679660: using guessed type char gbMaxPlayers; void game_loop(BOOL bStartup) { @@ -1856,7 +1804,6 @@ void game_loop(BOOL bStartup) break; } } -// 679660: using guessed type char gbMaxPlayers; void game_logic() { @@ -1904,10 +1851,6 @@ void game_logic() drawpanflag |= 1; pfile_update(FALSE); } -// 525718: using guessed type char cineflag; -// 52571C: using guessed type int drawpanflag; -// 525740: using guessed type int PauseMode; -// 679660: using guessed type char gbMaxPlayers; void timeout_cursor(BOOL bTimeout) { @@ -1929,8 +1872,6 @@ void timeout_cursor(BOOL bTimeout) drawpanflag = 255; } } -// 52571C: using guessed type int drawpanflag; -// 525748: using guessed type char sgbMouseDown; void diablo_color_cyc_logic() { @@ -1949,6 +1890,5 @@ void diablo_color_cyc_logic() } } } -// 52574C: using guessed type int color_cycle_timer; DEVILUTION_END_NAMESPACE diff --git a/Source/diablo.h b/Source/diablo.h index f80160d03..6df7dfd43 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -87,32 +87,32 @@ extern HWND ghMainWnd; extern int glMid1Seed[NUMLEVELS]; extern int glMid2Seed[NUMLEVELS]; extern int gnLevelTypeTbl[NUMLEVELS]; -extern int MouseY; // idb -extern int MouseX; // idb -extern BOOL gbGameLoopStartup; // idb +extern int MouseY; +extern int MouseX; +extern BOOL gbGameLoopStartup; extern DWORD glSeedTbl[NUMLEVELS]; extern BOOL gbRunGame; extern int glMid3Seed[NUMLEVELS]; extern BOOL gbRunGameResult; -extern int zoomflag; // weak +extern int zoomflag; extern BOOL gbProcessPlayers; extern int glEndSeed[NUMLEVELS]; extern BOOL gbLoadGame; -extern HINSTANCE ghInst; // idb +extern HINSTANCE ghInst; extern int DebugMonsters[10]; -extern char cineflag; // weak -extern int drawpanflag; // weak -extern int visiondebug; // weak -extern int scrollflag; /* unused */ +extern BOOLEAN cineflag; +extern int drawpanflag; +extern BOOL visiondebug; +extern BOOL scrollflag; /* unused */ extern BOOL light4flag; -extern int leveldebug; // weak -extern int monstdebug; // weak -extern int trigdebug; /* unused */ -extern int setseed; // weak -extern int debugmonsttypes; // weak -extern int PauseMode; // weak -extern char sgbMouseDown; // weak -extern int color_cycle_timer; // weak +extern BOOL leveldebug; +extern BOOL monstdebug; +extern BOOL trigdebug; /* unused */ +extern int setseed; +extern int debugmonsttypes; +extern int PauseMode; +extern char sgbMouseDown; +extern int color_cycle_timer; void FreeGameMem(); BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer); @@ -173,8 +173,8 @@ extern int framerate; extern int framestart; #endif extern BOOL FriendlyMode; -extern char *spszMsgTbl[4]; // weak -extern char *spszMsgKeyTbl[4]; // weak +extern char *spszMsgTbl[4]; +extern char *spszMsgKeyTbl[4]; #ifdef DEVILUTION_STUB #include "miniwin/popdecl.inc" diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index 06df1eae3..252cba77a 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -2,7 +2,7 @@ DEVILUTION_BEGIN_NAMESPACE -char L5dungeon[80][80]; +BYTE L5dungeon[80][80]; BYTE L5dflags[DMAXX][DMAXY]; BOOL setloadflag; int HR1; @@ -108,7 +108,7 @@ const BYTE LAMPS[] = { 2, 2, 13, 0, 13, 13, 129, 0, 130, 128 }; const BYTE PWATERIN[] = { 6, 6, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 202, 200, 200, 84, 0, 0, 199, 203, 203, 83, 0, 0, 85, 206, 80, 81, 0, 0, 0, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0 }; /* data */ -BYTE L5ConvTbl[16] = { 22u, 13u, 1u, 13u, 2u, 13u, 13u, 13u, 4u, 13u, 1u, 13u, 2u, 13u, 16u, 13u }; +BYTE L5ConvTbl[16] = { 22, 13, 1, 13, 2, 13, 13, 13, 4, 13, 1, 13, 2, 13, 16, 13 }; void DRLG_Init_Globals() { @@ -1035,10 +1035,10 @@ void L5makeDmt() for (j = 0, dmty = 1; dmty <= 77; j++, dmty += 2) { for (i = 0, dmtx = 1; dmtx <= 77; i++, dmtx += 2) { - int val = (unsigned char)L5dungeon[dmtx + 1][dmty + 1]; /* todo: unsigned */ - val = 2 * val + (unsigned char)L5dungeon[dmtx][dmty + 1]; - val = 2 * val + (unsigned char)L5dungeon[dmtx + 1][dmty]; - val = 2 * val + (unsigned char)L5dungeon[dmtx][dmty]; + int val = L5dungeon[dmtx + 1][dmty + 1]; + val = 2 * val + L5dungeon[dmtx][dmty + 1]; + val = 2 * val + L5dungeon[dmtx + 1][dmty]; + val = 2 * val + L5dungeon[dmtx][dmty]; dungeon[i][j] = L5ConvTbl[val]; } } diff --git a/Source/drlg_l1.h b/Source/drlg_l1.h index ae9f38a61..b392eaa85 100644 --- a/Source/drlg_l1.h +++ b/Source/drlg_l1.h @@ -2,7 +2,7 @@ #ifndef __DRLG_L1_H__ #define __DRLG_L1_H__ -extern char L5dungeon[80][80]; +extern BYTE L5dungeon[80][80]; extern BYTE L5dflags[DMAXX][DMAXY]; extern BOOL setloadflag; extern int HR1; diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index 3082d13c7..6224462f0 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -16,8 +16,8 @@ int Room_Max = 10; int Room_Min = 4; int Dir_Xadd[5] = { 0, 0, 1, 0, -1 }; int Dir_Yadd[5] = { 0, -1, 0, 1, 0 }; -ShadowStruct SPATSL2[2] = { { 6u, 3u, 0u, 3u, 48u, 0u, 50u }, { 9u, 3u, 0u, 3u, 48u, 0u, 50u } }; -//short word_48489A = 0; // weak +ShadowStruct SPATSL2[2] = { { 6, 3, 0, 3, 48, 0, 50 }, { 9, 3, 0, 3, 48, 0, 50 } }; +//short word_48489A = 0; BYTE BTYPESL2[161] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 17, 18, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; BYTE BSTYPESL2[161] = { 0, 1, 2, 3, 0, 0, 6, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 6, 6, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 6, 2, 2, 2, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 2, 2, 3, 3, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; BYTE VARCH1[] = { 2, 4, 3, 0, 3, 1, 3, 4, 0, 7, 48, 0, 51, 39, 47, 44, 0, 0 }; diff --git a/Source/drlg_l4.cpp b/Source/drlg_l4.cpp index 0327f27c4..5ac2163b1 100644 --- a/Source/drlg_l4.cpp +++ b/Source/drlg_l4.cpp @@ -19,258 +19,258 @@ int SP4y1; int SP4y2; BYTE L4dungeon[80][80]; BYTE dung[20][20]; -//int dword_52A4DC; // weak +//int dword_52A4DC; -const BYTE L4ConvTbl[16] = { 30u, 6u, 1u, 6u, 2u, 6u, 6u, 6u, 9u, 6u, 1u, 6u, 2u, 6u, 3u, 6u }; +const BYTE L4ConvTbl[16] = { 30, 6, 1, 6, 2, 6, 6, 6, 9, 6, 1, 6, 2, 6, 3, 6 }; const BYTE L4USTAIRS[42] = { - 4u, - 5u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 0u, - 0u, - 0u, - 0u, - 36u, - 38u, - 35u, - 0u, - 37u, - 34u, - 33u, - 32u, - 0u, - 0u, - 31u, - 0u, - 0u, - 0u, - 0u, - 0u + 4, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 0, + 0, + 0, + 0, + 36, + 38, + 35, + 0, + 37, + 34, + 33, + 32, + 0, + 0, + 31, + 0, + 0, + 0, + 0, + 0 }; const BYTE L4TWARP[42] = { - 4u, - 5u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 0u, - 0u, - 0u, - 0u, - 134u, - 136u, - 133u, - 0u, - 135u, - 132u, - 131u, - 130u, - 0u, - 0u, - 129u, - 0u, - 0u, - 0u, - 0u, - 0u + 4, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 0, + 0, + 0, + 0, + 134, + 136, + 133, + 0, + 135, + 132, + 131, + 130, + 0, + 0, + 129, + 0, + 0, + 0, + 0, + 0 }; const BYTE L4DSTAIRS[52] = { - 5u, - 5u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u, - 45u, - 41u, - 0u, - 0u, - 44u, - 43u, - 40u, - 0u, - 0u, - 46u, - 42u, - 39u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45, + 41, + 0, + 0, + 44, + 43, + 40, + 0, + 0, + 46, + 42, + 39, + 0, + 0, + 0, + 0, + 0, + 0 }; const BYTE L4PENTA[52] = { - 5u, - 5u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u, - 98u, - 100u, - 103u, - 0u, - 0u, - 99u, - 102u, - 105u, - 0u, - 0u, - 101u, - 104u, - 106u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 98, + 100, + 103, + 0, + 0, + 99, + 102, + 105, + 0, + 0, + 101, + 104, + 106, + 0, + 0, + 0, + 0, + 0, + 0 }; const BYTE L4PENTA2[52] = { - 5u, - 5u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 6u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u, - 107u, - 109u, - 112u, - 0u, - 0u, - 108u, - 111u, - 114u, - 0u, - 0u, - 110u, - 113u, - 115u, - 0u, - 0u, - 0u, - 0u, - 0u, - 0u + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 107, + 109, + 112, + 0, + 0, + 108, + 111, + 114, + 0, + 0, + 110, + 113, + 115, + 0, + 0, + 0, + 0, + 0, + 0 }; const BYTE L4BTYPES[140] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, diff --git a/Source/drlg_l4.h b/Source/drlg_l4.h index 635870b73..d4ec873d5 100644 --- a/Source/drlg_l4.h +++ b/Source/drlg_l4.h @@ -17,9 +17,9 @@ extern int SP4x1; extern int SP4x2; extern int SP4y1; extern int SP4y2; -extern unsigned char L4dungeon[80][80]; -extern unsigned char dung[20][20]; -//int dword_52A4DC; // weak +extern BYTE L4dungeon[80][80]; +extern BYTE dung[20][20]; +//int dword_52A4DC; void DRLG_LoadL4SP(); void DRLG_FreeL4SP(); @@ -58,12 +58,12 @@ void DRLG_L4Corners(); void DRLG_L4Pass3(); /* rdata */ -extern const unsigned char L4ConvTbl[16]; -extern const unsigned char L4USTAIRS[42]; -extern const unsigned char L4TWARP[42]; -extern const unsigned char L4DSTAIRS[52]; -extern const unsigned char L4PENTA[52]; -extern const unsigned char L4PENTA2[52]; -extern const unsigned char L4BTYPES[140]; +extern const BYTE L4ConvTbl[16]; +extern const BYTE L4USTAIRS[42]; +extern const BYTE L4TWARP[42]; +extern const BYTE L4DSTAIRS[52]; +extern const BYTE L4PENTA[52]; +extern const BYTE L4PENTA2[52]; +extern const BYTE L4BTYPES[140]; #endif /* __DRLG_L4_H__ */ diff --git a/Source/dthread.cpp b/Source/dthread.cpp index bc5804212..f7e7db1c0 100644 --- a/Source/dthread.cpp +++ b/Source/dthread.cpp @@ -83,7 +83,7 @@ void dthread_start() } } -unsigned int __stdcall dthread_handler(void *unused) +unsigned int __stdcall dthread_handler(void *) { char *error_buf; TMegaPkt *pkt; diff --git a/Source/dthread.h b/Source/dthread.h index c029a277b..4ad5d3fb6 100644 --- a/Source/dthread.h +++ b/Source/dthread.h @@ -8,7 +8,7 @@ extern BOOLEAN dthread_running; void dthread_remove_player(int pnum); void dthread_send_delta(int pnum, char cmd, void *pbSrc, int dwLen); void dthread_start(); -unsigned int __stdcall dthread_handler(void *unused); +unsigned int __stdcall dthread_handler(void *); void dthread_cleanup(); /* data */ diff --git a/Source/effects.cpp b/Source/effects.cpp index 1583e620b..126ee40e5 100644 --- a/Source/effects.cpp +++ b/Source/effects.cpp @@ -8,7 +8,7 @@ int sfxdnum; HANDLE sfx_stream; TSFX *sfx_data_cur; -const char monster_action_sounds[] = { 'a', 'h', 'd', 's' }; // idb +const char monster_action_sounds[] = { 'a', 'h', 'd', 's' }; /* data */ diff --git a/Source/error.cpp b/Source/error.cpp index d4923e83e..29b11ebd9 100644 --- a/Source/error.cpp +++ b/Source/error.cpp @@ -87,21 +87,21 @@ void DrawDiabloMsg() int i, len, off, width, sx, sy; BYTE c; - CelDecodeOnly(165, 318, (BYTE *)pSTextSlidCels, 1, 12); - CelDecodeOnly(591, 318, (BYTE *)pSTextSlidCels, 4, 12); - CelDecodeOnly(165, 366, (BYTE *)pSTextSlidCels, 2, 12); - CelDecodeOnly(591, 366, (BYTE *)pSTextSlidCels, 3, 12); + CelDecodeOnly(165, 318, pSTextSlidCels, 1, 12); + CelDecodeOnly(591, 318, pSTextSlidCels, 4, 12); + CelDecodeOnly(165, 366, pSTextSlidCels, 2, 12); + CelDecodeOnly(591, 366, pSTextSlidCels, 3, 12); sx = 173; for (i = 0; i < 35; i++) { - CelDecodeOnly(sx, 318, (BYTE *)pSTextSlidCels, 5, 12); - CelDecodeOnly(sx, 366, (BYTE *)pSTextSlidCels, 7, 12); + CelDecodeOnly(sx, 318, pSTextSlidCels, 5, 12); + CelDecodeOnly(sx, 366, pSTextSlidCels, 7, 12); sx += 12; } sy = 330; for (i = 0; i < 3; i++) { - CelDecodeOnly(165, sy, (BYTE *)pSTextSlidCels, 6, 12); - CelDecodeOnly(591, sy, (BYTE *)pSTextSlidCels, 8, 12); + CelDecodeOnly(165, sy, pSTextSlidCels, 6, 12); + CelDecodeOnly(591, sy, pSTextSlidCels, 8, 12); sy += 12; } diff --git a/Source/fault.cpp b/Source/fault.cpp index 5a4091ce9..375c4f17e 100644 --- a/Source/fault.cpp +++ b/Source/fault.cpp @@ -83,7 +83,7 @@ LONG __stdcall TopLevelExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo) return EXCEPTION_CONTINUE_SEARCH; } -void fault_hex_format(BYTE *ptr, unsigned int numBytes) +void fault_hex_format(BYTE *ptr, DWORD numBytes) { DWORD i, bytesRead; const char *fmt; diff --git a/Source/fault.h b/Source/fault.h index beb2e61ab..0dc743cbc 100644 --- a/Source/fault.h +++ b/Source/fault.h @@ -14,7 +14,7 @@ void fault_init_filter(); void fault_cleanup_filter_atexit(); LPTOP_LEVEL_EXCEPTION_FILTER __cdecl fault_cleanup_filter(); LONG __stdcall TopLevelExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo); -void fault_hex_format(BYTE *ptr, unsigned int numBytes); +void fault_hex_format(BYTE *ptr, DWORD numBytes); void fault_unknown_module(LPCVOID lpAddress, LPSTR lpModuleName, int iMaxLength, int *sectionNum, int *sectionOffset); void fault_call_stack(void *instr, STACK_FRAME *stackAddr); char *fault_get_error_type(DWORD dwMessageId, LPSTR lpString1, DWORD nSize); diff --git a/Source/gamemenu.h b/Source/gamemenu.h index 6244d84f0..96daa5428 100644 --- a/Source/gamemenu.h +++ b/Source/gamemenu.h @@ -3,28 +3,28 @@ #define __GAMEMENU_H__ void gamemenu_previous(); -void gamemenu_enable_single(TMenuItem *a1); -void gamemenu_enable_multi(TMenuItem *a1); +void gamemenu_enable_single(TMenuItem *pMenuItems); +void gamemenu_enable_multi(TMenuItem *pMenuItems); void gamemenu_off(); void gamemenu_handle_previous(); -void j_gamemenu_previous(BOOL a1); -void gamemenu_new_game(BOOL a1); -void gamemenu_quit_game(BOOL a1); -void gamemenu_load_game(BOOL a1); -void gamemenu_save_game(BOOL a1); -void gamemenu_restart_town(BOOL a1); -void gamemenu_options(BOOL a1); +void j_gamemenu_previous(BOOL bActivate); +void gamemenu_new_game(BOOL bActivate); +void gamemenu_quit_game(BOOL bActivate); +void gamemenu_load_game(BOOL bActivate); +void gamemenu_save_game(BOOL bActivate); +void gamemenu_restart_town(BOOL bActivate); +void gamemenu_options(BOOL bActivate); void gamemenu_get_music(); void gamemenu_sound_music_toggle(char **names, TMenuItem *menu_item, int gamma); void gamemenu_get_sound(); void gamemenu_get_color_cycling(); void gamemenu_get_gamma(); -void gamemenu_music_volume(BOOL a1); +void gamemenu_music_volume(BOOL bActivate); int gamemenu_slider_music_sound(TMenuItem *menu_item); -void gamemenu_sound_volume(BOOL a1); -void gamemenu_gamma(BOOL a1); +void gamemenu_sound_volume(BOOL bActivate); +void gamemenu_gamma(BOOL bActivate); int gamemenu_slider_gamma(); -void gamemenu_color_cycling(BOOL a1); +void gamemenu_color_cycling(BOOL bActivate); /* rdata */ extern char *music_toggle_names[]; diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 5e5ab4334..be0c71ab2 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -4,14 +4,14 @@ DEVILUTION_BEGIN_NAMESPACE WORD level_frame_types[MAXTILES]; int themeCount; -char nTransTable[2049]; +BOOLEAN nTransTable[2049]; //int dword_52D204; int dMonster[MAXDUNX][MAXDUNY]; BYTE dungeon[DMAXX][DMAXY]; char dObject[MAXDUNX][MAXDUNY]; BYTE *pSpeedCels; int nlevel_frames; -char pdungeon[DMAXX][DMAXY]; +BYTE pdungeon[DMAXX][DMAXY]; char dDead[MAXDUNX][MAXDUNY]; MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; char dPreLight[MAXDUNX][MAXDUNY]; @@ -31,7 +31,7 @@ char dTransVal[MAXDUNX][MAXDUNY]; BOOLEAN nTrapTable[2049]; BYTE leveltype; BYTE currlevel; -char TransList[256]; +BOOLEAN TransList[256]; BOOLEAN nSolidTable[2049]; int level_frame_count[MAXTILES]; ScrollStruct ScrollInfo; @@ -44,13 +44,13 @@ int dword_5C2FFC; int scr_pix_width; int scr_pix_height; char dArch[MAXDUNX][MAXDUNY]; -char nBlockTable[2049]; +BOOLEAN nBlockTable[2049]; BYTE *pSpecialCels; char dFlags[MAXDUNX][MAXDUNY]; char dItem[MAXDUNX][MAXDUNY]; BYTE setlvlnum; int level_frame_sizes[MAXTILES]; -char nMissileTable[2049]; +BOOLEAN nMissileTable[2049]; char *pSetPiece_2; char setlvltype; BOOLEAN setlevel; @@ -109,11 +109,11 @@ void FillSolidBlockTbls() if (bv & 1) nSolidTable[i] = 1; if (bv & 2) - nBlockTable[i] = 1; + nBlockTable[i] = TRUE; if (bv & 4) - nMissileTable[i] = 1; + nMissileTable[i] = TRUE; if (bv & 8) - nTransTable[i] = 1; + nTransTable[i] = TRUE; if (bv & 0x80) nTrapTable[i] = 1; block_lvid[i] = (bv & 0x70) >> 4; /* beta: (bv >> 4) & 7 */ diff --git a/Source/gendung.h b/Source/gendung.h index 742101dae..344a9e916 100644 --- a/Source/gendung.h +++ b/Source/gendung.h @@ -4,14 +4,14 @@ extern WORD level_frame_types[MAXTILES]; extern int themeCount; -extern char nTransTable[2049]; +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 char pdungeon[DMAXX][DMAXY]; +extern BYTE pdungeon[DMAXX][DMAXY]; extern char dDead[MAXDUNX][MAXDUNY]; extern MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY]; extern char dPreLight[MAXDUNX][MAXDUNY]; @@ -31,7 +31,7 @@ extern char dTransVal[MAXDUNX][MAXDUNY]; extern BOOLEAN nTrapTable[2049]; extern BYTE leveltype; extern BYTE currlevel; -extern char TransList[256]; +extern BOOLEAN TransList[256]; extern BOOLEAN nSolidTable[2049]; extern int level_frame_count[MAXTILES]; extern ScrollStruct ScrollInfo; @@ -44,13 +44,13 @@ extern int dword_5C2FFC; extern int scr_pix_width; extern int scr_pix_height; extern char dArch[MAXDUNX][MAXDUNY]; -extern char nBlockTable[2049]; +extern BOOLEAN nBlockTable[2049]; extern BYTE *pSpecialCels; extern char dFlags[MAXDUNX][MAXDUNY]; extern char dItem[MAXDUNX][MAXDUNY]; extern BYTE setlvlnum; extern int level_frame_sizes[MAXTILES]; -extern char nMissileTable[2049]; +extern BOOLEAN nMissileTable[2049]; extern char *pSetPiece_2; extern char setlvltype; extern BOOLEAN setlevel; diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index cae579ec1..5d6ed2d8e 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -225,11 +225,11 @@ int gmenu_get_lfont(TMenuItem *pItem) return i - 2; } -BOOL gmenu_presskeys(int a1) +BOOL gmenu_presskeys(int vkey) { if (!sgpCurrentMenu) return 0; - switch (a1) { + switch (vkey) { case VK_RETURN: if ((sgpCurrItem->dwFlags & GMENU_ENABLED) != 0) { PlaySFX(IS_TITLEMOV); diff --git a/Source/gmenu.h b/Source/gmenu.h index c4ac6da3f..997aaffe9 100644 --- a/Source/gmenu.h +++ b/Source/gmenu.h @@ -21,10 +21,10 @@ BOOL gmenu_exception(); void gmenu_call_proc(TMenuItem *pItem, void (*gmFunc)(TMenuItem *)); void gmenu_up_down(BOOL isDown); void gmenu_draw(); -void gmenu_draw_menu_item(TMenuItem *pItem, int a2); +void gmenu_draw_menu_item(TMenuItem *pItem, int y); void gmenu_clear_buffer(int x, int y, int width, int height); int gmenu_get_lfont(TMenuItem *pItem); -BOOL gmenu_presskeys(int a1); +BOOL gmenu_presskeys(int vkey); void gmenu_left_right(BOOL isRight); BOOL gmenu_on_mouse_move(); BOOLEAN gmenu_valid_mouse_pos(int *plOffset); diff --git a/Source/help.cpp b/Source/help.cpp index 968ba64bc..c4806330f 100644 --- a/Source/help.cpp +++ b/Source/help.cpp @@ -2,11 +2,11 @@ DEVILUTION_BEGIN_NAMESPACE -int help_select_line; // weak -int dword_634494; // weak +int help_select_line; +int dword_634494; int helpflag; int displayinghelp[22]; /* check, does nothing? */ -int HelpTop; // weak +int HelpTop; const char gszHelpText[] = { "$Keyboard Shortcuts:|" @@ -83,7 +83,6 @@ void InitHelp() dword_634494 = 0; displayinghelp[0] = 0; } -// 634494: using guessed type int dword_634494; void DrawHelp() { @@ -173,8 +172,6 @@ void DrawHelp() PrintSString(0, 23, 1, "Press ESC to end or the arrow keys to scroll.", COL_GOLD, 0); } -// 634490: using guessed type int help_select_line; -// 634960: using guessed type int HelpTop; void DrawHelpLine(int always_0, int help_line_nr, char *text, char color) { @@ -202,22 +199,17 @@ void DisplayHelp() helpflag = 1; HelpTop = 5000; } -// 634490: using guessed type int help_select_line; -// 634960: using guessed type int HelpTop; void HelpScrollUp() { if (help_select_line > 0) help_select_line--; } -// 634490: using guessed type int help_select_line; void HelpScrollDown() { if (help_select_line < HelpTop) help_select_line++; } -// 634490: using guessed type int help_select_line; -// 634960: using guessed type int HelpTop; DEVILUTION_END_NAMESPACE diff --git a/Source/help.h b/Source/help.h index 91a9188bd..a96c5fb56 100644 --- a/Source/help.h +++ b/Source/help.h @@ -2,11 +2,11 @@ #ifndef __HELP_H__ #define __HELP_H__ -extern int help_select_line; // weak -extern int dword_634494; // weak +extern int help_select_line; +extern int dword_634494; extern int helpflag; extern int displayinghelp[22]; -extern int HelpTop; // weak +extern int HelpTop; void InitHelp(); void DrawHelp(); diff --git a/Source/init.cpp b/Source/init.cpp index 819bb94af..046a595a8 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -130,7 +130,7 @@ void init_disable_screensaver(BOOLEAN disable) } Data[1] = 0; Data[0] = enabled ? '1' : '0'; - RegSetValueEx(phkResult, "ScreenSaveActive", 0, REG_SZ, (const BYTE *)Data, 2u); + RegSetValueEx(phkResult, "ScreenSaveActive", 0, REG_SZ, (const BYTE *)Data, 2); RegCloseKey(phkResult); } } diff --git a/Source/init.h b/Source/init.h index 547888897..864b1fa78 100644 --- a/Source/init.h +++ b/Source/init.h @@ -3,7 +3,7 @@ #define __INIT_H__ extern _SNETVERSIONDATA fileinfo; -extern int gbActive; // weak +extern int gbActive; extern char diablo_exe_path[MAX_PATH]; extern HANDLE unused_mpq; extern char patch_rt_mpq_path[MAX_PATH]; @@ -11,7 +11,7 @@ extern WNDPROC CurrentProc; extern HANDLE diabdat_mpq; extern char diabdat_mpq_path[MAX_PATH]; extern HANDLE patch_rt_mpq; -extern BOOL killed_mom_parent; // weak +extern BOOL killed_mom_parent; extern BOOLEAN screensaver_enabled_prev; void init_cleanup(BOOL show_cursor); diff --git a/Source/interfac.h b/Source/interfac.h index 7686471b6..7b63e34cb 100644 --- a/Source/interfac.h +++ b/Source/interfac.h @@ -14,7 +14,7 @@ void InitCutscene(unsigned int uMsg); /* rdata */ -extern const unsigned char progress_bar_colours[3]; +extern const BYTE progress_bar_colours[3]; extern const int progress_bar_screen_pos[3][2]; #endif /* __INTERFAC_H__ */ diff --git a/Source/inv.cpp b/Source/inv.cpp index 2cc327251..f0fe63fb2 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -3,7 +3,7 @@ DEVILUTION_BEGIN_NAMESPACE BOOL invflag; -void *pInvCels; +BYTE *pInvCels; BOOL drawsbarflag; int sgdwLastTime; // check name @@ -172,7 +172,7 @@ void DrawInv() BOOL invtest[40]; int frame, frame_width, colour, screen_x, screen_y, i, j, ii; - CelDecodeOnly(384, 511, (BYTE *)pInvCels, 1, 320); + CelDecodeOnly(384, 511, pInvCels, 1, 320); if (plr[myplr].InvBody[INVLOC_HEAD]._itype != ITYPE_NONE) { InvDrawSlotBack(517, 219, 2 * INV_SLOT_SIZE_PX, 2 * INV_SLOT_SIZE_PX); @@ -188,13 +188,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, 517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, 517, 219, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) { - CelDrawHdrOnly(517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(517, 219, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(517, 219, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -212,13 +212,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, 432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, 432, 365, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) { - CelDrawHdrOnly(432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(432, 365, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(432, 365, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -236,13 +236,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, 633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, 633, 365, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) { - CelDrawHdrOnly(633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(633, 365, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(633, 365, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -260,13 +260,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, 589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, 589, 220, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) { - CelDrawHdrOnly(589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(589, 220, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(589, 220, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -287,13 +287,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, screen_x, screen_y, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) { - CelDrawHdrOnly(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(screen_x, screen_y, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 0, 8, 1); } if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) { @@ -305,7 +305,7 @@ void DrawInv() frame_width == INV_SLOT_SIZE_PX ? &gpBuffer[SCREENXY(581, 160)] : &gpBuffer[SCREENXY(567, 160)], - (BYTE *)pCursCels, frame, frame_width, 0, 8); + pCursCels, frame, frame_width, 0, 8); cel_transparency_active = 0; } @@ -327,13 +327,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, screen_x, screen_y, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { - CelDrawHdrOnly(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(screen_x, screen_y, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(screen_x, screen_y, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -351,13 +351,13 @@ void DrawInv() if (!plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) { colour = ICOL_RED; } - CelDecodeClr(colour, 517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, 517, 320, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) { - CelDrawHdrOnly(517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(517, 320, pCursCels, frame, frame_width, 0, 8); } else { - CelDrawHdrLightRed(517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(517, 320, pCursCels, frame, frame_width, 0, 8, 1); } } @@ -392,19 +392,19 @@ void DrawInv() colour, InvRect[j + SLOTXY_INV_FIRST].X + 64, InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (BYTE *)pCursCels, frame, frame_width, 0, 8); + pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].InvList[ii]._iStatFlag) { CelDrawHdrOnly( InvRect[j + SLOTXY_INV_FIRST].X + 64, InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (BYTE *)pCursCels, frame, frame_width, 0, 8); + pCursCels, frame, frame_width, 0, 8); } else { CelDrawHdrLightRed( InvRect[j + SLOTXY_INV_FIRST].X + 64, InvRect[j + SLOTXY_INV_FIRST].Y + 159, - (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + pCursCels, frame, frame_width, 0, 8, 1); } } } @@ -436,13 +436,13 @@ void DrawInvBelt() colour = ICOL_BLUE; if (!plr[myplr].SpdList[i]._iStatFlag) colour = ICOL_RED; - CelDecodeClr(colour, InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDecodeClr(colour, InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, pCursCels, frame, frame_width, 0, 8); } if (plr[myplr].SpdList[i]._iStatFlag) - CelDrawHdrOnly(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8); + CelDrawHdrOnly(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, pCursCels, frame, frame_width, 0, 8); else - CelDrawHdrLightRed(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1); + CelDrawHdrLightRed(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, pCursCels, frame, frame_width, 0, 8, 1); if (AllItemsList[plr[myplr].SpdList[i].IDidx].iUsable && plr[myplr].SpdList[i]._iStatFlag diff --git a/Source/items.cpp b/Source/items.cpp index b68946f60..e44e0ec4e 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -3,7 +3,7 @@ DEVILUTION_BEGIN_NAMESPACE int itemactive[MAXITEMS]; -int uitemflag; +BOOL uitemflag; int itemavail[MAXITEMS]; ItemStruct curruitem; ItemGetRecordStruct itemrecord[MAXITEMS]; @@ -280,11 +280,11 @@ void InitItems() SpawnRock(); if (QuestStatus(QTYPE_ANVIL)) SpawnQuestItem(IDI_ANVIL, 2 * setpc_x + 27, 2 * setpc_y + 27, 0, 1); - if (currlevel > 0u && currlevel < 0x10u) + if (currlevel > 0 && currlevel < 16) AddInitItems(); } - uitemflag = 0; + uitemflag = FALSE; } void CalcPlrItemVals(int p, BOOL Loadgfx) @@ -312,14 +312,14 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) unsigned __int64 spl = 0; // bitarray for all enabled/active spells - signed int fr = 0; // fire resistance - signed int lr = 0; // lightning resistance - signed int mr = 0; // magic resistance + int fr = 0; // fire resistance + int lr = 0; // lightning resistance + int mr = 0; // magic resistance int dmod = 0; // bonus damage mod? int ghit = 0; // increased damage from enemies - signed int lrad = 10; // light radius + int lrad = 10; // light radius int ihp = 0; // increased HP int imana = 0; // increased mana @@ -2886,7 +2886,7 @@ void PrintItemPower(char plidx, ItemStruct *x) void DrawUTextBack() { - CelDecodeOnly(88, 487, (BYTE *)pSTextBoxCels, 1, 271); + CelDecodeOnly(88, 487, pSTextBoxCels, 1, 271); #define TRANS_RECT_X 27 #define TRANS_RECT_Y 28 @@ -3056,7 +3056,7 @@ void PrintItemDetails(ItemStruct *x) } if (x->_iMagical == ITEM_QUALITY_UNIQUE) { AddPanelString("unique item", TRUE); - uitemflag = 1; + uitemflag = TRUE; curruitem = *x; } PrintItemMisc(x); diff --git a/Source/items.h b/Source/items.h index 90ac1b8c8..4e8d068c1 100644 --- a/Source/items.h +++ b/Source/items.h @@ -3,7 +3,7 @@ #define __ITEMS_H__ extern int itemactive[MAXITEMS]; -extern int uitemflag; +extern BOOL uitemflag; extern int itemavail[MAXITEMS]; extern ItemStruct curruitem; extern ItemGetRecordStruct itemrecord[MAXITEMS]; diff --git a/Source/lighting.cpp b/Source/lighting.cpp index 4521cad56..2f16f7e93 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -665,7 +665,8 @@ void DoUnVision(int nXPos, int nYPos, int nRadius) void DoVision(int nXPos, int nYPos, int nRadius, BOOL doautomap, BOOL visible) { - int nCrawlX, nCrawlY, nLineLen, nBlockerFlag, nTrans; + BOOL nBlockerFlag; + int nCrawlX, nCrawlY, nLineLen, nTrans; int j, k, v, x1adj, x2adj, y1adj, y2adj; if (nXPos >= 0 && nXPos <= MAXDUNX && nYPos >= 0 && nYPos <= MAXDUNY) { @@ -725,7 +726,7 @@ void DoVision(int nXPos, int nYPos, int nRadius, BOOL doautomap, BOOL visible) break; } if (nCrawlX >= 0 && nCrawlX <= MAXDUNX && nCrawlY >= 0 && nCrawlY <= MAXDUNY) { - nBlockerFlag = (BYTE)nBlockTable[dPiece[nCrawlX][nCrawlY]]; + nBlockerFlag = nBlockTable[dPiece[nCrawlX][nCrawlY]]; if (!nBlockTable[dPiece[x1adj + nCrawlX][y1adj + nCrawlY]] || !nBlockTable[dPiece[x2adj + nCrawlX][y2adj + nCrawlY]]) { if (doautomap) { @@ -741,7 +742,7 @@ void DoVision(int nXPos, int nYPos, int nRadius, BOOL doautomap, BOOL visible) if (!nBlockerFlag) { nTrans = dTransVal[nCrawlX][nCrawlY]; if (nTrans != 0) { - TransList[nTrans] = 1; + TransList[nTrans] = TRUE; } } } @@ -1152,7 +1153,7 @@ void InitVision() visionid = 1; for (i = 0; i < TransVal; i++) { - TransList[i] = 0; + TransList[i] = FALSE; } } @@ -1225,7 +1226,7 @@ void ProcessVisionList() } } for (i = 0; i < TransVal; i++) { - TransList[i] = 0; + TransList[i] = FALSE; } for (i = 0; i < numvision; i++) { if (!VisionList[i]._ldel) { diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 8b74af2f4..c5292bb79 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -779,10 +779,10 @@ void SaveGame() tbuff = SaveBuff; ISave('RETL'); - OSave((unsigned char)setlevel); + OSave(setlevel); WSave(setlvlnum); WSave(currlevel); - WSave((unsigned char)leveltype); + WSave(leveltype); WSave(ViewX); WSave(ViewY); OSave(invflag); @@ -1462,7 +1462,7 @@ void SaveLevel() int i, j; char szName[MAX_PATH]; int dwLen; - unsigned char *SaveBuff; + BYTE *SaveBuff; if (!currlevel) glSeedTbl[0] = GetRndSeed(); diff --git a/Source/mainmenu.h b/Source/mainmenu.h index 897856a84..c2bc0dd63 100644 --- a/Source/mainmenu.h +++ b/Source/mainmenu.h @@ -17,7 +17,7 @@ int __stdcall mainmenu_select_hero_dialog( BOOL *multi); // new character? - unsure about this void mainmenu_loop(); BOOL mainmenu_single_player(); -BOOL mainmenu_init_menu(int a1); +BOOL mainmenu_init_menu(int type); BOOL mainmenu_multi_player(); void mainmenu_play_intro(); @@ -25,6 +25,6 @@ void mainmenu_play_intro(); /* data */ -extern int menu_music_track_id; // idb +extern int menu_music_track_id; #endif /* __MAINMENU_H__ */ diff --git a/Source/minitext.cpp b/Source/minitext.cpp index 2c78ffded..6b79191fd 100644 --- a/Source/minitext.cpp +++ b/Source/minitext.cpp @@ -5,13 +5,13 @@ DEVILUTION_BEGIN_NAMESPACE int qtexty; char *qtextptr; int qtextSpd; -char qtextflag; +BOOLEAN qtextflag; int scrolltexty; int sgLastScroll; -void *pMedTextCels; -void *pTextBoxCels; +BYTE *pMedTextCels; +BYTE *pTextBoxCels; -const unsigned char mfontframe[127] = { +const BYTE mfontframe[127] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -26,7 +26,7 @@ const unsigned char mfontframe[127] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 48, 0, 49, 0 }; -const unsigned char mfontkern[56] = { +const BYTE mfontkern[56] = { 5, 15, 10, 13, 14, 10, 9, 13, 11, 5, 5, 11, 10, 16, 13, 16, 10, 15, 12, 10, 14, 17, 17, 22, 17, 16, 11, 5, 11, 11, @@ -68,7 +68,7 @@ void InitQTextMsg(int m) void DrawQTextBack() { - CelDecodeOnly(88, 487, (BYTE *)pTextBoxCels, 1, 591); + CelDecodeOnly(88, 487, pTextBoxCels, 1, 591); #define TRANS_RECT_X 27 #define TRANS_RECT_Y 28 @@ -243,7 +243,7 @@ void DrawQText() p++; } if (c != 0) { - PrintQTextChr(tx, ty, (BYTE *)pMedTextCels, c); + PrintQTextChr(tx, ty, pMedTextCels, c); } tx += mfontkern[c] + 2; } @@ -275,7 +275,7 @@ void DrawQText() qtexty += 38; qtextptr = pnl; if (*pnl == '|') { - qtextflag = 0; + qtextflag = FALSE; } break; } diff --git a/Source/minitext.h b/Source/minitext.h index e83883d3e..3be2aeea6 100644 --- a/Source/minitext.h +++ b/Source/minitext.h @@ -5,10 +5,10 @@ extern int qtexty; extern char *qtextptr; extern int qtextSpd; -extern char qtextflag; +extern BOOLEAN qtextflag; extern int scrolltexty; -extern void *pMedTextCels; -extern void *pTextBoxCels; +extern BYTE *pMedTextCels; +extern BYTE *pTextBoxCels; void FreeQuestText(); void InitQuestText(); @@ -19,8 +19,8 @@ void DrawQText(); /* rdata */ -extern const unsigned char mfontframe[127]; -extern const unsigned char mfontkern[56]; +extern const BYTE mfontframe[127]; +extern const BYTE mfontkern[56]; /* data */ diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 54dce0c3d..ee7811191 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -6,9 +6,9 @@ int missileactive[MAXMISSILES]; int missileavail[MAXMISSILES]; MissileStruct missile[MAXMISSILES]; int nummissiles; -int ManashieldFlag; +BOOL ManashieldFlag; ChainStruct chain[MAXMISSILES]; -int MissilePreFlag; +BOOL MissilePreFlag; int numchains; int XDirAdd[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; @@ -392,7 +392,7 @@ void PutMissile(int i) else dMissile[x][y] = -1; if (missile[i]._miPreFlag) - MissilePreFlag = 1; + MissilePreFlag = TRUE; } } @@ -1573,7 +1573,7 @@ void AddTown(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in tx = dx + CrawlTable[k - 1]; ty = dy + CrawlTable[k]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - if (!(dObject[tx][ty] | dPlayer[tx][ty] | dMissile[tx][ty] | nSolidTable[dPiece[tx][ty]] | (BYTE)nMissileTable[dPiece[tx][ty]])) { + if (!(dObject[tx][ty] | dPlayer[tx][ty] | dMissile[tx][ty] | nSolidTable[dPiece[tx][ty]] | nMissileTable[dPiece[tx][ty]])) { if (!CheckIfTrig(tx, ty)) { missile[mi]._miDelFlag = FALSE; missile[mi]._mix = tx; @@ -1705,7 +1705,7 @@ void AddGuardian(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy pn = dPiece[tx][ty]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { if (LineClear(sx, sy, tx, ty)) { - if (!(dMonster[tx][ty] | dObject[tx][ty] | dMissile[tx][ty] | nSolidTable[pn] | (BYTE)nMissileTable[pn])) { + if (!(dMonster[tx][ty] | dObject[tx][ty] | dMissile[tx][ty] | nSolidTable[pn] | nMissileTable[pn])) { missile[mi]._miDelFlag = FALSE; missile[mi]._mix = tx; missile[mi]._miy = ty; @@ -2095,7 +2095,7 @@ void AddIdentify(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy UseMana(id, SPL_IDENTIFY); if (id == myplr) { if (sbookflag) - sbookflag = 0; + sbookflag = FALSE; if (!invflag) invflag = 1; SetCursor_(CURSOR_IDENTIFY); @@ -2191,7 +2191,7 @@ void AddRepair(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, UseMana(id, SPL_REPAIR); if (id == myplr) { if (sbookflag) - sbookflag = 0; + sbookflag = FALSE; if (!invflag) invflag = 1; SetCursor_(CURSOR_REPAIR); @@ -2204,7 +2204,7 @@ void AddRecharge(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy UseMana(id, SPL_RECHARGE); if (id == myplr) { if (sbookflag) - sbookflag = 0; + sbookflag = FALSE; if (!invflag) invflag = 1; SetCursor_(CURSOR_RECHARGE); @@ -2541,7 +2541,7 @@ void MI_Golem(int i) void MI_SetManashield(int i) { - ManashieldFlag = 1; + ManashieldFlag = TRUE; } void MI_LArrow(int i) @@ -2932,13 +2932,13 @@ void MI_Lightctrl(int i) /// ASSERT: assert((DWORD)pn <= MAXTILES); if (missile[i]._misource == -1) { - if ((mx != missile[i]._misx || my != missile[i]._misy) && nMissileTable[pn] != 0) { + if ((mx != missile[i]._misx || my != missile[i]._misy) && nMissileTable[pn]) { missile[i]._mirange = 0; } - } else if (nMissileTable[pn] != 0) { + } else if (nMissileTable[pn]) { missile[i]._mirange = 0; } - if (nMissileTable[pn] == 0) { + if (!nMissileTable[pn]) { if ((mx != missile[i]._miVar1 || my != missile[i]._miVar2) && mx > 0 && my > 0 && mx < MAXDUNX && my < MAXDUNY) { if (missile[i]._misource != -1) { if (missile[i]._micaster == 1 @@ -3667,7 +3667,7 @@ void MI_Wave(int i) nya = sy + YDirAdd[sd]; pn = dPiece[nxa][nya]; /// ASSERT: assert((DWORD)pn <= MAXTILES); - if (nMissileTable[pn] == 0) { + if (!nMissileTable[pn]) { AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); nxa += XDirAdd[dira]; nya += YDirAdd[dira]; @@ -4041,8 +4041,8 @@ void ProcessMissiles() } } - MissilePreFlag = 0; - ManashieldFlag = 0; + MissilePreFlag = FALSE; + ManashieldFlag = FALSE; for (i = 0; i < nummissiles; i++) { mi = missileactive[i]; diff --git a/Source/missiles.h b/Source/missiles.h index 466bae271..b7e502c2c 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -6,9 +6,9 @@ extern int missileactive[MAXMISSILES]; extern int missileavail[MAXMISSILES]; extern MissileStruct missile[MAXMISSILES]; extern int nummissiles; -extern int ManashieldFlag; +extern BOOL ManashieldFlag; extern ChainStruct chain[MAXMISSILES]; -extern int MissilePreFlag; +extern BOOL MissilePreFlag; extern int numchains; void GetDamageAmt(int i, int *mind, int *maxd); diff --git a/Source/monstdat.cpp b/Source/monstdat.cpp index 47e082fa6..3edd87d00 100644 --- a/Source/monstdat.cpp +++ b/Source/monstdat.cpp @@ -1,258 +1,256 @@ -#include "diablo.h" - -DEVILUTION_BEGIN_NAMESPACE - -MonsterData monsterdata[112] = { - // clang-format off - // width, mImage, GraphicType, has_special, sndfile, snd_special, has_trans, TransFile, Frames[6], Rate[6], mName, mMinDLvl, mMaxDLvl, mLevel, mMinHP, mMaxHP, mAi, mFlags, mInt, mHit, mAFNum, mMinDamage, mMaxDamage, mHit2, mAFNum2, mMinDamage2, mMaxDamage2, mArmorClass, mMonstClass, mMagicRes , mMagicRes2 , mTreasure, mSelFlag, mExp - { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, FALSE, NULL, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Zombie", 1, 3, 1, 4, 7, AI_ZOMBIE, 0 , 0, 10, 8, 2, 5, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 54 }, - { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Bluered.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Ghoul", 2, 4, 2, 7, 11, AI_ZOMBIE, 0 , 1, 10, 8, 3, 10, 0, 0, 0, 0, 10, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 58 }, - { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Grey.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Rotting Carcass", 2, 6, 4, 15, 25, AI_ZOMBIE, 0 , 2, 25, 8, 5, 15, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 136 }, - { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Yellow.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Black Death", 4, 8, 6, 25, 40, AI_ZOMBIE, 0 , 3, 30, 8, 6, 22, 0, 0, 0, 0, 20, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 240 }, - { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\FallenT.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Fallen One", 1, 3, 1, 1, 4, AI_FALLEN, 0 , 0, 15, 7, 1, 3, 0, 5, 0, 0, 0, MC_ANIMAL, 0 , 0 , 0, 3, 46 }, - { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\Dark.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Carver", 2, 5, 3, 4, 8, AI_FALLEN, 0 , 2, 20, 7, 2, 5, 0, 5, 0, 0, 5, MC_ANIMAL, 0 , 0 , 0, 3, 80 }, - { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, FALSE, NULL, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Devil Kin", 3, 7, 5, 12, 24, AI_FALLEN, 0 , 2, 25, 7, 3, 7, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 155 }, - { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\Blue.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Dark One", 5, 9, 7, 20, 36, AI_FALLEN, 0 , 3, 30, 7, 4, 8, 0, 5, 0, 0, 15, MC_ANIMAL, IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 255 }, - { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\White.TRN", { 12, 8, 13, 6, 17, 16 }, { 5, 0, 0, 0, 0, 0 }, "Skeleton", 1, 3, 1, 2, 4, AI_SKELSD, 0 , 0, 20, 8, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 64 }, - { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\Skelt.TRN", { 12, 8, 13, 6, 17, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Axe", 2, 5, 2, 4, 7, AI_SKELSD, 0 , 1, 25, 8, 3, 5, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 68 }, - { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 13, 6, 17, 16 }, { 2, 0, 0, 0, 0, 0 }, "Burning Dead", 2, 6, 4, 8, 12, AI_SKELSD, 0 , 2, 30, 8, 3, 7, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 154 }, - { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\Black.TRN", { 12, 8, 13, 6, 17, 16 }, { 3, 0, 0, 0, 0, 0 }, "Horror", 4, 8, 6, 12, 20, AI_SKELSD, 0 , 3, 35, 8, 4, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 264 }, - { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\FallenT.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Fallen One", 1, 3, 1, 2, 5, AI_FALLEN, 0 , 0, 15, 8, 1, 4, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , 0 , 0, 3, 52 }, - { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\Dark.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Carver", 2, 5, 3, 5, 9, AI_FALLEN, 0 , 1, 20, 8, 2, 7, 0, 5, 0, 0, 15, MC_ANIMAL, 0 , 0 , 0, 3, 90 }, - { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, FALSE, NULL, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Devil Kin", 3, 7, 5, 16, 24, AI_FALLEN, 0 , 2, 25, 8, 4, 10, 0, 5, 0, 0, 20, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 180 }, - { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\Blue.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Dark One", 5, 9, 7, 24, 36, AI_FALLEN, 0 , 3, 30, 8, 4, 12, 0, 5, 0, 0, 25, MC_ANIMAL, IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 280 }, - { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Scavenger", 1, 4, 2, 3, 6, AI_SCAV, 0 , 0, 20, 7, 1, 5, 0, 0, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 80 }, - { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavBr.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Plague Eater", 3, 6, 4, 12, 24, AI_SCAV, 0 , 1, 30, 7, 1, 8, 0, 0, 0, 0, 20, MC_ANIMAL, 0 , RESIST_LIGHTNING , 0, 3, 188 }, - { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavBe.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Shadow Beast", 4, 8, 6, 24, 36, AI_SCAV, 0 , 2, 35, 7, 3, 12, 0, 0, 0, 0, 25, MC_ANIMAL, IMUNE_NULL_40, RESIST_FIRE | IMUNE_NULL_40, 0, 3, 375 }, - { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavW.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Bone Gasher", 6, 10, 8, 28, 40, AI_SCAV, 0 , 3, 35, 7, 5, 15, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 552 }, - { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\White.TRN", { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, "Skeleton", 2, 5, 3, 2, 4, AI_SKELBOW, 0 , 0, 15, 12, 1, 2, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 110 }, - { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\Skelt.TRN", { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Bow", 3, 7, 5, 8, 16, AI_SKELBOW, 0 , 1, 25, 12, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 210 }, - { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, FALSE, NULL, { 9, 8, 16, 5, 16, 16 }, { 2, 0, 0, 0, 0, 0 }, "Burning Dead", 5, 9, 7, 10, 24, AI_SKELBOW, 0 , 2, 30, 12, 1, 6, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 364 }, - { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\Black.TRN", { 9, 8, 16, 5, 16, 16 }, { 3, 0, 0, 0, 0, 0 }, "Horror", 7, 11, 9, 15, 45, AI_SKELBOW, 0 , 3, 35, 12, 2, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 594 }, - { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", TRUE, TRUE, "Monsters\\SkelSd\\White.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Skeleton Captain", 1, 4, 2, 3, 6, AI_SKELSD, 0 , 0, 20, 8, 2, 7, 0, 0, 0, 0, 10, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 90 }, - { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, TRUE, "Monsters\\SkelSd\\Skelt.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Captain", 2, 6, 4, 12, 20, AI_SKELSD, 0 , 1, 30, 8, 3, 9, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 200 }, - { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, FALSE, NULL, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Burning Dead Captain", 4, 8, 6, 16, 30, AI_SKELSD, 0 , 2, 35, 8, 4, 10, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 393 }, - { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, TRUE, "Monsters\\SkelSd\\Black.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Horror Captain", 6, 10, 8, 35, 50, AI_SKELSD, MFLAG_SEARCH , 3, 40, 8, 5, 14, 0, 0, 0, 0, 30, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 604 }, - { 128, 2000, "Monsters\\TSneak\\TSneak%c.CL2", FALSE, "Monsters\\TSneak\\Sneakl%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 15, 11, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, "Invisible Lord", 14, 14, 14, 278, 278, AI_SKELSD, MFLAG_SEARCH , 3, 65, 8, 16, 30, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 2000 }, - { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, FALSE, NULL, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Hidden", 3, 8, 5, 8, 24, AI_SNEAK, MFLAG_HIDDEN , 0, 35, 8, 3, 6, 0, 0, 0, 0, 25, MC_DEMON, 0 , IMUNE_NULL_40, 0, 3, 278 }, - { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv2.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Stalker", 8, 12, 9, 30, 45, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 1, 40, 8, 8, 16, 0, 0, 0, 0, 30, MC_DEMON, 0 , IMUNE_NULL_40, 0, 3, 630 }, - { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv3.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Unseen", 10, 14, 11, 35, 50, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 2, 45, 8, 12, 20, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 935 }, - { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv1.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Illusion Weaver", 14, 18, 13, 40, 60, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 3, 60, 8, 16, 24, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | RESIST_FIRE , IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1500 }, - { 160, 2000, "Monsters\\GoatLord\\GoatL%c.CL2", FALSE, "Monsters\\GoatLord\\Goatl%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 14, 9, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, "Lord Sayter", 13, 13, 12, 351, 351, AI_SKELSD, MFLAG_SEARCH , 3, 80, 8, 14, 24, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1500 }, - { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Flesh Clan", 6, 10, 8, 30, 45, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 50, 8, 4, 10, 0, 0, 0, 0, 40, MC_DEMON, 0 , 0 , 0, 3, 460 }, - { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Beige.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Stone Clan", 8, 12, 10, 40, 55, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 60, 8, 6, 12, 0, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 685 }, - { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Red.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Fire Clan", 10, 14, 12, 50, 65, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 70, 8, 8, 16, 0, 0, 0, 0, 45, MC_DEMON, RESIST_FIRE , IMUNE_FIRE , 0, 3, 906 }, - { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Gray.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Night Clan", 12, 16, 14, 55, 70, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 80, 8, 10, 20, 15, 0, 30, 30, 50, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 1190 }, - { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\red.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Fiend", 2, 5, 3, 3, 6, AI_BAT, 0 , 0, 35, 5, 1, 6, 0, 0, 0, 0, 0, MC_ANIMAL, 0 , 0 , 0x4000, 6, 102 }, - { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, FALSE, NULL, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Blink", 5, 9, 7, 12, 28, AI_BAT, 0 , 1, 45, 5, 1, 8, 0, 0, 0, 0, 15, MC_ANIMAL, 0 , 0 , 0x4000, 6, 340 }, - { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\grey.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Gloom", 7, 11, 9, 28, 36, AI_BAT, MFLAG_SEARCH , 2, 70, 5, 4, 12, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC | IMUNE_NULL_40, 0x4000, 6, 509 }, - { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\orange.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Familiar", 11, 15, 13, 20, 35, AI_BAT, MFLAG_SEARCH , 3, 50, 5, 4, 16, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0x4000, 6, 448 }, - { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Flesh Clan", 6, 10, 8, 20, 35, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 0, 35, 13, 1, 7, 0, 0, 0, 0, 35, MC_DEMON, 0 , 0 , 0, 3, 448 }, - { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Beige.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Stone Clan", 8, 12, 10, 30, 40, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 1, 40, 13, 2, 9, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 645 }, - { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Red.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Fire Clan", 10, 14, 12, 40, 50, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 45, 13, 3, 11, 0, 0, 0, 0, 35, MC_DEMON, RESIST_FIRE , IMUNE_FIRE , 0, 3, 822 }, - { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Gray.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Night Clan", 12, 16, 14, 50, 65, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 50, 13, 4, 13, 15, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 1092 }, - { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, FALSE, NULL, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Acid Beast", 10, 14, 11, 40, 66, AI_ACID, 0 , 0, 40, 8, 4, 12, 25, 8, 0, 0, 30, MC_ANIMAL, IMUNE_ACID , IMUNE_MAGIC | IMUNE_ACID , 0, 3, 846 }, - { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidBlk.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Poison Spitter", 14, 18, 15, 60, 85, AI_ACID, 0 , 1, 45, 8, 4, 16, 25, 8, 0, 0, 30, MC_ANIMAL, IMUNE_ACID , IMUNE_MAGIC | IMUNE_ACID , 0, 3, 1248 }, - { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidB.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Pit Beast", 18, 22, 21, 80, 110, AI_ACID, 0 , 2, 55, 8, 8, 18, 35, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMUNE_ACID , IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_ACID , 0, 3, 2060 }, - { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidR.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Lava Maw", 22, 27, 25, 100, 150, AI_ACID, 0 , 3, 65, 8, 10, 20, 40, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMUNE_FIRE | IMUNE_ACID , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_ACID , 0, 3, 2940 }, - { 160, 1010, "Monsters\\SKing\\SKing%c.CL2", TRUE, "Monsters\\SKing\\SKing%c%i.WAV", TRUE, TRUE, "Monsters\\SkelAxe\\White.TRN", { 8, 6, 16, 6, 16, 6 }, { 2, 0, 0, 0, 0, 2 }, "Skeleton King", 6, 6, 9, 140, 140, AI_SKELKING, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 60, 8, 6, 16, 0, 0, 0, 0, 70, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0x8001, 7, 570 }, - { 128, 980, "Monsters\\FatC\\FatC%c.CL2", FALSE, "Monsters\\FatC\\FatC%c%i.WAV", FALSE, FALSE, NULL, { 10, 8, 12, 6, 16, 0 }, { 1, 0, 0, 0, 0, 0 }, "The Butcher", 0, 0, 1, 320, 320, AI_CLEAVER, 0 , 3, 50, 8, 6, 12, 0, 0, 0, 0, 50, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0x8000, 3, 710 }, - { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Overlord", 8, 12, 10, 60, 80, AI_FAT, 0 , 0, 55, 8, 6, 12, 0, 0, 0, 0, 55, MC_DEMON, 0 , RESIST_FIRE , 0, 3, 635 }, - { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\Blue.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Mud Man", 13, 17, 14, 100, 125, AI_FAT, MFLAG_SEARCH , 1, 60, 8, 8, 16, 0, 0, 0, 0, 60, MC_DEMON, 0 , IMUNE_LIGHTNING , 0, 3, 1165 }, - { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\FatB.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Toad Demon", 15, 19, 16, 135, 160, AI_FAT, MFLAG_SEARCH , 2, 70, 8, 8, 16, 40, 0, 8, 20, 65, MC_DEMON, IMUNE_MAGIC , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 3, 1380 }, - { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\FatF.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Flayed One", 19, 23, 20, 160, 200, AI_FAT, MFLAG_SEARCH , 3, 85, 8, 10, 20, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 2058 }, - { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Wyrm", 9, 13, 11, 60, 90, AI_SKELSD, 0 , 0, 40, 8, 4, 10, 0, 0, 0, 0, 25, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 0, 3, 660 }, - { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Cave Slug", 11, 15, 13, 75, 110, AI_SKELSD, 0 , 1, 50, 8, 6, 13, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 0, 3, 994 }, - { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Devil Wyrm", 13, 17, 15, 100, 140, AI_SKELSD, 0 , 2, 55, 8, 8, 16, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE , RESIST_MAGIC | RESIST_FIRE , 0, 3, 1320 }, - { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Devourer", 15, 19, 17, 125, 200, AI_SKELSD, 0 , 3, 60, 8, 10, 20, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1827 }, - { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, FALSE, NULL, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Magma Demon", 14, 17, 13, 50, 70, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 45, 4, 2, 10, 50, 13, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1076 }, - { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Yellow.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Blood Stone", 15, 19, 14, 55, 75, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 50, 4, 2, 12, 50, 14, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1309 }, - { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Blue.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Hell Stone", 16, 20, 16, 60, 80, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 60, 4, 2, 20, 60, 14, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1680 }, - { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Wierd.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Lava Lord", 17, 21, 18, 70, 85, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 75, 4, 4, 24, 60, 14, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 2124 }, - { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, FALSE, NULL, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Horned Demon", 12, 16, 13, 40, 80, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 60, 7, 2, 16, 100, 0, 5, 32, 40, MC_ANIMAL, 0 , RESIST_FIRE , 0, 7, 1172 }, - { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\Orange.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Mud Runner", 14, 18, 15, 50, 90, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 70, 7, 6, 18, 100, 0, 12, 36, 45, MC_ANIMAL, 0 , RESIST_FIRE , 0, 7, 1404 }, - { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\Blue.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Frost Charger", 16, 20, 17, 60, 100, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 8, 20, 100, 0, 20, 40, 50, MC_ANIMAL, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 7, 1720 }, - { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\RhinoB.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Obsidian Lord", 18, 22, 19, 70, 110, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 7, 10, 22, 100, 0, 20, 50, 55, MC_ANIMAL, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0, 7, 1809 }, - { 128, 1740, "Monsters\\Demskel\\Demskl%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, FALSE, "Monsters\\Thin\\Thinv3.TRN", { 10, 8, 20, 6, 24, 16 }, { 3, 0, 0, 0, 0, 0 }, "Bone Demon", 10, 14, 12, 70, 70, AI_STORM, 0 , 0, 60, 8, 6, 14, 12, 0, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 7, 1344 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Red Death", 14, 18, 16, 96, 96, AI_STORM, 0 , 1, 75, 5, 10, 20, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 2168 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Litch Demon", 16, 20, 18, 110, 110, AI_STORM, 0 , 2, 80, 5, 10, 24, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 2736 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Undead Balrog", 20, 24, 22, 130, 130, AI_STORM, 0 , 3, 85, 5, 12, 30, 0, 0, 0, 0, 65, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3575 }, - { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Incinerator", 14, 18, 16, 30, 45, AI_FIREMAN, 0 , 0, 75, 8, 8, 16, 0, 0, 0, 0, 25, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 1888 }, - { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Flame Lord", 16, 20, 18, 40, 55, AI_FIREMAN, 0 , 1, 75, 8, 10, 20, 0, 0, 0, 0, 25, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 2250 }, - { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Doom Fire", 18, 22, 20, 50, 65, AI_FIREMAN, 0 , 2, 80, 8, 12, 24, 0, 0, 0, 0, 30, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 2740 }, - { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Hell Burner", 20, 24, 22, 60, 80, AI_FIREMAN, 0 , 3, 85, 8, 15, 30, 0, 0, 0, 0, 30, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 3355 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Red Storm", 17, 21, 18, 55, 110, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 80, 5, 8, 18, 75, 8, 4, 16, 30, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2160 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, FALSE, NULL, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Storm Rider", 19, 23, 20, 60, 120, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 80, 5, 8, 18, 80, 8, 4, 16, 30, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2391 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv2.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Storm Lord", 21, 25, 22, 75, 135, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 85, 5, 12, 24, 75, 8, 4, 16, 35, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2775 }, - { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE , TRUE, "Monsters\\Thin\\Thinv1.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Maelstorm", 23, 27, 24, 90, 150, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 5, 12, 28, 75, 8, 4, 16, 40, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 3177 }, - { 128, 1650, "Monsters\\BigFall\\Fallg%c.CL2", TRUE, "Monsters\\BigFall\\Bfal%c%i.WAV", FALSE, FALSE, NULL, { 10, 8, 11, 8, 17, 0 }, { 0, 0, 0, 0, 2, 2 }, "Devil Kin Brute", 20, 20, 24, 160, 220, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 100, 6, 18, 24, 0, 0, 0, 0, 75, MC_ANIMAL, 0 , 0 , 0, 6, 2000 }, - { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, FALSE, NULL, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, "Winged-Demon", 8, 12, 9, 45, 60, AI_GARG, MFLAG_CAN_OPEN_DOOR, 0, 50, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 6, 662 }, - { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GarE.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, "Gargoyle", 12, 16, 13, 60, 90, AI_GARG, MFLAG_CAN_OPEN_DOOR, 1, 65, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 6, 1205 }, - { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GargBr.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, "Blood Claw", 16, 20, 19, 75, 125, AI_GARG, MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 14, 22, 0, 0, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 6, 1873 }, - { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GargB.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, "Death Wing", 18, 22, 23, 90, 150, AI_GARG, MFLAG_CAN_OPEN_DOOR, 3, 95, 7, 16, 28, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 6, 2278 }, - { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, FALSE, NULL, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Slayer", 19, 23, 20, 120, 140, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 100, 8, 12, 20, 0, 3, 0, 0, 60, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , RESIST_MAGIC | IMUNE_FIRE , 0, 7, 2300 }, - { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Guard.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Guardian", 21, 25, 22, 140, 160, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 110, 8, 14, 22, 0, 3, 0, 0, 65, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , RESIST_MAGIC | IMUNE_FIRE , 0, 7, 2714 }, - { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Vtexl.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Vortex Lord", 23, 26, 24, 160, 180, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 120, 8, 18, 24, 0, 3, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3252 }, - { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Balr.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Balrog", 25, 29, 26, 180, 200, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 130, 8, 22, 30, 0, 3, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3643 }, - { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, FALSE, NULL, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Cave Viper", 20, 24, 21, 100, 150, AI_SNAKE, MFLAG_SEARCH , 0, 90, 8, 8, 20, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC , IMUNE_MAGIC , 0, 7, 2725 }, - { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\SnakR.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Fire Drake", 22, 26, 23, 120, 170, AI_SNAKE, MFLAG_SEARCH , 1, 105, 8, 12, 24, 0, 0, 0, 0, 65, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 3139 }, - { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\Snakg.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Gold Viper", 24, 27, 25, 140, 180, AI_SNAKE, MFLAG_SEARCH , 2, 120, 8, 15, 26, 0, 0, 0, 0, 70, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 7, 3540 }, - { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\Snakb.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Azure Drake", 28, 30, 27, 160, 200, AI_SNAKE, MFLAG_SEARCH , 3, 130, 8, 18, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING , 0, 7, 3791 }, - { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, FALSE, NULL, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Black Knight", 23, 27, 24, 150, 150, AI_SKELSD, MFLAG_SEARCH , 0, 110, 8, 15, 20, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 3360 }, - { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntRT.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Doom Guard", 25, 29, 26, 165, 165, AI_SKELSD, MFLAG_SEARCH , 0, 130, 8, 18, 25, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 7, 3650 }, - { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntBT.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Steel Lord", 27, 30, 28, 180, 180, AI_SKELSD, MFLAG_SEARCH , 1, 120, 8, 20, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 4252 }, - { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntBe.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Blood Knight", 24, 26, 30, 200, 200, AI_SKELSD, MFLAG_SEARCH , 1, 130, 8, 25, 35, 0, 0, 0, 0, 85, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 5130 }, - { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Unraveler", 26, 28, 25, 70, 150, AI_SKELSD, 0 , 0, 75, 7, 10, 20, 0, 0, 0, 0, 70, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 3, 3812 }, - { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Hollow One", 28, 30, 27, 135, 240, AI_SKELSD, 0 , 1, 75, 7, 12, 24, 0, 0, 0, 0, 75, MC_UNDEAD, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 4374 }, - { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Pain Master", 27, 30, 29, 110, 200, AI_SKELSD, 0 , 2, 80, 7, 16, 30, 0, 0, 0, 0, 80, MC_UNDEAD, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 5147 }, - { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Reality Weaver", 28, 30, 30, 135, 240, AI_SKELSD, 0 , 3, 85, 7, 20, 35, 0, 0, 0, 0, 85, MC_UNDEAD, RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 3, 5925 }, - { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, FALSE, NULL, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Succubus", 22, 26, 24, 120, 150, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 0, 100, 10, 1, 20, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC , IMUNE_MAGIC | RESIST_FIRE , 0, 3, 3696 }, - { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succb.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Snow Witch", 25, 28, 26, 135, 175, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 1, 110, 10, 1, 24, 0, 0, 0, 0, 65, MC_DEMON, RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 4084 }, - { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succrw.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Hell Spawn", 27, 30, 28, 150, 200, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 115, 10, 1, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 4480 }, - { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succbw.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Soul Burner", 28, 30, 30, 140, 225, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 120, 10, 1, 35, 0, 0, 0, 0, 85, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0, 3, 4644 }, - { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, FALSE, NULL, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Counselor", 24, 26, 25, 70, 70, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 0, 90, 8, 8, 20, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 7, 4070 }, - { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselg.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Magistrate", 26, 28, 27, 85, 85, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 1, 100, 8, 10, 24, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 4478 }, - { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselgd.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Cabalist", 28, 30, 29, 120, 120, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 2, 110, 8, 14, 30, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4929 }, - { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselbk.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Advocate", 30, 30, 30, 145, 145, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 15, 25, 0, 0, 0, 0, 0, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4968 }, - { 96, 386, "Monsters\\Golem\\Golem%c.CL2", TRUE, "Monsters\\Golem\\Golm%c%i.WAV", FALSE, FALSE, NULL, { 0, 16, 12, 0, 12, 20 }, { 0, 0, 0, 0, 0, 0 }, "Golem", 0, 0, 12, 1, 1, AI_GOLUM, MFLAG_CAN_OPEN_DOOR, 0, 0, 7, 1, 1, 0, 0, 0, 0, 1, MC_DEMON, 0 , 0 , 0, 0, 0 }, - { 160, 2000, "Monsters\\Diablo\\Diablo%c.CL2", TRUE, "Monsters\\Diablo\\Diablo%c%i.WAV", TRUE, FALSE, NULL, { 16, 6, 16, 6, 16, 16 }, { 0, 0, 0, 0, 0, 0 }, "The Dark Lord", 50, 50, 30, 1666, 1666, AI_DIABLO, MFLAG_KNOCKBACK | MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 220, 4, 30, 60, 0, 11, 0, 0, 70, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 31666 }, - { 128, 1060, "Monsters\\DarkMage\\Dmage%c.CL2", TRUE, "Monsters\\DarkMage\\Dmag%c%i.WAV", FALSE, FALSE, NULL, { 6, 1, 21, 6, 23, 18 }, { 0, 0, 0, 0, 0, 0 }, "The Arch-Litch Malignus", 30, 30, 30, 160, 160, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 20, 40, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4968 } - // clang-format on -}; - -char MonstConvTbl[128] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, - 31, 32, 34, 35, 36, 37, 38, 40, 39, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, - 53, 54, 55, 56, 57, 59, 58, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 0, - 0, 0, 0, 72, 73, 74, 75, 0, 0, 0, - 0, 77, 76, 78, 79, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 92, 91, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 0, 110, 0, 109, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 80, 111 -}; - -unsigned char MonstAvailTbl[112] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 2, 2, 2, 0, 2, 2, 2, 2, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0 -}; - -UniqMonstStruct UniqMonst[98] = { - // clang-format off - // mtype, mName, mTrnName, mlevel, mmaxhp, mAi, mint, mMinDamage, mMaxDamage, mMagicRes, mUnqAttr, mUnqVar1, mUnqVar2, mtalkmsg - { MT_NGOATMC, "Gharbad the Weak", "BSDB", 4, 120, AI_GARBUD, 3, 8, 16, IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_GARBUD1 }, - { MT_SKING, "Skeleton King", "GENRL", 0, 240, AI_SKELKING, 3, 6, 16, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 1, 0, 0, 0 }, - { MT_COUNSLR, "Zhar the Mad", "GENERAL", 8, 360, AI_ZHAR, 3, 16, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, QUEST_ZHAR1 }, - { MT_BFALLSP, "Snotspill", "BNG", 4, 220, AI_SNOTSPIL, 3, 10, 18, RESIST_LIGHTNING , 0, 0, 0, QUEST_BANNER10 }, - { MT_ADVOCATE, "Arch-Bishop Lazarus", "GENERAL", 0, 600, AI_LAZURUS, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, - { MT_HLSPWN, "Red Vex", "REDV", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, - { MT_HLSPWN, "BlackJade", "BLKJD", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, - { MT_RBLACK, "Lachdanan", "BHKA", 14, 500, AI_LACHDAN, 3, 0, 0, 0 , 0, 0, 0, QUEST_VEIL9 }, - { MT_BTBLACK, "Warlord of Blood", "GENERAL", 13, 850, AI_WARLORD, 3, 35, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_WARLRD9 }, - { MT_CLEAVER, "The Butcher", "GENRL", 0, 220, AI_CLEAVER, 3, 6, 12, RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_TSKELAX, "Bonehead Keenaxe", "BHKA", 2, 91, AI_SKELSD, 2, 4, 10, IMUNE_MAGIC | IMUNE_NULL_40, 7, 100, 0, 0 }, - { MT_RFALLSD, "Bladeskin the Slasher", "BSTS", 2, 51, AI_FALLEN, 0, 6, 18, RESIST_FIRE , 11, 45, 0, 0 }, - { MT_NZOMBIE, "Soulpus", "GENERAL", 2, 133, AI_ZOMBIE, 0, 4, 8, RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, 0 }, - { MT_RFALLSP, "Pukerat the Unclean", "PTU", 2, 77, AI_FALLEN, 3, 1, 5, RESIST_FIRE , 0, 0, 0, 0 }, - { MT_WSKELAX, "Boneripper", "BR", 2, 54, AI_BAT, 0, 6, 15, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_NZOMBIE, "Rotfeast the Hungry", "ETH", 2, 85, AI_SKELSD, 3, 4, 12, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_DFALLSD, "Gutshank the Quick", "GTQ", 3, 66, AI_BAT, 2, 6, 16, RESIST_FIRE , 3, 0, 0, 0 }, - { MT_TSKELSD, "Brokenhead Bangshield", "BHBS", 3, 108, AI_SKELSD, 3, 12, 20, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_YFALLSP, "Bongo", "BNG", 3, 178, AI_FALLEN, 3, 9, 21, 0 , 3, 0, 0, 0 }, - { MT_BZOMBIE, "Rotcarnage", "RCRN", 3, 102, AI_ZOMBIE, 3, 9, 24, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 11, 45, 0, 0 }, - { MT_NSCAV, "Shadowbite", "SHBT", 2, 60, AI_SKELSD, 3, 3, 20, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_WSKELBW, "Deadeye", "DE", 2, 49, AI_GOATBOW, 0, 6, 9, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_RSKELAX, "Madeye the Dead", "MTD", 4, 75, AI_BAT, 0, 9, 21, IMUNE_MAGIC | IMUNE_FIRE , 11, 30, 0, 0 }, - { MT_BSCAV, "El Chupacabras", "GENERAL", 3, 120, AI_GOATMC, 0, 10, 18, RESIST_FIRE , 3, 30, 0, 0 }, - { MT_TSKELBW, "Skullfire", "SKFR", 3, 125, AI_GOATBOW, 1, 6, 10, IMUNE_FIRE , 0, 100, 0, 0 }, - { MT_SNEAK, "Warpskull", "TSPO", 3, 117, AI_SNEAK, 2, 6, 18, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_GZOMBIE, "Goretongue", "PMR", 3, 156, AI_SKELSD, 1, 15, 30, IMUNE_MAGIC | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_WSCAV, "Pulsecrawler", "BHKA", 4, 150, AI_SCAV, 0, 16, 20, IMUNE_FIRE | RESIST_LIGHTNING , 11, 45, 0, 0 }, - { MT_BLINK, "Moonbender", "GENERAL", 4, 135, AI_BAT, 0, 9, 27, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_BLINK, "Wrathraven", "GENERAL", 5, 135, AI_BAT, 2, 9, 22, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_YSCAV, "Spineeater", "GENERAL", 4, 180, AI_SCAV, 1, 18, 25, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_RSKELBW, "Blackash the Burning", "BASHTB", 4, 120, AI_GOATBOW, 0, 6, 16, IMUNE_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_BFALLSD, "Shadowcrow", "GENERAL", 5, 270, AI_SNEAK, 2, 12, 25, 0 , 3, 0, 0, 0 }, - { MT_LRDSAYTR, "Blightstone the Weak", "BHKA", 4, 360, AI_SKELSD, 0, 4, 12, IMUNE_MAGIC | RESIST_LIGHTNING , 7, 70, 0, 0 }, - { MT_FAT, "Bilefroth the Pit Master", "BFTP", 6, 210, AI_BAT, 1, 16, 23, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_NGOATBW, "Bloodskin Darkbow", "BSDB", 5, 207, AI_GOATBOW, 0, 3, 16, RESIST_FIRE | RESIST_LIGHTNING , 11, 55, 0, 0 }, - { MT_GLOOM, "Foulwing", "DB", 5, 246, AI_RHINO, 3, 12, 28, RESIST_FIRE , 3, 0, 0, 0 }, - { MT_XSKELSD, "Shadowdrinker", "SHDR", 5, 300, AI_SNEAK, 1, 18, 26, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 8, 45, 0, 0 }, - { MT_UNSEEN, "Hazeshifter", "BHKA", 5, 285, AI_SNEAK, 3, 18, 30, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_NACID, "Deathspit", "BFDS", 6, 303, AI_ACIDUNIQ, 0, 12, 32, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_RGOATMC, "Bloodgutter", "BGBL", 6, 315, AI_BAT, 1, 24, 34, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_BGOATMC, "Deathshade Fleshmaul", "DSFM", 6, 276, AI_RHINO, 0, 12, 24, IMUNE_MAGIC | RESIST_FIRE , 8, 65, 0, 0 }, - { MT_WYRM, "Warmaggot the Mad", "GENERAL", 6, 246, AI_BAT, 3, 15, 30, RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_STORM, "Glasskull the Jagged", "BHKA", 7, 354, AI_STORM, 0, 18, 30, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_RGOATBW, "Blightfire", "BLF", 7, 321, AI_SUCC, 2, 13, 21, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_GARGOYLE, "Nightwing the Cold", "GENERAL", 7, 342, AI_BAT, 1, 18, 26, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_GGOATBW, "Gorestone", "GENERAL", 7, 303, AI_GOATBOW, 1, 15, 28, RESIST_LIGHTNING | IMUNE_NULL_40, 7, 70, 0, 0 }, - { MT_BMAGMA, "Bronzefist Firestone", "GENERAL", 8, 360, AI_MAGMA, 0, 30, 36, IMUNE_MAGIC | RESIST_FIRE , 3, 0, 0, 0 }, - { MT_INCIN, "Wrathfire the Doomed", "WFTD", 8, 270, AI_SKELSD, 2, 20, 30, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_NMAGMA, "Firewound the Grim", "BHKA", 8, 303, AI_MAGMA, 0, 18, 22, IMUNE_MAGIC | RESIST_FIRE , 3, 0, 0, 0 }, - { MT_MUDMAN, "Baron Sludge", "BSM", 8, 315, AI_SNEAK, 3, 25, 34, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 11, 75, 0, 0 }, - { MT_GGOATMC, "Blighthorn Steelmace", "BHSM", 7, 250, AI_RHINO, 0, 20, 28, RESIST_LIGHTNING , 11, 45, 0, 0 }, - { MT_RACID, "Chaoshowler", "GENERAL", 8, 240, AI_ACIDUNIQ, 0, 12, 20, 0 , 3, 0, 0, 0 }, - { MT_REDDTH, "Doomgrin the Rotting", "GENERAL", 8, 405, AI_STORM, 3, 25, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_FLAMLRD, "Madburner", "GENERAL", 9, 270, AI_STORM, 0, 20, 40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 3, 0, 0, 0 }, - { MT_LTCHDMN, "Bonesaw the Litch", "GENERAL", 9, 495, AI_STORM, 2, 30, 55, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_MUDRUN, "Breakspine", "GENERAL", 9, 351, AI_RHINO, 0, 25, 34, RESIST_FIRE , 3, 0, 0, 0 }, - { MT_REDDTH, "Devilskull Sharpbone", "GENERAL", 9, 444, AI_STORM, 1, 25, 40, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_STORM, "Brokenstorm", "GENERAL", 9, 411, AI_STORM, 2, 25, 36, IMUNE_LIGHTNING , 3, 0, 0, 0 }, - { MT_RSTORM, "Stormbane", "GENERAL", 9, 555, AI_STORM, 3, 30, 30, IMUNE_LIGHTNING , 3, 0, 0, 0 }, - { MT_TOAD, "Oozedrool", "GENERAL", 9, 483, AI_FAT, 3, 25, 30, RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_BLOODCLW, "Goldblight of the Flame", "GENERAL", 10, 405, AI_GARG, 0, 15, 35, IMUNE_MAGIC | IMUNE_FIRE , 11, 80, 0, 0 }, - { MT_OBLORD, "Blackstorm", "GENERAL", 10, 525, AI_RHINO, 3, 20, 40, IMUNE_MAGIC | IMUNE_LIGHTNING , 11, 90, 0, 0 }, - { MT_RACID, "Plaguewrath", "GENERAL", 10, 450, AI_ACIDUNIQ, 2, 20, 30, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_RSTORM, "The Flayer", "GENERAL", 10, 501, AI_STORM, 1, 20, 35, RESIST_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_FROSTC, "Bluehorn", "GENERAL", 11, 477, AI_RHINO, 1, 25, 30, IMUNE_MAGIC | RESIST_FIRE , 11, 90, 0, 0 }, - { MT_HELLBURN, "Warpfire Hellspawn", "GENERAL", 11, 525, AI_FIREMAN, 3, 10, 40, RESIST_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_NSNAKE, "Fangspeir", "GENERAL", 11, 444, AI_SKELSD, 1, 15, 32, IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_UDEDBLRG, "Festerskull", "GENERAL", 11, 600, AI_STORM, 2, 15, 30, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_NBLACK, "Lionskull the Bent", "GENERAL", 12, 525, AI_SKELSD, 2, 25, 25, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_COUNSLR, "Blacktongue", "GENERAL", 12, 360, AI_COUNSLR, 3, 15, 30, RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_DEATHW, "Viletouch", "GENERAL", 12, 525, AI_GARG, 3, 20, 40, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_RSNAKE, "Viperflame", "GENERAL", 12, 570, AI_SKELSD, 1, 25, 35, IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_BSNAKE, "Fangskin", "BHKA", 14, 681, AI_SKELSD, 2, 15, 50, IMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_SUCCUBUS, "Witchfire the Unholy", "GENERAL", 12, 444, AI_SUCC, 3, 10, 20, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_BALROG, "Blackskull", "BHKA", 13, 750, AI_SKELSD, 3, 25, 40, IMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_UNRAV, "Soulslash", "GENERAL", 12, 450, AI_SKELSD, 0, 25, 25, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_VTEXLRD, "Windspawn", "GENERAL", 12, 711, AI_SKELSD, 1, 35, 40, IMUNE_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_GSNAKE, "Lord of the Pit", "GENERAL", 13, 762, AI_SKELSD, 2, 25, 42, RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_RTBLACK, "Rustweaver", "GENERAL", 13, 400, AI_SKELSD, 3, 1, 60, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_HOLOWONE, "Howlingire the Shade", "GENERAL", 13, 450, AI_SKELSD, 2, 40, 75, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_MAEL, "Doomcloud", "GENERAL", 13, 612, AI_STORM, 1, 1, 60, RESIST_FIRE | IMUNE_LIGHTNING , 0, 0, 0, 0 }, - { MT_PAINMSTR, "Bloodmoon Soulfire", "GENERAL", 13, 684, AI_SKELSD, 1, 15, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_SNOWWICH, "Witchmoon", "GENERAL", 13, 310, AI_SUCC, 3, 30, 40, RESIST_LIGHTNING , 0, 0, 0, 0 }, - { MT_VTEXLRD, "Gorefeast", "GENERAL", 13, 771, AI_SKELSD, 3, 20, 55, RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_RTBLACK, "Graywar the Slayer", "GENERAL", 14, 672, AI_SKELSD, 1, 30, 50, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_MAGISTR, "Dreadjudge", "GENERAL", 14, 540, AI_COUNSLR, 1, 30, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, - { MT_HLSPWN, "Stareye the Witch", "GENERAL", 14, 726, AI_SUCC, 2, 30, 50, IMUNE_FIRE , 0, 0, 0, 0 }, - { MT_BTBLACK, "Steelskull the Hunter", "GENERAL", 14, 831, AI_SKELSD, 3, 40, 50, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_RBLACK, "Sir Gorash", "GENERAL", 16, 1050, AI_SKELSD, 1, 20, 60, IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_CABALIST, "The Vizier", "GENERAL", 15, 850, AI_COUNSLR, 2, 25, 40, IMUNE_FIRE , 3, 0, 0, 0 }, - { MT_REALWEAV, "Zamphir", "GENERAL", 15, 891, AI_SKELSD, 2, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_HLSPWN, "Bloodlust", "GENERAL", 15, 825, AI_SUCC, 1, 20, 55, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_HLSPWN, "Webwidow", "GENERAL", 16, 774, AI_SUCC, 1, 20, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_SOLBRNR, "Fleshdancer", "GENERAL", 16, 999, AI_SUCC, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, - { MT_OBLORD, "Grimspike", "GENERAL", 19, 534, AI_SNEAK, 1, 25, 40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, - { MT_STORML, "Doomlock", "GENERAL", 28, 534, AI_SNEAK, 1, 35, 55, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, - { -1, NULL, NULL, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0 } - // clang-format on -}; - -DEVILUTION_END_NAMESPACE +#include "diablo.h" + +DEVILUTION_BEGIN_NAMESPACE + +MonsterData monsterdata[112] = { + // clang-format off + // width, mImage, GraphicType, has_special, sndfile, snd_special, has_trans, TransFile, Frames[6], Rate[6], mName, mMinDLvl, mMaxDLvl, mLevel, mMinHP, mMaxHP, mAi, mFlags, mInt, mHit, mAFNum, mMinDamage, mMaxDamage, mHit2, mAFNum2, mMinDamage2, mMaxDamage2, mArmorClass, mMonstClass, mMagicRes , mMagicRes2 , mTreasure, mSelFlag, mExp + { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, FALSE, NULL, { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Zombie", 1, 3, 1, 4, 7, AI_ZOMBIE, 0 , 0, 10, 8, 2, 5, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 54 }, + { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Bluered.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Ghoul", 2, 4, 2, 7, 11, AI_ZOMBIE, 0 , 1, 10, 8, 3, 10, 0, 0, 0, 0, 10, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 58 }, + { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Grey.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Rotting Carcass", 2, 6, 4, 15, 25, AI_ZOMBIE, 0 , 2, 25, 8, 5, 15, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 136 }, + { 128, 799, "Monsters\\Zombie\\Zombie%c.CL2", FALSE, "Monsters\\Zombie\\Zombie%c%i.WAV", FALSE, TRUE, "Monsters\\Zombie\\Yellow.TRN", { 11, 24, 12, 6, 16, 0 }, { 4, 0, 0, 0, 0, 0 }, "Black Death", 4, 8, 6, 25, 40, AI_ZOMBIE, 0 , 3, 30, 8, 6, 22, 0, 0, 0, 0, 20, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 240 }, + { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\FallenT.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Fallen One", 1, 3, 1, 1, 4, AI_FALLEN, 0 , 0, 15, 7, 1, 3, 0, 5, 0, 0, 0, MC_ANIMAL, 0 , 0 , 0, 3, 46 }, + { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\Dark.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Carver", 2, 5, 3, 4, 8, AI_FALLEN, 0 , 2, 20, 7, 2, 5, 0, 5, 0, 0, 5, MC_ANIMAL, 0 , 0 , 0, 3, 80 }, + { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, FALSE, NULL, { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Devil Kin", 3, 7, 5, 12, 24, AI_FALLEN, 0 , 2, 25, 7, 3, 7, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 155 }, + { 128, 543, "Monsters\\FalSpear\\Phall%c.CL2", TRUE, "Monsters\\FalSpear\\Phall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSpear\\Blue.TRN", { 11, 11, 13, 11, 18, 13 }, { 3, 0, 0, 0, 0, 0 }, "Dark One", 5, 9, 7, 20, 36, AI_FALLEN, 0 , 3, 30, 7, 4, 8, 0, 5, 0, 0, 15, MC_ANIMAL, IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 255 }, + { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\White.TRN", { 12, 8, 13, 6, 17, 16 }, { 5, 0, 0, 0, 0, 0 }, "Skeleton", 1, 3, 1, 2, 4, AI_SKELSD, 0 , 0, 20, 8, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 64 }, + { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\Skelt.TRN", { 12, 8, 13, 6, 17, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Axe", 2, 5, 2, 4, 7, AI_SKELSD, 0 , 1, 25, 8, 3, 5, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 68 }, + { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 13, 6, 17, 16 }, { 2, 0, 0, 0, 0, 0 }, "Burning Dead", 2, 6, 4, 8, 12, AI_SKELSD, 0 , 2, 30, 8, 3, 7, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 154 }, + { 128, 553, "Monsters\\SkelAxe\\SklAx%c.CL2", TRUE, "Monsters\\SkelAxe\\SklAx%c%i.WAV", FALSE, TRUE, "Monsters\\SkelAxe\\Black.TRN", { 12, 8, 13, 6, 17, 16 }, { 3, 0, 0, 0, 0, 0 }, "Horror", 4, 8, 6, 12, 20, AI_SKELSD, 0 , 3, 35, 8, 4, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 264 }, + { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\FallenT.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Fallen One", 1, 3, 1, 2, 5, AI_FALLEN, 0 , 0, 15, 8, 1, 4, 0, 5, 0, 0, 10, MC_ANIMAL, 0 , 0 , 0, 3, 52 }, + { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\Dark.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Carver", 2, 5, 3, 5, 9, AI_FALLEN, 0 , 1, 20, 8, 2, 7, 0, 5, 0, 0, 15, MC_ANIMAL, 0 , 0 , 0, 3, 90 }, + { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, FALSE, NULL, { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Devil Kin", 3, 7, 5, 16, 24, AI_FALLEN, 0 , 2, 25, 8, 4, 10, 0, 5, 0, 0, 20, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 180 }, + { 128, 623, "Monsters\\FalSword\\Fall%c.CL2", TRUE, "Monsters\\FalSword\\Fall%c%i.WAV", TRUE, TRUE, "Monsters\\FalSword\\Blue.TRN", { 12, 12, 13, 11, 14, 15 }, { 3, 0, 0, 0, 0, 0 }, "Dark One", 5, 9, 7, 24, 36, AI_FALLEN, 0 , 3, 30, 8, 4, 12, 0, 5, 0, 0, 25, MC_ANIMAL, IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 280 }, + { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Scavenger", 1, 4, 2, 3, 6, AI_SCAV, 0 , 0, 20, 7, 1, 5, 0, 0, 0, 0, 10, MC_ANIMAL, 0 , RESIST_FIRE , 0, 3, 80 }, + { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavBr.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Plague Eater", 3, 6, 4, 12, 24, AI_SCAV, 0 , 1, 30, 7, 1, 8, 0, 0, 0, 0, 20, MC_ANIMAL, 0 , RESIST_LIGHTNING , 0, 3, 188 }, + { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavBe.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Shadow Beast", 4, 8, 6, 24, 36, AI_SCAV, 0 , 2, 35, 7, 3, 12, 0, 0, 0, 0, 25, MC_ANIMAL, IMUNE_NULL_40, RESIST_FIRE | IMUNE_NULL_40, 0, 3, 375 }, + { 128, 410, "Monsters\\Scav\\Scav%c.CL2", TRUE, "Monsters\\Scav\\Scav%c%i.WAV", FALSE, TRUE, "Monsters\\Scav\\ScavW.TRN", { 12, 8, 12, 6, 20, 11 }, { 2, 0, 0, 0, 0, 0 }, "Bone Gasher", 6, 10, 8, 28, 40, AI_SCAV, 0 , 3, 35, 7, 5, 15, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | IMUNE_NULL_40, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 552 }, + { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\White.TRN", { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, "Skeleton", 2, 5, 3, 2, 4, AI_SKELBOW, 0 , 0, 15, 12, 1, 2, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 110 }, + { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\Skelt.TRN", { 9, 8, 16, 5, 16, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Bow", 3, 7, 5, 8, 16, AI_SKELBOW, 0 , 1, 25, 12, 1, 4, 0, 0, 0, 0, 0, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 210 }, + { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, FALSE, NULL, { 9, 8, 16, 5, 16, 16 }, { 2, 0, 0, 0, 0, 0 }, "Burning Dead", 5, 9, 7, 10, 24, AI_SKELBOW, 0 , 2, 30, 12, 1, 6, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 364 }, + { 128, 567, "Monsters\\SkelBow\\SklBw%c.CL2", TRUE, "Monsters\\SkelBow\\SklBw%c%i.WAV", FALSE, TRUE, "Monsters\\SkelBow\\Black.TRN", { 9, 8, 16, 5, 16, 16 }, { 3, 0, 0, 0, 0, 0 }, "Horror", 7, 11, 9, 15, 45, AI_SKELBOW, 0 , 3, 35, 12, 2, 9, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 594 }, + { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", TRUE, TRUE, "Monsters\\SkelSd\\White.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Skeleton Captain", 1, 4, 2, 3, 6, AI_SKELSD, 0 , 0, 20, 8, 2, 7, 0, 0, 0, 0, 10, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 90 }, + { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, TRUE, "Monsters\\SkelSd\\Skelt.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Corpse Captain", 2, 6, 4, 12, 20, AI_SKELSD, 0 , 1, 30, 8, 3, 9, 0, 0, 0, 0, 5, MC_UNDEAD, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 200 }, + { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, FALSE, NULL, { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Burning Dead Captain", 4, 8, 6, 16, 30, AI_SKELSD, 0 , 2, 35, 8, 4, 10, 0, 0, 0, 0, 15, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 3, 393 }, + { 128, 575, "Monsters\\SkelSd\\SklSr%c.CL2", TRUE, "Monsters\\SkelSd\\SklSr%c%i.WAV", FALSE, TRUE, "Monsters\\SkelSd\\Black.TRN", { 13, 8, 12, 7, 15, 16 }, { 4, 0, 0, 0, 0, 0 }, "Horror Captain", 6, 10, 8, 35, 50, AI_SKELSD, MFLAG_SEARCH , 3, 40, 8, 5, 14, 0, 0, 0, 0, 30, MC_UNDEAD, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 604 }, + { 128, 2000, "Monsters\\TSneak\\TSneak%c.CL2", FALSE, "Monsters\\TSneak\\Sneakl%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 15, 11, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, "Invisible Lord", 14, 14, 14, 278, 278, AI_SKELSD, MFLAG_SEARCH , 3, 65, 8, 16, 30, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 2000 }, + { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, FALSE, NULL, { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Hidden", 3, 8, 5, 8, 24, AI_SNEAK, MFLAG_HIDDEN , 0, 35, 8, 3, 6, 0, 0, 0, 0, 25, MC_DEMON, 0 , IMUNE_NULL_40, 0, 3, 278 }, + { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv2.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Stalker", 8, 12, 9, 30, 45, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 1, 40, 8, 8, 16, 0, 0, 0, 0, 30, MC_DEMON, 0 , IMUNE_NULL_40, 0, 3, 630 }, + { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv3.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Unseen", 10, 14, 11, 35, 50, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 2, 45, 8, 12, 20, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 935 }, + { 128, 992, "Monsters\\Sneak\\Sneak%c.CL2", TRUE, "Monsters\\Sneak\\Sneak%c%i.WAV", FALSE, TRUE, "Monsters\\Sneak\\Sneakv1.TRN", { 16, 8, 12, 8, 24, 15 }, { 2, 0, 0, 0, 0, 0 }, "Illusion Weaver", 14, 18, 13, 40, 60, AI_SNEAK, MFLAG_HIDDEN | MFLAG_SEARCH , 3, 60, 8, 16, 24, 0, 0, 0, 0, 30, MC_DEMON, RESIST_MAGIC | RESIST_FIRE , IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1500 }, + { 160, 2000, "Monsters\\GoatLord\\GoatL%c.CL2", FALSE, "Monsters\\GoatLord\\Goatl%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 14, 9, 16, 0 }, { 2, 0, 0, 0, 0, 0 }, "Lord Sayter", 13, 13, 12, 351, 351, AI_SKELSD, MFLAG_SEARCH , 3, 80, 8, 14, 24, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1500 }, + { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Flesh Clan", 6, 10, 8, 30, 45, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 50, 8, 4, 10, 0, 0, 0, 0, 40, MC_DEMON, 0 , 0 , 0, 3, 460 }, + { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Beige.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Stone Clan", 8, 12, 10, 40, 55, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 60, 8, 6, 12, 0, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 685 }, + { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Red.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Fire Clan", 10, 14, 12, 50, 65, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 70, 8, 8, 16, 0, 0, 0, 0, 45, MC_DEMON, RESIST_FIRE , IMUNE_FIRE , 0, 3, 906 }, + { 128, 1030, "Monsters\\GoatMace\\Goat%c.CL2", TRUE, "Monsters\\GoatMace\\Goat%c%i.WAV", FALSE, TRUE, "Monsters\\GoatMace\\Gray.TRN", { 12, 8, 12, 6, 20, 12 }, { 2, 0, 0, 0, 1, 0 }, "Night Clan", 12, 16, 14, 55, 70, AI_GOATMC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 80, 8, 10, 20, 15, 0, 30, 30, 50, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 1190 }, + { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\red.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Fiend", 2, 5, 3, 3, 6, AI_BAT, 0 , 0, 35, 5, 1, 6, 0, 0, 0, 0, 0, MC_ANIMAL, 0 , 0 , 0x4000, 6, 102 }, + { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, FALSE, NULL, { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Blink", 5, 9, 7, 12, 28, AI_BAT, 0 , 1, 45, 5, 1, 8, 0, 0, 0, 0, 15, MC_ANIMAL, 0 , 0 , 0x4000, 6, 340 }, + { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\grey.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Gloom", 7, 11, 9, 28, 36, AI_BAT, MFLAG_SEARCH , 2, 70, 5, 4, 12, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC | IMUNE_NULL_40, 0x4000, 6, 509 }, + { 96, 364, "Monsters\\Bat\\Bat%c.CL2", FALSE, "Monsters\\Bat\\Bat%c%i.WAV", FALSE, TRUE, "Monsters\\Bat\\orange.trn", { 9, 13, 10, 9, 13, 0 }, { 0, 0, 0, 0, 0, 0 }, "Familiar", 11, 15, 13, 20, 35, AI_BAT, MFLAG_SEARCH , 3, 50, 5, 4, 16, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0x4000, 6, 448 }, + { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, FALSE, NULL, { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Flesh Clan", 6, 10, 8, 20, 35, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 0, 35, 13, 1, 7, 0, 0, 0, 0, 35, MC_DEMON, 0 , 0 , 0, 3, 448 }, + { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Beige.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Stone Clan", 8, 12, 10, 30, 40, AI_GOATBOW, MFLAG_CAN_OPEN_DOOR, 1, 40, 13, 2, 9, 0, 0, 0, 0, 35, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 645 }, + { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Red.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Fire Clan", 10, 14, 12, 40, 50, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 45, 13, 3, 11, 0, 0, 0, 0, 35, MC_DEMON, RESIST_FIRE , IMUNE_FIRE , 0, 3, 822 }, + { 128, 1040, "Monsters\\GoatBow\\GoatB%c.CL2", FALSE, "Monsters\\GoatBow\\GoatB%c%i.WAV", FALSE, TRUE, "Monsters\\GoatBow\\Gray.TRN", { 12, 8, 16, 6, 20, 0 }, { 3, 0, 0, 0, 0, 0 }, "Night Clan", 12, 16, 14, 50, 65, AI_GOATBOW, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 50, 13, 4, 13, 15, 0, 0, 0, 40, MC_DEMON, RESIST_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 3, 1092 }, + { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, FALSE, NULL, { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Acid Beast", 10, 14, 11, 40, 66, AI_ACID, 0 , 0, 40, 8, 4, 12, 25, 8, 0, 0, 30, MC_ANIMAL, IMUNE_ACID , IMUNE_MAGIC | IMUNE_ACID , 0, 3, 846 }, + { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidBlk.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Poison Spitter", 14, 18, 15, 60, 85, AI_ACID, 0 , 1, 45, 8, 4, 16, 25, 8, 0, 0, 30, MC_ANIMAL, IMUNE_ACID , IMUNE_MAGIC | IMUNE_ACID , 0, 3, 1248 }, + { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidB.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Pit Beast", 18, 22, 21, 80, 110, AI_ACID, 0 , 2, 55, 8, 8, 18, 35, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMUNE_ACID , IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_ACID , 0, 3, 2060 }, + { 128, 716, "Monsters\\Acid\\Acid%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", TRUE, TRUE, "Monsters\\Acid\\AcidR.TRN", { 13, 8, 12, 8, 16, 12 }, { 0, 0, 0, 0, 0, 0 }, "Lava Maw", 22, 27, 25, 100, 150, AI_ACID, 0 , 3, 65, 8, 10, 20, 40, 8, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | IMUNE_FIRE | IMUNE_ACID , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_ACID , 0, 3, 2940 }, + { 160, 1010, "Monsters\\SKing\\SKing%c.CL2", TRUE, "Monsters\\SKing\\SKing%c%i.WAV", TRUE, TRUE, "Monsters\\SkelAxe\\White.TRN", { 8, 6, 16, 6, 16, 6 }, { 2, 0, 0, 0, 0, 2 }, "Skeleton King", 6, 6, 9, 140, 140, AI_SKELKING, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 60, 8, 6, 16, 0, 0, 0, 0, 70, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0x8001, 7, 570 }, + { 128, 980, "Monsters\\FatC\\FatC%c.CL2", FALSE, "Monsters\\FatC\\FatC%c%i.WAV", FALSE, FALSE, NULL, { 10, 8, 12, 6, 16, 0 }, { 1, 0, 0, 0, 0, 0 }, "The Butcher", 0, 0, 1, 320, 320, AI_CLEAVER, 0 , 3, 50, 8, 6, 12, 0, 0, 0, 0, 50, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0x8000, 3, 710 }, + { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Overlord", 8, 12, 10, 60, 80, AI_FAT, 0 , 0, 55, 8, 6, 12, 0, 0, 0, 0, 55, MC_DEMON, 0 , RESIST_FIRE , 0, 3, 635 }, + { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\Blue.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Mud Man", 13, 17, 14, 100, 125, AI_FAT, MFLAG_SEARCH , 1, 60, 8, 8, 16, 0, 0, 0, 0, 60, MC_DEMON, 0 , IMUNE_LIGHTNING , 0, 3, 1165 }, + { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\FatB.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Toad Demon", 15, 19, 16, 135, 160, AI_FAT, MFLAG_SEARCH , 2, 70, 8, 8, 16, 40, 0, 8, 20, 65, MC_DEMON, IMUNE_MAGIC , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 3, 1380 }, + { 128, 1130, "Monsters\\Fat\\Fat%c.CL2", TRUE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, TRUE, "Monsters\\Fat\\FatF.TRN", { 8, 10, 15, 6, 16, 10 }, { 4, 0, 0, 0, 0, 0 }, "Flayed One", 19, 23, 20, 160, 200, AI_FAT, MFLAG_SEARCH , 3, 85, 8, 10, 20, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 2058 }, + { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Wyrm", 9, 13, 11, 60, 90, AI_SKELSD, 0 , 0, 40, 8, 4, 10, 0, 0, 0, 0, 25, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 0, 3, 660 }, + { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Cave Slug", 11, 15, 13, 75, 110, AI_SKELSD, 0 , 1, 50, 8, 6, 13, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC , RESIST_MAGIC , 0, 3, 994 }, + { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Devil Wyrm", 13, 17, 15, 100, 140, AI_SKELSD, 0 , 2, 55, 8, 8, 16, 0, 0, 0, 0, 30, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE , RESIST_MAGIC | RESIST_FIRE , 0, 3, 1320 }, + { 160, 2420, "Monsters\\Worm\\Worm%c.CL2", FALSE, "Monsters\\Fat\\Fat%c%i.WAV", FALSE, FALSE, NULL, { 13, 13, 13, 11, 19, 0 }, { 0, 0, 0, 0, 0, 0 }, "Devourer", 15, 19, 17, 125, 200, AI_SKELSD, 0 , 3, 60, 8, 10, 20, 0, 0, 0, 0, 35, MC_ANIMAL, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 3, 1827 }, + { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, FALSE, NULL, { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Magma Demon", 14, 17, 13, 50, 70, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 45, 4, 2, 10, 50, 13, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1076 }, + { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Yellow.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Blood Stone", 15, 19, 14, 55, 75, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 50, 4, 2, 12, 50, 14, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1309 }, + { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Blue.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Hell Stone", 16, 20, 16, 60, 80, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 60, 4, 2, 20, 60, 14, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 1680 }, + { 128, 1680, "Monsters\\Magma\\Magma%c.CL2", TRUE, "Monsters\\Magma\\Magma%c%i.WAV", TRUE, TRUE, "Monsters\\Magma\\Wierd.TRN", { 8, 10, 14, 7, 18, 18 }, { 2, 0, 0, 0, 1, 0 }, "Lava Lord", 17, 21, 18, 70, 85, AI_MAGMA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 75, 4, 4, 24, 60, 14, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 2124 }, + { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, FALSE, NULL, { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Horned Demon", 12, 16, 13, 40, 80, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 60, 7, 2, 16, 100, 0, 5, 32, 40, MC_ANIMAL, 0 , RESIST_FIRE , 0, 7, 1172 }, + { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\Orange.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Mud Runner", 14, 18, 15, 50, 90, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 70, 7, 6, 18, 100, 0, 12, 36, 45, MC_ANIMAL, 0 , RESIST_FIRE , 0, 7, 1404 }, + { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\Blue.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Frost Charger", 16, 20, 17, 60, 100, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 8, 20, 100, 0, 20, 40, 50, MC_ANIMAL, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 7, 1720 }, + { 160, 1630, "Monsters\\Rhino\\Rhino%c.CL2", TRUE, "Monsters\\Rhino\\Rhino%c%i.WAV", TRUE, TRUE, "Monsters\\Rhino\\RhinoB.TRN", { 8, 8, 14, 6, 16, 6 }, { 2, 0, 0, 0, 0, 0 }, "Obsidian Lord", 18, 22, 19, 70, 110, AI_RHINO, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 7, 10, 22, 100, 0, 20, 50, 55, MC_ANIMAL, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0, 7, 1809 }, + { 128, 1740, "Monsters\\Demskel\\Demskl%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, FALSE, "Monsters\\Thin\\Thinv3.TRN", { 10, 8, 20, 6, 24, 16 }, { 3, 0, 0, 0, 0, 0 }, "Bone Demon", 10, 14, 12, 70, 70, AI_STORM, 0 , 0, 60, 8, 6, 14, 12, 0, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_NULL_40, 0, 7, 1344 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Red Death", 14, 18, 16, 96, 96, AI_STORM, 0 , 1, 75, 5, 10, 20, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 2168 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Litch Demon", 16, 20, 18, 110, 110, AI_STORM, 0 , 2, 80, 5, 10, 24, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 2736 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Undead Balrog", 20, 24, 22, 130, 130, AI_STORM, 0 , 3, 85, 5, 12, 30, 0, 0, 0, 0, 65, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3575 }, + { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Incinerator", 14, 18, 16, 30, 45, AI_FIREMAN, 0 , 0, 75, 8, 8, 16, 0, 0, 0, 0, 25, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 1888 }, + { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Flame Lord", 16, 20, 18, 40, 55, AI_FIREMAN, 0 , 1, 75, 8, 10, 20, 0, 0, 0, 0, 25, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 3, 2250 }, + { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Doom Fire", 18, 22, 20, 50, 65, AI_FIREMAN, 0 , 2, 80, 8, 12, 24, 0, 0, 0, 0, 30, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 2740 }, + { 128, 1460, "Monsters\\Fireman\\FireM%c.CL2", TRUE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 14, 19, 20, 8, 14, 23 }, { 0, 0, 0, 0, 0, 0 }, "Hell Burner", 20, 24, 22, 60, 80, AI_FIREMAN, 0 , 3, 85, 8, 15, 30, 0, 0, 0, 0, 30, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 3355 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv3.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Red Storm", 17, 21, 18, 55, 110, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 80, 5, 8, 18, 75, 8, 4, 16, 30, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2160 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, FALSE, NULL, { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Storm Rider", 19, 23, 20, 60, 120, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 80, 5, 8, 18, 80, 8, 4, 16, 30, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2391 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE, TRUE, "Monsters\\Thin\\Thinv2.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Storm Lord", 21, 25, 22, 75, 135, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 85, 5, 12, 24, 75, 8, 4, 16, 35, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_LIGHTNING , 0, 7, 2775 }, + { 160, 1740, "Monsters\\Thin\\Thin%c.CL2", TRUE, "Monsters\\Thin\\Thin%c%i.WAV", TRUE , TRUE, "Monsters\\Thin\\Thinv1.TRN", { 8, 8, 18, 4, 17, 14 }, { 3, 0, 0, 0, 0, 0 }, "Maelstorm", 23, 27, 24, 90, 150, AI_STORM, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 90, 5, 12, 28, 75, 8, 4, 16, 40, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 3177 }, + { 128, 1650, "Monsters\\BigFall\\Fallg%c.CL2", TRUE, "Monsters\\BigFall\\Bfal%c%i.WAV", FALSE, FALSE, NULL, { 10, 8, 11, 8, 17, 0 }, { 0, 0, 0, 0, 2, 2 }, "Devil Kin Brute", 20, 20, 24, 160, 220, AI_SKELSD, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 100, 6, 18, 24, 0, 0, 0, 0, 75, MC_ANIMAL, 0 , 0 , 0, 6, 2000 }, + { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, FALSE, NULL, { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, "Winged-Demon", 8, 12, 9, 45, 60, AI_GARG, MFLAG_CAN_OPEN_DOOR, 0, 50, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 6, 662 }, + { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GarE.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 2 }, "Gargoyle", 12, 16, 13, 60, 90, AI_GARG, MFLAG_CAN_OPEN_DOOR, 1, 65, 7, 10, 16, 0, 0, 0, 0, 45, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 6, 1205 }, + { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GargBr.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, "Blood Claw", 16, 20, 19, 75, 125, AI_GARG, MFLAG_CAN_OPEN_DOOR, 2, 80, 7, 14, 22, 0, 0, 0, 0, 50, MC_DEMON, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 6, 1873 }, + { 160, 1650, "Monsters\\Gargoyle\\Gargo%c.CL2", TRUE, "Monsters\\Gargoyle\\Gargo%c%i.WAV", FALSE, TRUE, "Monsters\\Gargoyle\\GargB.TRN", { 14, 14, 14, 10, 18, 14 }, { 0, 0, 0, 0, 0, 0 }, "Death Wing", 18, 22, 23, 90, 150, AI_GARG, MFLAG_CAN_OPEN_DOOR, 3, 95, 7, 16, 28, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 6, 2278 }, + { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, FALSE, NULL, { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Slayer", 19, 23, 20, 120, 140, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 0, 100, 8, 12, 20, 0, 3, 0, 0, 60, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , RESIST_MAGIC | IMUNE_FIRE , 0, 7, 2300 }, + { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Guard.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Guardian", 21, 25, 22, 140, 160, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 1, 110, 8, 14, 22, 0, 3, 0, 0, 65, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE , RESIST_MAGIC | IMUNE_FIRE , 0, 7, 2714 }, + { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Vtexl.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Vortex Lord", 23, 26, 24, 160, 180, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 120, 8, 18, 24, 0, 3, 0, 0, 70, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3252 }, + { 160, 2220, "Monsters\\Mega\\Mega%c.CL2", TRUE, "Monsters\\Mega\\Mega%c%i.WAV", TRUE, TRUE, "Monsters\\Mega\\Balr.TRN", { 6, 7, 14, 1, 24, 5 }, { 3, 0, 0, 0, 2, 0 }, "Balrog", 25, 29, 26, 180, 200, AI_MEGA, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 130, 8, 22, 30, 0, 3, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 3643 }, + { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, FALSE, NULL, { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Cave Viper", 20, 24, 21, 100, 150, AI_SNAKE, MFLAG_SEARCH , 0, 90, 8, 8, 20, 0, 0, 0, 0, 60, MC_DEMON, IMUNE_MAGIC , IMUNE_MAGIC , 0, 7, 2725 }, + { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\SnakR.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Fire Drake", 22, 26, 23, 120, 170, AI_SNAKE, MFLAG_SEARCH , 1, 105, 8, 12, 24, 0, 0, 0, 0, 65, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE , IMUNE_MAGIC | IMUNE_FIRE , 0, 7, 3139 }, + { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\Snakg.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Gold Viper", 24, 27, 25, 140, 180, AI_SNAKE, MFLAG_SEARCH , 2, 120, 8, 15, 26, 0, 0, 0, 0, 70, MC_DEMON, IMUNE_MAGIC | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_LIGHTNING , 0, 7, 3540 }, + { 160, 1270, "Monsters\\Snake\\Snake%c.CL2", FALSE, "Monsters\\Snake\\Snake%c%i.WAV", FALSE, TRUE, "Monsters\\Snake\\Snakb.TRN", { 12, 11, 13, 5, 18, 0 }, { 2, 0, 0, 0, 1, 0 }, "Azure Drake", 28, 30, 27, 160, 200, AI_SNAKE, MFLAG_SEARCH , 3, 130, 8, 18, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING , 0, 7, 3791 }, + { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, FALSE, NULL, { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Black Knight", 23, 27, 24, 150, 150, AI_SKELSD, MFLAG_SEARCH , 0, 110, 8, 15, 20, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 3360 }, + { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntRT.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Doom Guard", 25, 29, 26, 165, 165, AI_SKELSD, MFLAG_SEARCH , 0, 130, 8, 18, 25, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 7, 3650 }, + { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntBT.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Steel Lord", 27, 30, 28, 180, 180, AI_SKELSD, MFLAG_SEARCH , 1, 120, 8, 20, 30, 0, 0, 0, 0, 80, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 4252 }, + { 160, 2120, "Monsters\\Black\\Black%c.CL2", FALSE, "Monsters\\Black\\Black%c%i.WAV", FALSE, TRUE, "Monsters\\Black\\BlkKntBe.TRN", { 8, 8, 16, 4, 24, 0 }, { 2, 0, 0, 0, 0, 0 }, "Blood Knight", 24, 26, 30, 200, 200, AI_SKELSD, MFLAG_SEARCH , 1, 130, 8, 25, 35, 0, 0, 0, 0, 85, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 5130 }, + { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Unraveler", 26, 28, 25, 70, 150, AI_SKELSD, 0 , 0, 75, 7, 10, 20, 0, 0, 0, 0, 70, MC_UNDEAD, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 3, 3812 }, + { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Hollow One", 28, 30, 27, 135, 240, AI_SKELSD, 0 , 1, 75, 7, 12, 24, 0, 0, 0, 0, 75, MC_UNDEAD, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 4374 }, + { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Pain Master", 27, 30, 29, 110, 200, AI_SKELSD, 0 , 2, 80, 7, 16, 30, 0, 0, 0, 0, 80, MC_UNDEAD, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 5147 }, + { 96, 484, "Monsters\\Unrav\\Unrav%c.CL2", FALSE, "Monsters\\Acid\\Acid%c%i.WAV", FALSE, FALSE, NULL, { 10, 10, 12, 5, 16, 0 }, { 0, 0, 0, 0, 0, 0 }, "Reality Weaver", 28, 30, 30, 135, 240, AI_SKELSD, 0 , 3, 85, 7, 20, 35, 0, 0, 0, 0, 85, MC_UNDEAD, RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, RESIST_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 3, 5925 }, + { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, FALSE, NULL, { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Succubus", 22, 26, 24, 120, 150, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 0, 100, 10, 1, 20, 0, 0, 0, 0, 60, MC_DEMON, RESIST_MAGIC , IMUNE_MAGIC | RESIST_FIRE , 0, 3, 3696 }, + { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succb.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Snow Witch", 25, 28, 26, 135, 175, AI_SUCC, MFLAG_CAN_OPEN_DOOR, 1, 110, 10, 1, 24, 0, 0, 0, 0, 65, MC_DEMON, RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 3, 4084 }, + { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succrw.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Hell Spawn", 27, 30, 28, 150, 200, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 2, 115, 10, 1, 30, 0, 0, 0, 0, 75, MC_DEMON, RESIST_MAGIC | IMUNE_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 0, 3, 4480 }, + { 128, 980, "Monsters\\Succ\\Scbs%c.CL2", FALSE, "Monsters\\Succ\\Scbs%c%i.WAV", FALSE, TRUE, "Monsters\\Succ\\Succbw.TRN", { 14, 8, 16, 7, 24, 0 }, { 0, 0, 0, 0, 0, 0 }, "Soul Burner", 28, 30, 30, 140, 225, AI_SUCC, MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 120, 10, 1, 35, 0, 0, 0, 0, 85, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 0, 3, 4644 }, + { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, FALSE, NULL, { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Counselor", 24, 26, 25, 70, 70, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 0, 90, 8, 8, 20, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 7, 4070 }, + { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselg.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Magistrate", 26, 28, 27, 85, 85, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 1, 100, 8, 10, 24, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 4478 }, + { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselgd.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Cabalist", 28, 30, 29, 120, 120, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 2, 110, 8, 14, 30, 0, 0, 0, 0, 0, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4929 }, + { 128, 2000, "Monsters\\Mage\\Mage%c.CL2", TRUE, "Monsters\\Mage\\Mage%c%i.WAV", FALSE, TRUE, "Monsters\\Mage\\Cnselbk.TRN", { 12, 1, 20, 8, 28, 20 }, { 0, 0, 0, 0, 0, 0 }, "Advocate", 30, 30, 30, 145, 145, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 15, 25, 0, 0, 0, 0, 0, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4968 }, + { 96, 386, "Monsters\\Golem\\Golem%c.CL2", TRUE, "Monsters\\Golem\\Golm%c%i.WAV", FALSE, FALSE, NULL, { 0, 16, 12, 0, 12, 20 }, { 0, 0, 0, 0, 0, 0 }, "Golem", 0, 0, 12, 1, 1, AI_GOLUM, MFLAG_CAN_OPEN_DOOR, 0, 0, 7, 1, 1, 0, 0, 0, 0, 1, MC_DEMON, 0 , 0 , 0, 0, 0 }, + { 160, 2000, "Monsters\\Diablo\\Diablo%c.CL2", TRUE, "Monsters\\Diablo\\Diablo%c%i.WAV", TRUE, FALSE, NULL, { 16, 6, 16, 6, 16, 16 }, { 0, 0, 0, 0, 0, 0 }, "The Dark Lord", 50, 50, 30, 1666, 1666, AI_DIABLO, MFLAG_KNOCKBACK | MFLAG_SEARCH | MFLAG_CAN_OPEN_DOOR, 3, 220, 4, 30, 60, 0, 11, 0, 0, 70, MC_DEMON, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 7, 31666 }, + { 128, 1060, "Monsters\\DarkMage\\Dmage%c.CL2", TRUE, "Monsters\\DarkMage\\Dmag%c%i.WAV", FALSE, FALSE, NULL, { 6, 1, 21, 6, 23, 18 }, { 0, 0, 0, 0, 0, 0 }, "The Arch-Litch Malignus", 30, 30, 30, 160, 160, AI_COUNSLR, MFLAG_CAN_OPEN_DOOR, 3, 120, 8, 20, 40, 0, 0, 0, 0, 70, MC_DEMON, RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 7, 4968 } + // clang-format on +}; + +char MonstConvTbl[128] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, + 31, 32, 34, 35, 36, 37, 38, 40, 39, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, + 53, 54, 55, 56, 57, 59, 58, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 0, + 0, 0, 0, 72, 73, 74, 75, 0, 0, 0, + 0, 77, 76, 78, 79, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 92, 91, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 0, 110, 0, 109, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 111 +}; + +BYTE MonstAvailTbl[112] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 2, 2, 2, 0, 2, 2, 2, 2, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 0, 0 +}; + +UniqMonstStruct UniqMonst[98] = { + // clang-format off + // mtype, mName, mTrnName, mlevel, mmaxhp, mAi, mint, mMinDamage, mMaxDamage, mMagicRes, mUnqAttr, mUnqVar1, mUnqVar2, mtalkmsg + { MT_NGOATMC, "Gharbad the Weak", "BSDB", 4, 120, AI_GARBUD, 3, 8, 16, IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_GARBUD1 }, + { MT_SKING, "Skeleton King", "GENRL", 0, 240, AI_SKELKING, 3, 6, 16, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 1, 0, 0, 0 }, + { MT_COUNSLR, "Zhar the Mad", "GENERAL", 8, 360, AI_ZHAR, 3, 16, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, QUEST_ZHAR1 }, + { MT_BFALLSP, "Snotspill", "BNG", 4, 220, AI_SNOTSPIL, 3, 10, 18, RESIST_LIGHTNING , 0, 0, 0, QUEST_BANNER10 }, + { MT_ADVOCATE, "Arch-Bishop Lazarus", "GENERAL", 0, 600, AI_LAZURUS, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, + { MT_HLSPWN, "Red Vex", "REDV", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, + { MT_HLSPWN, "BlackJade", "BLKJD", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 }, + { MT_RBLACK, "Lachdanan", "BHKA", 14, 500, AI_LACHDAN, 3, 0, 0, 0 , 0, 0, 0, QUEST_VEIL9 }, + { MT_BTBLACK, "Warlord of Blood", "GENERAL", 13, 850, AI_WARLORD, 3, 35, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_WARLRD9 }, + { MT_CLEAVER, "The Butcher", "GENRL", 0, 220, AI_CLEAVER, 3, 6, 12, RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_TSKELAX, "Bonehead Keenaxe", "BHKA", 2, 91, AI_SKELSD, 2, 4, 10, IMUNE_MAGIC | IMUNE_NULL_40, 7, 100, 0, 0 }, + { MT_RFALLSD, "Bladeskin the Slasher", "BSTS", 2, 51, AI_FALLEN, 0, 6, 18, RESIST_FIRE , 11, 45, 0, 0 }, + { MT_NZOMBIE, "Soulpus", "GENERAL", 2, 133, AI_ZOMBIE, 0, 4, 8, RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, 0 }, + { MT_RFALLSP, "Pukerat the Unclean", "PTU", 2, 77, AI_FALLEN, 3, 1, 5, RESIST_FIRE , 0, 0, 0, 0 }, + { MT_WSKELAX, "Boneripper", "BR", 2, 54, AI_BAT, 0, 6, 15, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_NZOMBIE, "Rotfeast the Hungry", "ETH", 2, 85, AI_SKELSD, 3, 4, 12, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_DFALLSD, "Gutshank the Quick", "GTQ", 3, 66, AI_BAT, 2, 6, 16, RESIST_FIRE , 3, 0, 0, 0 }, + { MT_TSKELSD, "Brokenhead Bangshield", "BHBS", 3, 108, AI_SKELSD, 3, 12, 20, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_YFALLSP, "Bongo", "BNG", 3, 178, AI_FALLEN, 3, 9, 21, 0 , 3, 0, 0, 0 }, + { MT_BZOMBIE, "Rotcarnage", "RCRN", 3, 102, AI_ZOMBIE, 3, 9, 24, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 11, 45, 0, 0 }, + { MT_NSCAV, "Shadowbite", "SHBT", 2, 60, AI_SKELSD, 3, 3, 20, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_WSKELBW, "Deadeye", "DE", 2, 49, AI_GOATBOW, 0, 6, 9, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_RSKELAX, "Madeye the Dead", "MTD", 4, 75, AI_BAT, 0, 9, 21, IMUNE_MAGIC | IMUNE_FIRE , 11, 30, 0, 0 }, + { MT_BSCAV, "El Chupacabras", "GENERAL", 3, 120, AI_GOATMC, 0, 10, 18, RESIST_FIRE , 3, 30, 0, 0 }, + { MT_TSKELBW, "Skullfire", "SKFR", 3, 125, AI_GOATBOW, 1, 6, 10, IMUNE_FIRE , 0, 100, 0, 0 }, + { MT_SNEAK, "Warpskull", "TSPO", 3, 117, AI_SNEAK, 2, 6, 18, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_GZOMBIE, "Goretongue", "PMR", 3, 156, AI_SKELSD, 1, 15, 30, IMUNE_MAGIC | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_WSCAV, "Pulsecrawler", "BHKA", 4, 150, AI_SCAV, 0, 16, 20, IMUNE_FIRE | RESIST_LIGHTNING , 11, 45, 0, 0 }, + { MT_BLINK, "Moonbender", "GENERAL", 4, 135, AI_BAT, 0, 9, 27, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_BLINK, "Wrathraven", "GENERAL", 5, 135, AI_BAT, 2, 9, 22, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_YSCAV, "Spineeater", "GENERAL", 4, 180, AI_SCAV, 1, 18, 25, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_RSKELBW, "Blackash the Burning", "BASHTB", 4, 120, AI_GOATBOW, 0, 6, 16, IMUNE_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_BFALLSD, "Shadowcrow", "GENERAL", 5, 270, AI_SNEAK, 2, 12, 25, 0 , 3, 0, 0, 0 }, + { MT_LRDSAYTR, "Blightstone the Weak", "BHKA", 4, 360, AI_SKELSD, 0, 4, 12, IMUNE_MAGIC | RESIST_LIGHTNING , 7, 70, 0, 0 }, + { MT_FAT, "Bilefroth the Pit Master", "BFTP", 6, 210, AI_BAT, 1, 16, 23, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_NGOATBW, "Bloodskin Darkbow", "BSDB", 5, 207, AI_GOATBOW, 0, 3, 16, RESIST_FIRE | RESIST_LIGHTNING , 11, 55, 0, 0 }, + { MT_GLOOM, "Foulwing", "DB", 5, 246, AI_RHINO, 3, 12, 28, RESIST_FIRE , 3, 0, 0, 0 }, + { MT_XSKELSD, "Shadowdrinker", "SHDR", 5, 300, AI_SNEAK, 1, 18, 26, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 8, 45, 0, 0 }, + { MT_UNSEEN, "Hazeshifter", "BHKA", 5, 285, AI_SNEAK, 3, 18, 30, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_NACID, "Deathspit", "BFDS", 6, 303, AI_ACIDUNIQ, 0, 12, 32, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_RGOATMC, "Bloodgutter", "BGBL", 6, 315, AI_BAT, 1, 24, 34, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_BGOATMC, "Deathshade Fleshmaul", "DSFM", 6, 276, AI_RHINO, 0, 12, 24, IMUNE_MAGIC | RESIST_FIRE , 8, 65, 0, 0 }, + { MT_WYRM, "Warmaggot the Mad", "GENERAL", 6, 246, AI_BAT, 3, 15, 30, RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_STORM, "Glasskull the Jagged", "BHKA", 7, 354, AI_STORM, 0, 18, 30, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_RGOATBW, "Blightfire", "BLF", 7, 321, AI_SUCC, 2, 13, 21, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_GARGOYLE, "Nightwing the Cold", "GENERAL", 7, 342, AI_BAT, 1, 18, 26, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_GGOATBW, "Gorestone", "GENERAL", 7, 303, AI_GOATBOW, 1, 15, 28, RESIST_LIGHTNING | IMUNE_NULL_40, 7, 70, 0, 0 }, + { MT_BMAGMA, "Bronzefist Firestone", "GENERAL", 8, 360, AI_MAGMA, 0, 30, 36, IMUNE_MAGIC | RESIST_FIRE , 3, 0, 0, 0 }, + { MT_INCIN, "Wrathfire the Doomed", "WFTD", 8, 270, AI_SKELSD, 2, 20, 30, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_NMAGMA, "Firewound the Grim", "BHKA", 8, 303, AI_MAGMA, 0, 18, 22, IMUNE_MAGIC | RESIST_FIRE , 3, 0, 0, 0 }, + { MT_MUDMAN, "Baron Sludge", "BSM", 8, 315, AI_SNEAK, 3, 25, 34, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 11, 75, 0, 0 }, + { MT_GGOATMC, "Blighthorn Steelmace", "BHSM", 7, 250, AI_RHINO, 0, 20, 28, RESIST_LIGHTNING , 11, 45, 0, 0 }, + { MT_RACID, "Chaoshowler", "GENERAL", 8, 240, AI_ACIDUNIQ, 0, 12, 20, 0 , 3, 0, 0, 0 }, + { MT_REDDTH, "Doomgrin the Rotting", "GENERAL", 8, 405, AI_STORM, 3, 25, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_FLAMLRD, "Madburner", "GENERAL", 9, 270, AI_STORM, 0, 20, 40, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING , 3, 0, 0, 0 }, + { MT_LTCHDMN, "Bonesaw the Litch", "GENERAL", 9, 495, AI_STORM, 2, 30, 55, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_MUDRUN, "Breakspine", "GENERAL", 9, 351, AI_RHINO, 0, 25, 34, RESIST_FIRE , 3, 0, 0, 0 }, + { MT_REDDTH, "Devilskull Sharpbone", "GENERAL", 9, 444, AI_STORM, 1, 25, 40, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_STORM, "Brokenstorm", "GENERAL", 9, 411, AI_STORM, 2, 25, 36, IMUNE_LIGHTNING , 3, 0, 0, 0 }, + { MT_RSTORM, "Stormbane", "GENERAL", 9, 555, AI_STORM, 3, 30, 30, IMUNE_LIGHTNING , 3, 0, 0, 0 }, + { MT_TOAD, "Oozedrool", "GENERAL", 9, 483, AI_FAT, 3, 25, 30, RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_BLOODCLW, "Goldblight of the Flame", "GENERAL", 10, 405, AI_GARG, 0, 15, 35, IMUNE_MAGIC | IMUNE_FIRE , 11, 80, 0, 0 }, + { MT_OBLORD, "Blackstorm", "GENERAL", 10, 525, AI_RHINO, 3, 20, 40, IMUNE_MAGIC | IMUNE_LIGHTNING , 11, 90, 0, 0 }, + { MT_RACID, "Plaguewrath", "GENERAL", 10, 450, AI_ACIDUNIQ, 2, 20, 30, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_RSTORM, "The Flayer", "GENERAL", 10, 501, AI_STORM, 1, 20, 35, RESIST_MAGIC | RESIST_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_FROSTC, "Bluehorn", "GENERAL", 11, 477, AI_RHINO, 1, 25, 30, IMUNE_MAGIC | RESIST_FIRE , 11, 90, 0, 0 }, + { MT_HELLBURN, "Warpfire Hellspawn", "GENERAL", 11, 525, AI_FIREMAN, 3, 10, 40, RESIST_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_NSNAKE, "Fangspeir", "GENERAL", 11, 444, AI_SKELSD, 1, 15, 32, IMUNE_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_UDEDBLRG, "Festerskull", "GENERAL", 11, 600, AI_STORM, 2, 15, 30, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_NBLACK, "Lionskull the Bent", "GENERAL", 12, 525, AI_SKELSD, 2, 25, 25, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_COUNSLR, "Blacktongue", "GENERAL", 12, 360, AI_COUNSLR, 3, 15, 30, RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_DEATHW, "Viletouch", "GENERAL", 12, 525, AI_GARG, 3, 20, 40, IMUNE_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_RSNAKE, "Viperflame", "GENERAL", 12, 570, AI_SKELSD, 1, 25, 35, IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_BSNAKE, "Fangskin", "BHKA", 14, 681, AI_SKELSD, 2, 15, 50, IMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_SUCCUBUS, "Witchfire the Unholy", "GENERAL", 12, 444, AI_SUCC, 3, 10, 20, IMUNE_MAGIC | IMUNE_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_BALROG, "Blackskull", "BHKA", 13, 750, AI_SKELSD, 3, 25, 40, IMUNE_MAGIC | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_UNRAV, "Soulslash", "GENERAL", 12, 450, AI_SKELSD, 0, 25, 25, IMUNE_MAGIC | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_VTEXLRD, "Windspawn", "GENERAL", 12, 711, AI_SKELSD, 1, 35, 40, IMUNE_MAGIC | IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_GSNAKE, "Lord of the Pit", "GENERAL", 13, 762, AI_SKELSD, 2, 25, 42, RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_RTBLACK, "Rustweaver", "GENERAL", 13, 400, AI_SKELSD, 3, 1, 60, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_HOLOWONE, "Howlingire the Shade", "GENERAL", 13, 450, AI_SKELSD, 2, 40, 75, RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_MAEL, "Doomcloud", "GENERAL", 13, 612, AI_STORM, 1, 1, 60, RESIST_FIRE | IMUNE_LIGHTNING , 0, 0, 0, 0 }, + { MT_PAINMSTR, "Bloodmoon Soulfire", "GENERAL", 13, 684, AI_SKELSD, 1, 15, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_SNOWWICH, "Witchmoon", "GENERAL", 13, 310, AI_SUCC, 3, 30, 40, RESIST_LIGHTNING , 0, 0, 0, 0 }, + { MT_VTEXLRD, "Gorefeast", "GENERAL", 13, 771, AI_SKELSD, 3, 20, 55, RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_RTBLACK, "Graywar the Slayer", "GENERAL", 14, 672, AI_SKELSD, 1, 30, 50, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_MAGISTR, "Dreadjudge", "GENERAL", 14, 540, AI_COUNSLR, 1, 30, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 3, 0, 0, 0 }, + { MT_HLSPWN, "Stareye the Witch", "GENERAL", 14, 726, AI_SUCC, 2, 30, 50, IMUNE_FIRE , 0, 0, 0, 0 }, + { MT_BTBLACK, "Steelskull the Hunter", "GENERAL", 14, 831, AI_SKELSD, 3, 40, 50, RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_RBLACK, "Sir Gorash", "GENERAL", 16, 1050, AI_SKELSD, 1, 20, 60, IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_CABALIST, "The Vizier", "GENERAL", 15, 850, AI_COUNSLR, 2, 25, 40, IMUNE_FIRE , 3, 0, 0, 0 }, + { MT_REALWEAV, "Zamphir", "GENERAL", 15, 891, AI_SKELSD, 2, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_HLSPWN, "Bloodlust", "GENERAL", 15, 825, AI_SUCC, 1, 20, 55, IMUNE_MAGIC | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_HLSPWN, "Webwidow", "GENERAL", 16, 774, AI_SUCC, 1, 20, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_SOLBRNR, "Fleshdancer", "GENERAL", 16, 999, AI_SUCC, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, 0 }, + { MT_OBLORD, "Grimspike", "GENERAL", 19, 534, AI_SNEAK, 1, 25, 40, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 3, 0, 0, 0 }, + { MT_STORML, "Doomlock", "GENERAL", 28, 534, AI_SNEAK, 1, 35, 55, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 3, 0, 0, 0 }, + { -1, NULL, NULL, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0 } + // clang-format on +}; diff --git a/Source/monstdat.h b/Source/monstdat.h index b61679b2e..6922cb4db 100644 --- a/Source/monstdat.h +++ b/Source/monstdat.h @@ -4,7 +4,7 @@ extern MonsterData monsterdata[112]; extern char MonstConvTbl[128]; -extern unsigned char MonstAvailTbl[112]; +extern BYTE MonstAvailTbl[112]; extern UniqMonstStruct UniqMonst[98]; #endif /* __MONSTDAT_H__ */ diff --git a/Source/monster.cpp b/Source/monster.cpp index 31426b387..0a0e49af9 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -13,7 +13,7 @@ BOOLEAN sgbSaveSoundOn; MonsterStruct monster[MAXMONSTERS]; int totalmonsters; CMonster Monsters[16]; -// int END_Monsters_17; // weak +// int END_Monsters_17; int monstimgtot; int uniquetrans; int nummtypes; @@ -998,9 +998,8 @@ void InitMonsters() void PlaceUniques() { - int u; + int u, mt; BOOL done; - int mt; for (u = 0; UniqMonst[u].mtype != -1; u++) { if (UniqMonst[u].mlevel != currlevel) @@ -1027,7 +1026,7 @@ void PlaceUniques() } } -void SetMapMonsters(unsigned char *pMap, int startx, int starty) +void SetMapMonsters(BYTE *pMap, int startx, int starty) { WORD rw, rh; WORD *lm; @@ -2146,7 +2145,7 @@ void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam) StartPlrHit(pnum, dam, 0); if (monster[i]._mFlags & MFLAG_KNOCKBACK) { if (plr[pnum]._pmode != PM_GOTHIT) - StartPlrHit(pnum, 0, 1u); + StartPlrHit(pnum, 0, TRUE); newx = plr[pnum].WorldX + offset_x[monster[i]._mdir]; newy = plr[pnum].WorldY + offset_y[monster[i]._mdir]; if (PosOkPlayer(pnum, newx, newy)) { @@ -3577,17 +3576,17 @@ void MAI_Ranged(int i, int missile_type, BOOL special) void MAI_GoatBow(int i) { - MAI_Ranged(i, MIS_ARROW, 0); + MAI_Ranged(i, MIS_ARROW, FALSE); } void MAI_Succ(int i) { - MAI_Ranged(i, MIS_FLARE, 0); + MAI_Ranged(i, MIS_FLARE, FALSE); } void MAI_AcidUniq(int i) { - MAI_Ranged(i, MIS_ACID, 1u); + MAI_Ranged(i, MIS_ACID, TRUE); } void MAI_Scav(int i) @@ -3784,22 +3783,22 @@ void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int less void MAI_Magma(int i) { - MAI_RoundRanged(i, MIS_MAGMABALL, 1u, 4, 0); + MAI_RoundRanged(i, MIS_MAGMABALL, TRUE, 4, 0); } void MAI_Storm(int i) { - MAI_RoundRanged(i, MIS_LIGHTCTRL2, 1u, 4, 0); + MAI_RoundRanged(i, MIS_LIGHTCTRL2, TRUE, 4, 0); } void MAI_Acid(int i) { - MAI_RoundRanged(i, MIS_ACID, 0, 4, 1); + MAI_RoundRanged(i, MIS_ACID, FALSE, 4, 1); } void MAI_Diablo(int i) { - MAI_RoundRanged(i, MIS_DIABAPOCA, 0, 40, 0); + MAI_RoundRanged(i, MIS_DIABAPOCA, FALSE, 40, 0); } void MAI_RR2(int i, int mistype, int dam) diff --git a/Source/monster.h b/Source/monster.h index c59d5e690..8d0c9adac 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -9,7 +9,7 @@ extern int nummonsters; extern MonsterStruct monster[MAXMONSTERS]; extern int totalmonsters; extern CMonster Monsters[16]; -// int END_Monsters_17; // weak +// int END_Monsters_17; extern int monstimgtot; extern int uniquetrans; extern int nummtypes; @@ -30,7 +30,7 @@ void PlaceGroup(int mtype, int num, int leaderf, int leader); void LoadDiabMonsts(); void InitMonsters(); void PlaceUniques(); -void SetMapMonsters(unsigned char *pMap, int startx, int starty); +void SetMapMonsters(BYTE *pMap, int startx, int starty); void DeleteMonster(int i); int AddMonster(int x, int y, int dir, int mtype, BOOL InMap); void NewMonsterAnim(int i, AnimStruct *anim, int md); @@ -163,7 +163,7 @@ void decode_enemy(int m, int enemy); /* rdata */ extern const char plr2monst[9]; -extern const unsigned char counsmiss[4]; +extern const BYTE counsmiss[4]; /* data */ diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp index 0b4d26736..2b82e869c 100644 --- a/Source/mpqapi.cpp +++ b/Source/mpqapi.cpp @@ -397,7 +397,7 @@ int mpqapi_find_free_block(int size, int *block_size) pBlockTbl->sizealloc -= size; if (!pBlockTbl->sizealloc) - memset(pBlockTbl, 0, 0x10u); + memset(pBlockTbl, 0, sizeof(*pBlockTbl)); return result; } diff --git a/Source/multi.cpp b/Source/multi.cpp index 628b3abe0..30c52ac90 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -24,7 +24,7 @@ char byte_678640; int sglTimeoutStart; int sgdwPlayerLeftReasonTbl[MAX_PLRS]; TBuffer sgLoPriBuf; -unsigned int sgdwGameLoops; +DWORD sgdwGameLoops; BYTE gbMaxPlayers; BOOLEAN sgbTimeout; char szPlayerName[128]; @@ -154,13 +154,13 @@ void NetSendHiPri(BYTE *pbMsg, BYTE bLen) } } -BYTE *multi_recv_packet(TBuffer *packet, BYTE *body, int *size) +BYTE *multi_recv_packet(TBuffer *pBuf, BYTE *body, int *size) { BYTE *src_ptr; size_t chunk_size; - if (packet->dwNextWriteOffset != 0) { - src_ptr = packet->bData; + if (pBuf->dwNextWriteOffset != 0) { + src_ptr = pBuf->bData; while (TRUE) { if (*src_ptr == 0) break; @@ -173,14 +173,14 @@ BYTE *multi_recv_packet(TBuffer *packet, BYTE *body, int *size) src_ptr += chunk_size; *size -= chunk_size; } - memcpy(packet->bData, src_ptr, (packet->bData - src_ptr) + packet->dwNextWriteOffset + 1); - packet->dwNextWriteOffset += (packet->bData - src_ptr); + memcpy(pBuf->bData, src_ptr, (pBuf->bData - src_ptr) + pBuf->dwNextWriteOffset + 1); + pBuf->dwNextWriteOffset += (pBuf->bData - src_ptr); return body; } return body; } -void multi_send_msg_packet(int pmask, BYTE *a2, BYTE len) +void multi_send_msg_packet(int pmask, BYTE *src, BYTE len) { DWORD v, p, t; TPkt pkt; @@ -188,7 +188,7 @@ void multi_send_msg_packet(int pmask, BYTE *a2, BYTE len) NetRecvPlrData(&pkt); t = len + 19; pkt.hdr.wLen = t; - memcpy(pkt.body, a2, len); + memcpy(pkt.body, src, len); for (v = 1, p = 0; p < MAX_PLRS; p++, v <<= 1) { if (v & pmask) { if (!SNetSendMessage(p, &pkt.hdr, t) && SErrGetLastError() != STORM_ERROR_INVALID_PLAYER) { @@ -340,9 +340,9 @@ int multi_handle_delta() } // Microsoft VisualC 2-11/net runtime -int multi_check_pkt_valid(TBuffer *a1) +int multi_check_pkt_valid(TBuffer *pBuf) { - return a1->dwNextWriteOffset == 0; + return pBuf->dwNextWriteOffset == 0; } void multi_mon_seeds() @@ -533,12 +533,12 @@ void multi_process_tmsgs() } } -void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen) +void multi_send_zero_packet(DWORD pnum, char identifier, void *pbSrc, DWORD dwLen) { - DWORD v5, dwBody; + DWORD len, dwBody; TPkt pkt; int t; - v5 = 0; + len = 0; while (dwLen) { pkt.hdr.wCheck = 'ip'; pkt.hdr.px = 0; @@ -550,8 +550,8 @@ void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen) pkt.hdr.bstr = 0; pkt.hdr.bmag = 0; pkt.hdr.bdex = 0; - pkt.body[0] = a2; - *(WORD *)&pkt.body[1] = v5; + pkt.body[0] = identifier; + *(WORD *)&pkt.body[1] = len; dwBody = gdwLargestMsgSize - 24; if (dwLen < dwBody) dwBody = dwLen; @@ -565,7 +565,7 @@ void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen) } pbSrc = (char *)pbSrc + *(WORD *)&pkt.body[3]; dwLen -= *(WORD *)&pkt.body[3]; - v5 += *(WORD *)&pkt.body[3]; + len += *(WORD *)&pkt.body[3]; } } diff --git a/Source/multi.h b/Source/multi.h index 5766fbe4e..f25a4f939 100644 --- a/Source/multi.h +++ b/Source/multi.h @@ -20,12 +20,12 @@ void __cdecl dumphist(const char *pszFmt, ...); #endif void multi_msg_add(BYTE *pbMsg, BYTE bLen); void NetSendLoPri(BYTE *pbMsg, BYTE bLen); -void multi_copy_packet(TBuffer *buf, void *packet, BYTE size); +void multi_copy_packet(TBuffer *pBuf, void *packet, BYTE size); void multi_send_packet(void *packet, BYTE dwSize); void NetRecvPlrData(TPkt *pkt); void NetSendHiPri(BYTE *pbMsg, BYTE bLen); -BYTE *multi_recv_packet(TBuffer *packet, BYTE *body, int *size); -void multi_send_msg_packet(int pmask, BYTE *a2, BYTE len); +BYTE *multi_recv_packet(TBuffer *pBuf, BYTE *body, int *size); +void multi_send_msg_packet(int pmask, BYTE *src, BYTE len); void multi_msg_countdown(); void multi_parse_turn(int pnum, int turn); void multi_handle_turn_upper_bit(int pnum); @@ -34,14 +34,14 @@ void multi_clear_left_tbl(); void multi_player_left_msg(int pnum, int left); void multi_net_ping(); int multi_handle_delta(); -int multi_check_pkt_valid(TBuffer *a1); +int multi_check_pkt_valid(TBuffer *pBuf); void multi_mon_seeds(); void multi_begin_timeout(); void multi_check_drop_player(); void multi_process_network_packets(); void multi_handle_all_packets(int pnum, BYTE *pData, int nSize); void multi_process_tmsgs(); -void multi_send_zero_packet(DWORD pnum, char a2, void *pbSrc, DWORD dwLen); +void multi_send_zero_packet(DWORD pnum, char identifier, void *pbSrc, DWORD dwLen); void NetClose(); void multi_event_handler(BOOL add); void __stdcall multi_handle_events(_SNETEVENT *pEvt); diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 56c6e719f..62f1af1b5 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -170,7 +170,7 @@ void nthread_start(BOOL set_turn_upper_bit) } } -unsigned int __stdcall nthread_handler(void *a1) +unsigned int __stdcall nthread_handler(void *) { int delta; int received; diff --git a/Source/nthread.h b/Source/nthread.h index 8b0a98c10..84263e95f 100644 --- a/Source/nthread.h +++ b/Source/nthread.h @@ -20,7 +20,7 @@ DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta); BOOL nthread_recv_turns(BOOL *pfSendAsync); void nthread_set_turn_upper_bit(); void nthread_start(BOOL set_turn_upper_bit); -unsigned int __stdcall nthread_handler(void *a1); +unsigned int __stdcall nthread_handler(void *); void nthread_cleanup(); void nthread_ignore_mutex(BOOL bStart); BOOL nthread_has_500ms_passed(BOOL unused); diff --git a/Source/objects.cpp b/Source/objects.cpp index 9acce6840..0cbdf27e0 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2,17 +2,17 @@ DEVILUTION_BEGIN_NAMESPACE -int trapid; // weak -int trapdir; // weak -unsigned char *pObjCels[40]; +int trapid; +int trapdir; +BYTE *pObjCels[40]; char ObjFileList[40]; int objectactive[MAXOBJECTS]; -int nobjects; // idb -int leverid; // idb +int nobjects; +int leverid; int objectavail[MAXOBJECTS]; ObjectStruct object[MAXOBJECTS]; BOOL InitObjFlag; -int numobjfiles; // weak +int numobjfiles; int bxadd[8] = { -1, 0, 1, -1, 1, -1, 0, 1 }; int byadd[8] = { -1, -1, -1, 0, 0, 1, 1, 1 }; @@ -55,7 +55,7 @@ char shrinemax[NUM_SHRINETYPE] = { 16, 16, 16, 16, 16, 16 }; // 0 - sp+mp, 1 - sp only, 2 - mp only -unsigned char shrineavail[NUM_SHRINETYPE] = { +BYTE shrineavail[NUM_SHRINETYPE] = { 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2 @@ -833,17 +833,17 @@ void InitObjects() InitRndLocObj(1, 5, 7); if (leveltype != DTYPE_HELL) AddObjTraps(); - if (leveltype > 1u) + if (leveltype > 1) AddChestTraps(); InitObjFlag = FALSE; } } -void SetMapObjects(unsigned char *pMap, int startx, int starty) +void SetMapObjects(BYTE *pMap, int startx, int starty) { int rw, rh; int i, j; - unsigned char *lm, *h; + BYTE *lm, *h; long mapoff; int fileload[56]; char filestr[32]; @@ -1252,7 +1252,7 @@ void AddStoryBook(int i) object[i]._oVar2 = StoryText[bookframe][1]; if (currlevel == 12) object[i]._oVar2 = StoryText[bookframe][2]; - object[i]._oVar3 = ((unsigned int)currlevel >> 2) + 3 * bookframe - 1; + object[i]._oVar3 = (currlevel >> 2) + 3 * bookframe - 1; object[i]._oAnimFrame = 5 - 2 * bookframe; object[i]._oVar4 = object[i]._oAnimFrame + 1; } @@ -2353,7 +2353,7 @@ void ObjChangeMap(int x1, int y1, int x2, int y2) for (j = y1; j <= y2; j++) { for (i = x1; i <= x2; i++) { - ObjSetMini(i, j, (BYTE)pdungeon[i][j]); + ObjSetMini(i, j, pdungeon[i][j]); dungeon[i][j] = pdungeon[i][j]; } } @@ -2373,7 +2373,7 @@ void ObjChangeMapResync(int x1, int y1, int x2, int y2) for (j = y1; j <= y2; j++) { for (i = x1; i <= x2; i++) { - ObjSetMini(i, j, (unsigned char)pdungeon[i][j]); + ObjSetMini(i, j, pdungeon[i][j]); dungeon[i][j] = pdungeon[i][j]; } } @@ -2582,7 +2582,7 @@ void OperateChest(int pnum, int i, BOOL sendmsg) SetRndSeed(object[i]._oRndSeed); if (setlevel) { for (j = 0; j < object[i]._oVar1; j++) { - CreateRndItem(object[i]._ox, object[i]._oy, 1u, sendmsg, 0); + CreateRndItem(object[i]._ox, object[i]._oy, TRUE, sendmsg, 0); } } else { for (j = 0; j < object[i]._oVar1; j++) { @@ -3448,8 +3448,6 @@ void OperateShrine(int pnum, int i, int sType) if (pnum == myplr) NetSendCmdParam2(FALSE, CMD_PLROPOBJ, pnum, i); } -// 52571C: using guessed type int drawpanflag; -// 676190: using guessed type int deltaload; void OperateSkelBook(int pnum, int i, BOOL sendmsg) { diff --git a/Source/objects.h b/Source/objects.h index 50a7ea51e..9c2c10f2b 100644 --- a/Source/objects.h +++ b/Source/objects.h @@ -2,17 +2,17 @@ #ifndef __OBJECTS_H__ #define __OBJECTS_H__ -extern int trapid; // weak -extern int trapdir; // weak -extern unsigned char *pObjCels[40]; +extern int trapid; +extern int trapdir; +extern BYTE *pObjCels[40]; extern char ObjFileList[40]; extern int objectactive[MAXOBJECTS]; -extern int nobjects; // idb -extern int leverid; // idb +extern int nobjects; +extern int leverid; extern int objectavail[MAXOBJECTS]; extern ObjectStruct object[MAXOBJECTS]; extern BOOL InitObjFlag; -extern int numobjfiles; // weak +extern int numobjfiles; void InitObjectGFX(); void FreeObjectGFX(); @@ -41,7 +41,7 @@ void AddHookedBodies(int freq); void AddL4Goodies(); void AddLazStand(); void InitObjects(); -void SetMapObjects(unsigned char *pMap, int startx, int starty); +void SetMapObjects(BYTE *pMap, int startx, int starty); void DeleteObject_(int oi, int i); void SetupObject(int i, int x, int y, int ot); void SetObjMapRange(int i, int x1, int y1, int x2, int y2, int v); @@ -159,7 +159,7 @@ extern int byadd[8]; extern char *shrinestrs[NUM_SHRINETYPE]; extern char shrinemin[NUM_SHRINETYPE]; extern char shrinemax[NUM_SHRINETYPE]; -extern unsigned char shrineavail[NUM_SHRINETYPE]; +extern BYTE shrineavail[NUM_SHRINETYPE]; extern char *StoryBookName[9]; extern int StoryText[3][3]; diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 6efb74547..d5ebfd80e 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -97,7 +97,7 @@ void pfile_encode_hero(const PkPlayerStruct *pPack) mem_free_dbg(packed); } -BOOL pfile_open_archive(BOOL a1, DWORD save_num) +BOOL pfile_open_archive(BOOL update, DWORD save_num) { char FileName[MAX_PATH]; @@ -105,7 +105,7 @@ BOOL pfile_open_archive(BOOL a1, DWORD save_num) if (OpenMPQ(FileName, FALSE, save_num)) return TRUE; - if (a1 && gbMaxPlayers > 1) + if (update && gbMaxPlayers > 1) mpqapi_store_default_time(save_num); return FALSE; } @@ -209,13 +209,13 @@ void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSav heroinfo->vitality = p->_pVitality; heroinfo->gold = p->_pGold; heroinfo->hassaved = bHasSaveFile; - heroinfo->herorank = (unsigned char)p->pDiabloKillLevel; + heroinfo->herorank = p->pDiabloKillLevel; heroinfo->spawned = 0; } -unsigned char game_2_ui_class(const PlayerStruct *p) +BYTE game_2_ui_class(const PlayerStruct *p) { - unsigned char uiclass; + BYTE uiclass; if (p->_pClass == PC_WARRIOR) uiclass = UI_WARRIOR; else if (p->_pClass == PC_ROGUE) diff --git a/Source/pfile.h b/Source/pfile.h index 045a80671..f619748ec 100644 --- a/Source/pfile.h +++ b/Source/pfile.h @@ -2,21 +2,21 @@ #ifndef __PFILE_H__ #define __PFILE_H__ -extern BOOL gbValidSaveFile; // idb +extern BOOL gbValidSaveFile; void pfile_init_save_directory(); void pfile_check_available_space(char *pszDir); void pfile_write_hero(); DWORD pfile_get_save_num_from_name(const char *name); void pfile_encode_hero(const PkPlayerStruct *pPack); -BOOL pfile_open_archive(BOOL a1, DWORD save_num); +BOOL pfile_open_archive(BOOL update, DWORD save_num); void pfile_get_save_path(char *pszBuf, DWORD dwBufSize, DWORD save_num); void pfile_flush(BOOL is_single_player, DWORD save_num); BOOL pfile_create_player_description(char *dst, DWORD len); BOOL pfile_rename_hero(const char *name_1, const char *name_2); void pfile_flush_W(); void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile); -unsigned char game_2_ui_class(const PlayerStruct *p); +BYTE game_2_ui_class(const PlayerStruct *p); BOOL __stdcall pfile_ui_set_hero_infos(BOOL(__stdcall *ui_add_hero_info)(_uiheroinfo *)); char *GetSaveDirectory(char *dst, int dst_size, DWORD save_num); BOOL pfile_read_hero(HANDLE archive, PkPlayerStruct *pPack); diff --git a/Source/player.cpp b/Source/player.cpp index 940072efe..7b287148e 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -108,7 +108,7 @@ int ExpLvlsTbl[MAXCHARLEVEL] = { 1583495809 }; char *ClassStrTbl[3] = { "Warrior", "Rogue", "Sorceror" }; -BYTE fix[9] = { 0u, 0u, 3u, 3u, 3u, 6u, 6u, 6u, 8u }; /* PM_ChangeLightOff local type */ +BYTE fix[9] = { 0, 0, 3, 3, 3, 6, 6, 6, 8 }; /* PM_ChangeLightOff local type */ void SetPlayerGPtrs(BYTE *pData, BYTE **pAnim) { @@ -1026,7 +1026,7 @@ void PlrClrTrans(int x, int y) for (i = y - 1; i <= y + 1; i++) { for (j = x - 1; j <= x + 1; j++) { - TransList[dTransVal[j][i]] = 0; + TransList[dTransVal[j][i]] = FALSE; } } } @@ -1036,12 +1036,12 @@ void PlrDoTrans(int x, int y) int i, j; if (leveltype != DTYPE_CATHEDRAL && leveltype != DTYPE_CATACOMBS) { - TransList[1] = 1; + TransList[1] = TRUE; } else { for (i = y - 1; i <= y + 1; i++) { for (j = x - 1; j <= x + 1; j++) { if (!nSolidTable[dPiece[j][i]] && dTransVal[j][i]) { - TransList[dTransVal[j][i]] = 1; + TransList[dTransVal[j][i]] = TRUE; } } } diff --git a/Source/plrmsg.cpp b/Source/plrmsg.cpp index 40b5e4b02..37ec6c48a 100644 --- a/Source/plrmsg.cpp +++ b/Source/plrmsg.cpp @@ -2,7 +2,7 @@ DEVILUTION_BEGIN_NAMESPACE -static unsigned char plr_msg_slot; +static BYTE plr_msg_slot; _plrmsg plr_msgs[PMSG_COUNT]; const char text_color_from_player_num[MAX_PLRS + 1] = { COL_WHITE, COL_WHITE, COL_WHITE, COL_WHITE, COL_GOLD }; @@ -83,9 +83,9 @@ void InitPlrMsg() void DrawPlrMsg() { int i; - int x = 74; - int y = 230; - int width = 620; + DWORD x = 74; + DWORD y = 230; + DWORD width = 620; _plrmsg *pMsg; if (chrflag || questlog) { @@ -105,20 +105,20 @@ void DrawPlrMsg() } } -void PrintPlrMsg(unsigned int x, unsigned int y, unsigned int width, const char *str, unsigned char col) +void PrintPlrMsg(DWORD x, DWORD y, DWORD width, const char *str, BYTE col) { int line = 0; while (*str) { - unsigned char c; + BYTE c; int screen = PitchTbl[y] + x; const char *sstr = str; - unsigned int len = 0; + DWORD len = 0; const char *endstr = sstr; while (1) { if (*sstr) { - c = gbFontTransTbl[(unsigned char)*sstr++]; + c = gbFontTransTbl[(BYTE)*sstr++]; c = fontframe[c]; len += fontkern[c] + 1; if (!c) // allow wordwrap on blank glyph @@ -132,7 +132,7 @@ void PrintPlrMsg(unsigned int x, unsigned int y, unsigned int width, const char } while (str < endstr) { - c = gbFontTransTbl[(unsigned char)*str++]; + c = gbFontTransTbl[(BYTE)*str++]; c = fontframe[c]; if (c) CPrintString(screen, c, col); diff --git a/Source/plrmsg.h b/Source/plrmsg.h index 233ee80fe..10b78b48c 100644 --- a/Source/plrmsg.h +++ b/Source/plrmsg.h @@ -11,7 +11,7 @@ void SendPlrMsg(int pnum, const char *pszStr); void ClearPlrMsg(); void InitPlrMsg(); void DrawPlrMsg(); -void PrintPlrMsg(unsigned int x, unsigned int y, unsigned int width, const char *str, unsigned char just); +void PrintPlrMsg(DWORD x, DWORD y, DWORD width, const char *str, BYTE col); /* rdata */ diff --git a/Source/quests.cpp b/Source/quests.cpp index ab62e505f..03fa76c0c 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -664,18 +664,18 @@ void ResyncQuests() SpawnQuestItem(IDI_GLDNELIX, 0, 0, 5, 1); } if (setlevel && setlvlnum == 5) { - if (quests[QTYPE_VB]._qvar1 >= 4u) + if (quests[QTYPE_VB]._qvar1 >= 4) ObjChangeMapResync(1, 11, 20, 18); - if (quests[QTYPE_VB]._qvar1 >= 6u) + if (quests[QTYPE_VB]._qvar1 >= 6) ObjChangeMapResync(1, 18, 20, 24); - if (quests[QTYPE_VB]._qvar1 >= 7u) + if (quests[QTYPE_VB]._qvar1 >= 7) InitVPTriggers(); for (i = 0; i < nobjects; i++) SyncObjectAnim(objectactive[i]); } if (currlevel == quests[QTYPE_VB]._qlevel && !setlevel - && (quests[QTYPE_VB]._qvar2 == 1 || quests[QTYPE_VB]._qvar2 >= 3u) + && (quests[QTYPE_VB]._qvar2 == 1 || quests[QTYPE_VB]._qvar2 >= 3) && (quests[QTYPE_VB]._qactive == 2 || quests[QTYPE_VB]._qactive == 3)) { quests[QTYPE_VB]._qvar2 = 2; } @@ -718,14 +718,14 @@ void DrawQuestLog() { int y, i; - PrintQLString(0, 2, 1u, "Quest Log", 3); + PrintQLString(0, 2, TRUE, "Quest Log", 3); CelDecodeOnly(64, 511, pQLogCel, 1, 320); y = qtopline; for (i = 0; i < numqlines; i++) { - PrintQLString(0, y, 1, questlist[qlist[i]]._qlstr, 0); + PrintQLString(0, y, TRUE, questlist[qlist[i]]._qlstr, 0); y += 2; } - PrintQLString(0, 22, 1, "Close Quest Log", 0); + PrintQLString(0, 22, TRUE, "Close Quest Log", 0); ALLQUESTS = (ALLQUESTS & 7) + 1; } diff --git a/Source/render.cpp b/Source/render.cpp index db21fbaea..26e973508 100644 --- a/Source/render.cpp +++ b/Source/render.cpp @@ -5,13 +5,13 @@ DEVILUTION_BEGIN_NAMESPACE #include "_asm.cpp" int WorldBoolFlag = 0; -unsigned int gdwCurrentMask = 0; +DWORD gdwCurrentMask = 0; // char world_4B3264 = 0; -unsigned char *gpCelFrame = NULL; -unsigned int *gpDrawMask = NULL; +BYTE *gpCelFrame = NULL; +DWORD *gpDrawMask = NULL; // char world_4B326D[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -unsigned int RightMask[32] = { +DWORD RightMask[32] = { 0xEAAAAAAA, 0xF5555555, 0xFEAAAAAA, 0xFF555555, 0xFFEAAAAA, 0xFFF55555, @@ -30,7 +30,7 @@ unsigned int RightMask[32] = { 0xFFFFFFFF, 0xFFFFFFFF }; -unsigned int LeftMask[32] = { +DWORD LeftMask[32] = { 0xAAAAAAAB, 0x5555555F, 0xAAAAAABF, 0x555555FF, 0xAAAAABFF, 0x55555FFF, @@ -49,7 +49,7 @@ unsigned int LeftMask[32] = { 0xFFFFFFFF, 0xFFFFFFFF }; -unsigned int WallMask[32] = { +DWORD WallMask[32] = { 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, @@ -119,35 +119,32 @@ int WorldTbl17_2[17] = { 0, 32, 60, 88, 112, 136, 156, 176, 192, 208, 220, 232, #else void drawTopArchesUpperScreen(BYTE *pBuff) { - unsigned char *dst; // edi MAPDST - unsigned char *tbl; // ebx - unsigned char *src; // esi MAPDST - short cel_type_16; // ax MAPDST - signed int xx_32; // ebp MAPDST - signed int yy_32; // edx MAPDST - unsigned int width; // eax MAPDST - unsigned int chk_sh_and; // ecx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - unsigned int x_minus; // ecx MAPDST - unsigned int y_minus; // ecx MAPDST - signed int i; // edx MAPDST - signed int j; // ecx MAPDST + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + unsigned int width; + unsigned int chk_sh_and; + unsigned int n_draw_shift; + unsigned int x_minus; + unsigned int y_minus; + int xx_32, yy_32; + int i, j; - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; if (!(BYTE)light_table_index) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((level_cel_block >> 12) & 7) + 8; goto LABEL_11; } if ((BYTE)light_table_index != lightmax) { if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); switch (cel_type_16) { case 0: // upper (top transparent), with lighting i = 16; @@ -164,16 +161,16 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } while (i); break; case 1: // upper (top transparent), with lighting - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; xx_32 = 32; do { yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -181,7 +178,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } if (dst < gpBufEnd) return; - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { asm_trans_light_cel_0_2(width, tbl, &dst, &src); } else { asm_trans_light_cel_1_3(width, tbl, &dst, &src); @@ -238,7 +235,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -252,7 +249,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - yy_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -301,7 +298,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -324,9 +321,9 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } return; } - src = (unsigned char *)pSpeedCels + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); LABEL_11: switch (cel_type_16) { @@ -359,16 +356,16 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } while (i); break; case 9: // upper (top transparent), without lighting - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; yy_32 = 32; LABEL_251: xx_32 = 32; while (1) { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; xx_32 -= width; if (!xx_32) { @@ -383,7 +380,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) xx_32 -= width; if (dst < gpBufEnd) return; - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { chk_sh_and = width >> 1; if (!(width & 1)) goto LABEL_258; @@ -744,8 +741,8 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // upper (top transparent), black @@ -775,20 +772,20 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } while (i); break; case 1: // upper (top transparent), black - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; xx_32 = 32; while (1) { yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) != 0) + width = *src++; + if ((width & 0x80) != 0) break; yy_32 -= width; if (dst < gpBufEnd) return; src += width; - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { chk_sh_and = width >> 1; if (!(width & 1)) goto LABEL_378; @@ -837,7 +834,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff) if (!yy_32) goto LABEL_391; } - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; } while (yy_32); @@ -1143,28 +1140,26 @@ void drawTopArchesUpperScreen(BYTE *pBuff) } } -void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) +void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *pMask) { - unsigned char *dst; // edi MAPDST - unsigned char *src; // esi MAPDST - short cel_type_16; // ax MAPDST - int xx_32; // edx MAPDST - unsigned int left_shift; // edx MAPDST - int yy_32; // edx MAPDST - int width; // eax MAPDST - int and80_i; // ecx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - signed int i; // ecx MAPDST - unsigned char *tbl; + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + unsigned int left_shift; + unsigned int n_draw_shift; + int width; + int and80_i; + int i; + int xx_32, yy_32; - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; gpDrawMask = pMask; if (!(BYTE)light_table_index) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((level_cel_block >> 12) & 7) + 8; LABEL_12: switch (cel_type_16) { @@ -1195,10 +1190,10 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -1386,7 +1381,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) ++dst; --i; } while (i); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst -= (SCREEN_WIDTH + 160); --gpDrawMask; --yy_32; @@ -1400,9 +1395,9 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) } if ((BYTE)light_table_index != lightmax) { if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); switch (cel_type_16) { case 0: // upper (bottom transparent), with lighting xx_32 = 32; @@ -1422,10 +1417,10 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -1471,7 +1466,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) xx_32 = 30; while (dst >= gpBufEnd) { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -1480,7 +1475,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) if (dst < gpBufEnd) break; asm_cel_light_edge(32 - yy_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -1502,7 +1497,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) do { if (dst < gpBufEnd) break; - src += (unsigned char)src & 2; + src += (BYTE)src & 2; asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask); dst -= (SCREEN_WIDTH + 160); --gpDrawMask; @@ -1516,7 +1511,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) xx_32 = 30; while (dst >= gpBufEnd) { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -1526,7 +1521,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) if (dst < gpBufEnd) break; asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst -= (SCREEN_WIDTH + 160); --gpDrawMask; --yy_32; @@ -1538,15 +1533,15 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) } return; } - src = (unsigned char *)pSpeedCels + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); goto LABEL_12; } if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // upper (bottom transparent), black @@ -1575,10 +1570,10 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -1779,17 +1774,14 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask) void drawUpperScreen(BYTE *pBuff) { - unsigned char *dst; // edi MAPDST - unsigned char *tbl; // ebx - unsigned char *src; // esi MAPDST - short cel_type_16; // ax MAPDST - signed int xx_32; // ebp MAPDST - signed int yy_32; // edx MAPDST - unsigned int width; // eax MAPDST - unsigned int chk_sh_and; // ecx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - signed int i; // edx MAPDST - signed int j; // ecx MAPDST + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + unsigned int width; + unsigned int chk_sh_and; + unsigned int n_draw_shift; + int i, j; + int xx_32, yy_32; if (cel_transparency_active) { if (!arch_draw_type) { @@ -1809,13 +1801,13 @@ void drawUpperScreen(BYTE *pBuff) } } } - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; if (!(BYTE)light_table_index) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((level_cel_block >> 12) & 7) + 8; LABEL_22: switch (cel_type_16) { @@ -1842,9 +1834,9 @@ void drawUpperScreen(BYTE *pBuff) do { while (1) { width = *src++; - if ((width & 0x80u) == 0) + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -2041,9 +2033,9 @@ void drawUpperScreen(BYTE *pBuff) } if ((BYTE)light_table_index != lightmax) { if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned short)level_cel_block >> 12; + cel_type_16 = (WORD)level_cel_block >> 12; switch (cel_type_16) { case 0: // upper (solid), with lighting xx_32 = 32; @@ -2062,9 +2054,9 @@ void drawUpperScreen(BYTE *pBuff) do { while (1) { width = *src++; - if ((width & 0x80u) == 0) + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -2107,7 +2099,7 @@ void drawUpperScreen(BYTE *pBuff) xx_32 = 30; while (dst >= gpBufEnd) { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -2116,7 +2108,7 @@ void drawUpperScreen(BYTE *pBuff) if (dst < gpBufEnd) break; asm_cel_light_edge(32 - yy_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -2149,7 +2141,7 @@ void drawUpperScreen(BYTE *pBuff) xx_32 = 30; while (dst >= gpBufEnd) { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; if (xx_32 < 0) { @@ -2168,15 +2160,15 @@ void drawUpperScreen(BYTE *pBuff) } return; } - src = (unsigned char *)pSpeedCels + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned short)level_cel_block >> 12; + cel_type_16 = (WORD)level_cel_block >> 12; goto LABEL_22; } if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((unsigned int)level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // upper (solid), black @@ -2201,9 +2193,9 @@ void drawUpperScreen(BYTE *pBuff) do { while (1) { width = *src++; - if ((width & 0x80u) == 0) + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -2399,37 +2391,34 @@ void drawUpperScreen(BYTE *pBuff) void drawTopArchesLowerScreen(BYTE *pBuff) { - unsigned char *dst; // edi MAPDST - unsigned char *tbl; // ebx - unsigned char *src; // esi MAPDST - short cel_type_16; // ax MAPDST - signed int tile_42_45; // eax MAPDST - unsigned int world_tbl; // ecx MAPDST - unsigned int width; // eax MAPDST - unsigned int chk_sh_and; // ecx MAPDST - int xx_32; // edx MAPDST - unsigned int x_minus; // ecx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - int yy_32; // edx MAPDST - unsigned int y_minus; // ecx MAPDST - signed int i; // edx MAPDST - signed int j; // ecx MAPDST + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + unsigned int world_tbl; + unsigned int width; + unsigned int chk_sh_and; + unsigned int x_minus; + unsigned int n_draw_shift; + unsigned int y_minus; + int tile_42_45; + int xx_32, yy_32; + int i, j; - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; if (!(BYTE)light_table_index) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((level_cel_block >> 12) & 7) + 8; goto LABEL_11; } if ((BYTE)light_table_index == lightmax) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // lower (top transparent), black @@ -2465,16 +2454,16 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } while (i); break; case 1: // lower (top transparent), black - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; xx_32 = 32; LABEL_412: yy_32 = 32; while (1) { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) { @@ -2489,7 +2478,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff) yy_32 -= width; if (dst < gpBufEnd) { src += width; - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { chk_sh_and = width >> 1; if (!(width & 1)) goto LABEL_420; @@ -2870,9 +2859,9 @@ void drawTopArchesLowerScreen(BYTE *pBuff) return; } if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); switch (cel_type_16) { case 0: // lower (top transparent), with lighting i = 16; @@ -2895,16 +2884,16 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } while (i); break; case 1: // lower (top transparent), with lighting - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; xx_32 = 32; do { yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -2912,7 +2901,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } yy_32 -= width; if (dst < gpBufEnd) { - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { asm_trans_light_cel_0_2(width, tbl, &dst, &src); } else { asm_trans_light_cel_1_3(width, tbl, &dst, &src); @@ -3011,7 +3000,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - yy_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -3031,7 +3020,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -3128,7 +3117,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } else { asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src); } - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -3136,8 +3125,8 @@ void drawTopArchesLowerScreen(BYTE *pBuff) } return; } - src = (unsigned char *)pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; + cel_type_16 = (BYTE)(level_cel_block >> 12); LABEL_11: switch (cel_type_16) { case 8: // lower (top transparent), without lighting @@ -3175,18 +3164,18 @@ LABEL_11: } while (i); break; case 9: // lower (top transparent), without lighting - WorldBoolFlag = (unsigned char)pBuff & 1; + WorldBoolFlag = (BYTE)pBuff & 1; xx_32 = 32; while (1) { yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) != 0) + width = *src++; + if ((width & 0x80) != 0) break; yy_32 -= width; if (dst < gpBufEnd) { - if (((unsigned char)dst & 1) == WorldBoolFlag) { + if (((BYTE)dst & 1) == WorldBoolFlag) { chk_sh_and = width >> 1; if (!(width & 1)) goto LABEL_280; @@ -3244,7 +3233,7 @@ LABEL_11: if (!yy_32) goto LABEL_293; } - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; } while (yy_32); @@ -3636,31 +3625,29 @@ LABEL_11: } } -void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) +void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *pMask) { - unsigned char *dst; // edi MAPDST - short cel_type_16; // ax MAPDST - unsigned char *src; // esi MAPDST - int and80_i; // ecx MAPDST - signed int tile_42_45; // eax MAPDST - unsigned int world_tbl; // ecx MAPDST - int xx_32; // ecx MAPDST - int yy_32; // edx MAPDST - int width; // eax MAPDST - unsigned int left_shift; // edx MAPDST - signed int i; // edx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - unsigned char *tbl; + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + int and80_i; + unsigned int world_tbl; + unsigned int left_shift; + unsigned int n_draw_shift; + int tile_42_45; + int width; + int xx_32, yy_32; + int i; - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; gpDrawMask = pMask; if ((BYTE)light_table_index) { if ((BYTE)light_table_index == lightmax) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // lower (bottom transparent), black @@ -3692,8 +3679,8 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) != 0) + width = *src++; + if ((width & 0x80) != 0) break; yy_32 -= width; if (dst < gpBufEnd) { @@ -3715,7 +3702,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) if (!yy_32) goto LABEL_252; } - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -3918,9 +3905,9 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) return; } if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); switch (cel_type_16) { case 0: // lower (bottom transparent), with lighting yy_32 = 32; @@ -3943,8 +3930,8 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) != 0) + width = *src++; + if ((width & 0x80) != 0) break; yy_32 -= width; if (dst < gpBufEnd) { @@ -3956,7 +3943,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) if (!yy_32) goto LABEL_52; } - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -4029,7 +4016,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) do { asm_cel_light_edge(32 - yy_32, tbl, &dst, &src); /// BUGFIX: uncomment this line - // src += (unsigned char)src & 2; + // src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -4042,7 +4029,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) } do { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -4096,7 +4083,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) do { if (dst < gpBufEnd) { asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; } else { src += 32; dst += 32; @@ -4114,7 +4101,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) } do { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -4122,14 +4109,14 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) } return; } - src = (unsigned char *)pSpeedCels + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned char)(level_cel_block >> 12); + cel_type_16 = (BYTE)(level_cel_block >> 12); } else { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = ((level_cel_block >> 12) & 7) + 8; } switch (cel_type_16) { @@ -4163,8 +4150,8 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) != 0) + width = *src++; + if ((width & 0x80) != 0) break; yy_32 -= width; if (dst < gpBufEnd) { @@ -4186,7 +4173,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) if (!yy_32) goto LABEL_152; } - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; if (width & 0x1F) gdwCurrentMask <<= width & 0x1F; @@ -4396,7 +4383,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) ++dst; --i; } while (i); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; } else { src += 32; dst += 32; @@ -4432,19 +4419,16 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask) void drawLowerScreen(BYTE *pBuff) { - unsigned char *dst; // edi MAPDST - unsigned char *src; // esi MAPDST - unsigned char *tbl; // ebx - short cel_type_16; // ax MAPDST - int xx_32; // edx MAPDST - int yy_32; // ebp MAPDST - unsigned int chk_sh_and; // ecx MAPDST - signed int tile_42_45; // eax MAPDST - unsigned int world_tbl; // ecx MAPDST - unsigned int n_draw_shift; // ecx MAPDST - unsigned int width; // eax MAPDST - signed int i; // edx MAPDST - signed int j; // ecx MAPDST + BYTE *dst, *src; + BYTE *tbl; + short cel_type_16; + unsigned int chk_sh_and; + unsigned int world_tbl; + unsigned int n_draw_shift; + unsigned int width; + int tile_42_45; + int xx_32, yy_32; + int i, j; if (cel_transparency_active) { if (!arch_draw_type) { @@ -4464,14 +4448,14 @@ void drawLowerScreen(BYTE *pBuff) } } } - gpCelFrame = (unsigned char *)SpeedFrameTbl; + gpCelFrame = (BYTE *)SpeedFrameTbl; dst = pBuff; if ((BYTE)light_table_index) { if ((BYTE)light_table_index == lightmax) { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (level_cel_block >> 12) & 7; switch (cel_type_16) { case 0: // lower (solid), black @@ -4498,10 +4482,10 @@ void drawLowerScreen(BYTE *pBuff) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -4720,9 +4704,9 @@ void drawLowerScreen(BYTE *pBuff) return; } if (!(level_cel_block & 0x8000)) { - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); tbl = &pLightTbl[256 * light_table_index]; - cel_type_16 = (unsigned short)level_cel_block >> 12; + cel_type_16 = (WORD)level_cel_block >> 12; switch (cel_type_16) { case 0: // lower (solid), with lighting xx_32 = 32; @@ -4742,8 +4726,8 @@ void drawLowerScreen(BYTE *pBuff) do { yy_32 = 32; do { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) { + width = *src++; + if ((width & 0x80) == 0) { yy_32 -= width; if (dst < gpBufEnd) { asm_cel_light_edge(width, tbl, &dst, &src); @@ -4752,7 +4736,7 @@ void drawLowerScreen(BYTE *pBuff) dst += width; } } else { - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; } @@ -4821,7 +4805,7 @@ void drawLowerScreen(BYTE *pBuff) } do { asm_cel_light_edge(32 - yy_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[yy_32 - (SCREEN_WIDTH + 160)]; yy_32 += 2; } while (yy_32 != 32); @@ -4834,7 +4818,7 @@ void drawLowerScreen(BYTE *pBuff) } do { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -4901,7 +4885,7 @@ void drawLowerScreen(BYTE *pBuff) } do { asm_cel_light_edge(32 - xx_32, tbl, &dst, &src); - src += (unsigned char)src & 2; + src += (BYTE)src & 2; dst = &dst[xx_32 - (SCREEN_WIDTH + 160)]; xx_32 -= 2; } while (xx_32 >= 0); @@ -4909,14 +4893,14 @@ void drawLowerScreen(BYTE *pBuff) } return; } - src = (unsigned char *)pSpeedCels + src = pSpeedCels + *(DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; - cel_type_16 = (unsigned short)level_cel_block >> 12; + cel_type_16 = (WORD)level_cel_block >> 12; } else { if (level_cel_block & 0x8000) level_cel_block = *(DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] - + (unsigned short)(level_cel_block & 0xF000); - src = (unsigned char *)pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); + + (WORD)(level_cel_block & 0xF000); + src = pDungeonCels + *((DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); cel_type_16 = (((unsigned int)level_cel_block >> 12) & 7) + 8; } switch (cel_type_16) { @@ -4945,10 +4929,10 @@ void drawLowerScreen(BYTE *pBuff) yy_32 = 32; do { while (1) { - width = (unsigned char)*src++; - if ((width & 0x80u) == 0) + width = *src++; + if ((width & 0x80) == 0) break; - _LOBYTE(width) = -(char)width; + width = -(char)width; dst += width; yy_32 -= width; if (!yy_32) @@ -5212,41 +5196,41 @@ void drawLowerScreen(BYTE *pBuff) void world_draw_black_tile(BYTE *pBuff) { - unsigned char *dst; // edi MAPDST - signed int xx_32; // edx - signed int i; // ebx MAPDST - signed int j; // ecx MAPDST - signed int yy_32; // edx + BYTE *dst; + int i, j; + int xx, yy; dst = pBuff; - xx_32 = 30; - for (i = 1;; ++i) { - dst += xx_32; + + xx = 30; + for (i = 1;; i++) { + dst += xx; j = i; do { *(DWORD *)dst = 0; dst += 4; - --j; + j--; } while (j); - dst = &dst[xx_32 - 832]; - if (!xx_32) + dst = &dst[xx - 832]; + if (!xx) break; - xx_32 -= 2; + xx -= 2; } - yy_32 = 2; + + yy = 2; i = 15; do { - dst += yy_32; + dst += yy; j = i; do { *(DWORD *)dst = 0; dst += 4; - --j; + j--; } while (j); - dst = &dst[yy_32 - 832]; - --i; - yy_32 += 2; - } while (yy_32 != 32); + dst = &dst[yy - 832]; + i--; + yy += 2; + } while (yy != 32); } #endif diff --git a/Source/render.h b/Source/render.h index 6c5aec946..f872fb7aa 100644 --- a/Source/render.h +++ b/Source/render.h @@ -3,24 +3,24 @@ #define __RENDER_H__ void drawTopArchesUpperScreen(BYTE *pBuff); -void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned int *pMask); +void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *pMask); void drawUpperScreen(BYTE *pBuff); void drawTopArchesLowerScreen(BYTE *pBuff); -void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned int *pMask); +void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *pMask); void drawLowerScreen(BYTE *pBuff); void world_draw_black_tile(BYTE *pBuff); /* rdata */ extern int WorldBoolFlag; -extern unsigned int gdwCurrentMask; +extern DWORD gdwCurrentMask; // extern char world_4B3264; -extern unsigned char *gpCelFrame; -extern unsigned int *gpDrawMask; +extern BYTE *gpCelFrame; +extern DWORD *gpDrawMask; // extern char world_4B326D[16]; -extern unsigned int RightMask[32]; -extern unsigned int LeftMask[32]; -extern unsigned int WallMask[32]; +extern DWORD RightMask[32]; +extern DWORD LeftMask[32]; +extern DWORD WallMask[32]; extern int WorldTbl3x16[48]; extern int WorldTbl17_1[17]; extern int WorldTbl17_2[17]; diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index f3369a6eb..7c5954b09 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -707,7 +707,7 @@ void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, negMon = dMonster[sx][sy - 1]; if (visiondebug && bFlag & BFLAG_LIT) { - Cel2DecodeHdrOnly(pBuff, (BYTE *)pSquareCel, 1, 64, 0, 8); + Cel2DecodeHdrOnly(pBuff, pSquareCel, 1, 64, 0, 8); } if (MissilePreFlag && bFlag & BFLAG_MISSILE) { DrawClippedMissile(sx, sy, dx, dy, 0, 8, 1); @@ -889,7 +889,7 @@ void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, } } if (bArch != 0) { - cel_transparency_active = (BYTE)TransList[bMap]; + cel_transparency_active = TransList[bMap]; Cel2DecodeLightTrans(pBuff, pSpecialCels, bArch, 64, 0, 8); } } @@ -1173,7 +1173,7 @@ void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int skipChunks negMon = dMonster[sx][sy - 1]; if (visiondebug && bFlag & BFLAG_LIT) { - Cel2DecodeHdrOnly(pBuff, (BYTE *)pSquareCel, 1, 64, CelSkip, 8); + Cel2DecodeHdrOnly(pBuff, pSquareCel, 1, 64, CelSkip, 8); } if (MissilePreFlag && bFlag & BFLAG_MISSILE) { DrawClippedMissile(sx, sy, dx, dy, CelSkip, 8, 1); @@ -1355,12 +1355,12 @@ void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int skipChunks } } if (bArch != 0) { - cel_transparency_active = (BYTE)TransList[bMap]; + cel_transparency_active = TransList[bMap]; Cel2DecodeLightTrans(pBuff, pSpecialCels, bArch, 64, CelSkip, 8); } } -void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int skipChunks, signed int CelSkip, int sx, int sy) +void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int skipChunks, int CelSkip, int sx, int sy) { int lti_old, cta_old, lpi_old; BYTE *dst; @@ -1578,7 +1578,7 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int capChunks, int CelCap, int dx, int dy, int eflag) { - int px, py, nCel, nMon, negMon, p; + int px, py, nCel, nMon, negMon, p, tx, ty; char bFlag, bDead, bObj, bItem, bPlr, bArch, bMap, negPlr, dd; DeadStruct *pDeadGuy; ItemStruct *pItem; @@ -1603,11 +1603,15 @@ void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int capChunks, int CelCa negMon = dMonster[sx][sy - 1]; if (visiondebug && bFlag & BFLAG_LIT) { - CelDecodeHdrOnly(pBuff, (BYTE *)pSquareCel, 1, 64, 0, CelCap); + CelDecodeHdrOnly(pBuff, pSquareCel, 1, 64, 0, CelCap); } + tx = dx - 96; + ty = dy - 16; + if (MissilePreFlag && bFlag & BFLAG_MISSILE) { DrawMissile(sx, sy, dx, dy, 0, CelCap, 1); } + if (light_table_index < lightmax) { if (bDead != 0) { pDeadGuy = &dead[(bDead & 0x1F) - 1]; @@ -1666,7 +1670,7 @@ void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int capChunks, int CelCa DrawPlayer(p, sx, sy - 1, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, 0, CelCap); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, capChunks, CelCap, dx - 96, dy - 16); + scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, capChunks, CelCap, tx, ty); } scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, capChunks, CelCap, dx - 64, dy); } @@ -1698,10 +1702,7 @@ void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int capChunks, int CelCa } } if (bFlag & BFLAG_DEAD_PLAYER) { - if (light_table_index) - DrawDeadPlayer(sx, sy, dx, dy, 0, CelCap, 0); - else - DrawDeadPlayer(sx, sy, dx, dy, 0, CelCap, 0); + DrawDeadPlayer(sx, sy, dx, dy, 0, CelCap, 0); } if (bPlr > 0) { p = bPlr - 1; @@ -1774,7 +1775,7 @@ void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int capChunks, int CelCa } } if (bArch != 0) { - cel_transparency_active = (BYTE)TransList[bMap]; + cel_transparency_active = TransList[bMap]; CelDecodeHdrLightTrans(pBuff, pSpecialCels, bArch, 64, 0, CelCap); } } @@ -2323,14 +2324,14 @@ void scrollrt_draw_cursor_item() if (!plr[myplr].HoldItem._iStatFlag) { col = PAL16_RED + 5; } - CelDrawHdrClrHL(col, mx + SCREEN_X, my + cursH + SCREEN_Y - 1, (BYTE *)pCursCels, pcurs, cursW, 0, 8); + CelDrawHdrClrHL(col, mx + SCREEN_X, my + cursH + SCREEN_Y - 1, pCursCels, pcurs, cursW, 0, 8); if (col != PAL16_RED + 5) { - Cel2DrawHdrOnly(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, (BYTE *)pCursCels, pcurs, cursW, 0, 8); + Cel2DrawHdrOnly(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, pCursCels, pcurs, cursW, 0, 8); } else { - Cel2DrawHdrLightRed(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, (BYTE *)pCursCels, pcurs, cursW, 0, 8, 1); + Cel2DrawHdrLightRed(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, pCursCels, pcurs, cursW, 0, 8, 1); } } else { - Cel2DrawHdrOnly(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, (BYTE *)pCursCels, pcurs, cursW, 0, 8); + Cel2DrawHdrOnly(mx + SCREEN_X, my + cursH + SCREEN_Y - 1, pCursCels, pcurs, cursW, 0, 8); } } diff --git a/Source/scrollrt.h b/Source/scrollrt.h index 3510660c3..982e7e486 100644 --- a/Source/scrollrt.h +++ b/Source/scrollrt.h @@ -8,7 +8,7 @@ extern BYTE *gpBufEnd; extern DWORD level_cel_block; extern char arch_draw_type; extern DDSURFACEDESC DDS_desc; -extern int cel_transparency_active; // weak +extern int cel_transparency_active; extern int level_piece_id; extern void (*DrawPlrProc)(int, int, int, int, int, BYTE *, int, int, int, int); extern int draw_monster_num; diff --git a/Source/setmaps.cpp b/Source/setmaps.cpp index 1a31bc1f9..083ece322 100644 --- a/Source/setmaps.cpp +++ b/Source/setmaps.cpp @@ -3,17 +3,17 @@ DEVILUTION_BEGIN_NAMESPACE // BUGFIX: constant data should be const -unsigned char SkelKingTrans1[8] = { +BYTE SkelKingTrans1[8] = { 19, 47, 26, 55, 26, 49, 30, 53 }; -unsigned char SkelKingTrans2[8] = { +BYTE SkelKingTrans2[8] = { 33, 19, 47, 29, 37, 29, 43, 39 }; -unsigned char SkelKingTrans3[20] = { +BYTE SkelKingTrans3[20] = { 27, 53, 35, 61, 27, 35, 34, 42, 45, 35, 53, 43, @@ -21,7 +21,7 @@ unsigned char SkelKingTrans3[20] = { 31, 39, 49, 57 }; -unsigned char SkelKingTrans4[28] = { +BYTE SkelKingTrans4[28] = { 49, 45, 58, 51, 57, 31, 62, 37, 63, 31, 69, 40, @@ -31,7 +31,7 @@ unsigned char SkelKingTrans4[28] = { 79, 43, 89, 53 }; -unsigned char SkelChamTrans1[20] = { +BYTE SkelChamTrans1[20] = { 43, 19, 50, 26, 51, 19, 59, 26, 35, 27, 42, 34, @@ -39,12 +39,12 @@ unsigned char SkelChamTrans1[20] = { 50, 27, 59, 34 }; -unsigned char SkelChamTrans2[8] = { +BYTE SkelChamTrans2[8] = { 19, 31, 34, 47, 34, 35, 42, 42 }; -unsigned char SkelChamTrans3[36] = { +BYTE SkelChamTrans3[36] = { 43, 35, 50, 42, 51, 35, 62, 42, 63, 31, 66, 46, diff --git a/Source/setmaps.h b/Source/setmaps.h index 8b86f3048..e5a3a0338 100644 --- a/Source/setmaps.h +++ b/Source/setmaps.h @@ -10,13 +10,13 @@ void DRLG_SetMapTrans(char *sFileName); void LoadSetMap(); /* rdata */ -extern unsigned char SkelKingTrans1[8]; -extern unsigned char SkelKingTrans2[8]; -extern unsigned char SkelKingTrans3[20]; -extern unsigned char SkelKingTrans4[28]; -extern unsigned char SkelChamTrans1[20]; -extern unsigned char SkelChamTrans2[8]; -extern unsigned char SkelChamTrans3[36]; +extern BYTE SkelKingTrans1[8]; +extern BYTE SkelKingTrans2[8]; +extern BYTE SkelKingTrans3[20]; +extern BYTE SkelKingTrans4[28]; +extern BYTE SkelChamTrans1[20]; +extern BYTE SkelChamTrans2[8]; +extern BYTE SkelChamTrans3[36]; extern char *quest_level_names[]; #endif /* __SETMAPS_H__ */ diff --git a/Source/sound.cpp b/Source/sound.cpp index efcf0008a..b7d06f5c0 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -14,9 +14,9 @@ LPDIRECTSOUNDBUFFER sglpDSB; /* data */ -BYTE gbMusicOn = TRUE; -BYTE gbSoundOn = TRUE; -BYTE gbDupSounds = TRUE; +BOOLEAN gbMusicOn = TRUE; +BOOLEAN gbSoundOn = TRUE; +BOOLEAN gbDupSounds = TRUE; int sgnMusicTrack = 6; char *sgszMusicTracks[NUM_MUSIC] = { "Music\\DTowne.wav", diff --git a/Source/sound.h b/Source/sound.h index 831001b81..f584f4e76 100644 --- a/Source/sound.h +++ b/Source/sound.h @@ -31,9 +31,9 @@ int sound_get_or_set_sound_volume(int volume); /* data */ -extern BYTE gbMusicOn; -extern BYTE gbSoundOn; -extern BYTE gbDupSounds; +extern BOOLEAN gbMusicOn; +extern BOOLEAN gbSoundOn; +extern BOOLEAN gbDupSounds; extern char unk_volume[4][2]; #endif /* __SOUND_H__ */ diff --git a/Source/stores.cpp b/Source/stores.cpp index aea43651e..708cc2124 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -8,7 +8,7 @@ int stextlhold; ItemStruct boyitem; int stextshold; ItemStruct premiumitem[6]; -void *pSTextBoxCels; +BYTE *pSTextBoxCels; int premiumlevel; int talker; STextStruct stext[24]; @@ -23,7 +23,7 @@ int numpremium; ItemStruct healitem[20]; ItemStruct golditem; char storehidx[48]; -void *pSTextSlidCels; +BYTE *pSTextSlidCels; int stextvhold; int stextsel; char stextscrldbtn; @@ -132,7 +132,7 @@ void FreeStoreMem() void DrawSTextBack() { - CelDecodeOnly(408, 487, (BYTE *)pSTextBoxCels, 1, 271); + CelDecodeOnly(408, 487, pSTextBoxCels, 1, 271); #define TRANS_RECT_X 347 #define TRANS_RECT_Y 28 @@ -249,16 +249,16 @@ void DrawSArrows(int y1, int y2) yd1 = SStringY[y1] + 204; yd2 = SStringY[y2] + 204; if (stextscrlubtn != -1) - CelDecodeOnly(665, yd1, (BYTE *)pSTextSlidCels, 12, 12); + CelDecodeOnly(665, yd1, pSTextSlidCels, 12, 12); else - CelDecodeOnly(665, yd1, (BYTE *)pSTextSlidCels, 10, 12); + CelDecodeOnly(665, yd1, pSTextSlidCels, 10, 12); if (stextscrldbtn != -1) - CelDecodeOnly(665, yd2, (BYTE *)pSTextSlidCels, 11, 12); + CelDecodeOnly(665, yd2, pSTextSlidCels, 11, 12); else - CelDecodeOnly(665, yd2, (BYTE *)pSTextSlidCels, 9, 12); + CelDecodeOnly(665, yd2, pSTextSlidCels, 9, 12); yd1 += 12; for (yd3 = yd1; yd3 < yd2; yd3 += 12) { - CelDecodeOnly(665, yd3, (BYTE *)pSTextSlidCels, 14, 12); + CelDecodeOnly(665, yd3, pSTextSlidCels, 14, 12); } if (stextsel == 22) yd3 = stextlhold; @@ -268,7 +268,7 @@ void DrawSArrows(int y1, int y2) yd3 = 1000 * (stextsval + ((yd3 - stextup) >> 2)) / (storenumh - 1) * (SStringY[y2] - SStringY[y1] - 24) / 1000; else yd3 = 0; - CelDecodeOnly(665, SStringY[y1 + 1] + 204 + yd3, (BYTE *)pSTextSlidCels, 13, 12); + CelDecodeOnly(665, SStringY[y1 + 1] + 204 + yd3, pSTextSlidCels, 13, 12); } void DrawSTextHelp() @@ -1434,9 +1434,9 @@ void StartStore(char s) int i; for (t = s;; t = STORE_SMITH) { - sbookflag = 0; + sbookflag = FALSE; invflag = 0; - chrflag = 0; + chrflag = FALSE; questlog = FALSE; dropGoldFlag = FALSE; ClearSText(0, 24); diff --git a/Source/stores.h b/Source/stores.h index 496e989fe..5fcac1297 100644 --- a/Source/stores.h +++ b/Source/stores.h @@ -8,7 +8,7 @@ extern int stextlhold; extern ItemStruct boyitem; extern int stextshold; extern ItemStruct premiumitem[6]; -extern void *pSTextBoxCels; +extern BYTE *pSTextBoxCels; extern int premiumlevel; extern int talker; extern STextStruct stext[24]; @@ -23,7 +23,7 @@ extern int numpremium; extern ItemStruct healitem[20]; extern ItemStruct golditem; extern char storehidx[48]; -extern void *pSTextSlidCels; +extern BYTE *pSTextSlidCels; extern int stextvhold; extern int stextsel; extern char stextscrldbtn; diff --git a/Source/textdat.cpp b/Source/textdat.cpp index f79e86c3f..2c44b4856 100644 --- a/Source/textdat.cpp +++ b/Source/textdat.cpp @@ -508,6 +508,6 @@ const TextDataStruct alltext[259] = { { "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 } }; -const int gdwAllTextEntries = 259; /* unused */ +const DWORD gdwAllTextEntries = 259; /* unused */ DEVILUTION_END_NAMESPACE diff --git a/Source/textdat.h b/Source/textdat.h index 3b0a695c0..96445a648 100644 --- a/Source/textdat.h +++ b/Source/textdat.h @@ -3,6 +3,6 @@ #define __TEXTDAT_H__ extern const TextDataStruct alltext[259]; -extern const int gdwAllTextEntries; +extern const DWORD gdwAllTextEntries; #endif /* __TEXTDAT_H__ */ diff --git a/Source/towners.cpp b/Source/towners.cpp index 10e68170d..194cde923 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -2,12 +2,12 @@ DEVILUTION_BEGIN_NAMESPACE -int storeflag; // weak +BOOL storeflag; int sgnCowMsg; -int numtowners; // idb +int numtowners; DWORD sgdwCowClicks; -int bannerflag; // weak // unused 0x6AAC28 -int boyloadflag; // weak +BOOL bannerflag; // unused 0x6AAC28 +BOOL boyloadflag; BYTE *pCowCels; TownerStruct towner[16]; @@ -212,7 +212,7 @@ void InitBarOwner() { int i; - bannerflag = 0; // unused + bannerflag = FALSE; // unused InitTownerInfo(numtowners, 96, 1, TOWN_TAVERN, 55, 62, 3, 10); InitQstSnds(numtowners); towner[numtowners]._tNData = LoadFileInMem("Towners\\TwnF\\TwnFN.CEL", NULL); @@ -224,7 +224,6 @@ void InitBarOwner() strcpy(towner[numtowners]._tName, "Ogden the Tavern owner"); numtowners++; } -// 6AAC28: using guessed type int bannerflag; void InitTownDead() { @@ -278,7 +277,7 @@ void InitBoy() { int i; - boyloadflag = 1; + boyloadflag = TRUE; InitTownerInfo(numtowners, 96, 1, TOWN_PEGBOY, 11, 53, -1, 10); InitQstSnds(numtowners); towner[numtowners]._tNData = LoadFileInMem("Towners\\TownBoy\\PegKid1.CEL", NULL); @@ -290,7 +289,6 @@ void InitBoy() strcpy(towner[numtowners]._tName, "Wirt the Peg-legged boy"); numtowners++; } -// 6AAC2C: using guessed type int boyloadflag; void InitHealer() { @@ -373,12 +371,11 @@ void InitCows() numtowners++; } } -// 6AAC2C: using guessed type int boyloadflag; void InitTowners() { numtowners = 0; - boyloadflag = 0; + boyloadflag = FALSE; InitSmith(); InitHealer(); if (quests[QTYPE_BUTCH]._qactive && quests[QTYPE_BUTCH]._qactive != 3) @@ -391,7 +388,6 @@ void InitTowners() InitBoy(); InitCows(); } -// 6AAC2C: using guessed type int boyloadflag; void FreeTownerGFX() { @@ -425,7 +421,6 @@ void TownCtrlMsg(int i) } } } -// 646D00: using guessed type char qtextflag; void TownBlackSmith() { @@ -592,10 +587,9 @@ void TownerTalk(int first, int t) { sgdwCowClicks = 0; sgnCowMsg = 0; - storeflag = 1; + storeflag = TRUE; InitQTextMsg(first); } -// 6AAC18: using guessed type int storeflag; void TalkToTowner(int p, int t) { @@ -940,9 +934,6 @@ void TalkToTowner(int p, int t) CowSFX(p); } } -// 646D00: using guessed type char qtextflag; -// 679660: using guessed type char gbMaxPlayers; -// 6AAC18: using guessed type int storeflag; void CowSFX(int pnum) { diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 779a61475..536b25af8 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -6,7 +6,7 @@ BOOL townwarps[3]; BOOL trigflag; int numtrigs; TriggerStruct trigs[MAXTRIGGERS]; -int TWarpFrom; // weak +int TWarpFrom; int TownDownList[11] = { 716, 715, 719, 720, 721, 723, 724, 725, 726, 727, -1 }; int TownWarp1List[13] = { @@ -152,7 +152,6 @@ void InitTownTriggers() trigflag = FALSE; } -// 679660: using guessed type char gbMaxPlayers; void InitL1Triggers() { @@ -778,7 +777,5 @@ void CheckTriggers() } } } -// 679660: using guessed type char gbMaxPlayers; -// 6ABB30: using guessed type int TWarpFrom; DEVILUTION_END_NAMESPACE diff --git a/Source/trigs.h b/Source/trigs.h index 7fe07eac5..fe7243bbd 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -6,7 +6,7 @@ extern BOOL townwarps[3]; extern BOOL trigflag; extern int numtrigs; extern TriggerStruct trigs[MAXTRIGGERS]; -extern int TWarpFrom; // weak +extern int TWarpFrom; void InitNoTriggers(); void InitTownTriggers(); diff --git a/defs.h b/defs.h index aa706b16f..85faa6494 100644 --- a/defs.h +++ b/defs.h @@ -5,8 +5,8 @@ #define LIGHTSIZE 6912 // 27 * 256 -#define GMENU_SLIDER (DWORD)1 << 30 -#define GMENU_ENABLED (DWORD)1 << 31 +#define GMENU_SLIDER 0x40000000 +#define GMENU_ENABLED 0x80000000 // must be unsigned to generate unsigned comparisons with pnum #define MAX_PLRS 4 @@ -151,15 +151,6 @@ #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) #endif -///////////////////////////////////////////////////////////////////////// -/* temporary stuff from the decompiler */ -/* remove all the garbage below in the future */ -///////////////////////////////////////////////////////////////////////// -#ifndef IDA_GARBAGE -#define IDA_GARBAGE -#define _LOBYTE(x) (*((BYTE*)&(x))) -#endif /* IDA_GARBAGE */ - // Typedef for the function pointer typedef void (*_PVFV)(void); diff --git a/structs.h b/structs.h index 85f09431a..90e93a5b3 100644 --- a/structs.h +++ b/structs.h @@ -1216,26 +1216,26 @@ typedef struct DeadStruct { typedef struct _gamedata { int dwSeed; - unsigned char bDiff; + BYTE bDiff; } _gamedata; typedef struct _uidefaultstats { - unsigned short strength; - unsigned short magic; - unsigned short dexterity; - unsigned short vitality; + WORD strength; + WORD magic; + WORD dexterity; + WORD vitality; } _uidefaultstats; typedef struct _uiheroinfo { struct _uiheroinfo *next; char name[16]; - unsigned short level; - unsigned char heroclass; - unsigned char herorank; - unsigned short strength; - unsigned short magic; - unsigned short dexterity; - unsigned short vitality; + WORD level; + BYTE heroclass; + BYTE herorank; + WORD strength; + WORD magic; + WORD dexterity; + WORD vitality; int gold; int hassaved; int spawned; diff --git a/types.h b/types.h index 85f713f7e..c52de93d6 100644 --- a/types.h +++ b/types.h @@ -65,7 +65,9 @@ DEVILUTION_BEGIN_NAMESPACE #endif // If defined, use copy protection [Default -> Defined] -//#define COPYPROT +#ifndef _DEBUG +#define COPYPROT +#endif // If defined, don't reload for debuggers [Default -> Undefined] // Note that with patch 1.03 the command line was hosed, this is required to pass arguments to the game