From 5b483946893fc647e927469e76ce4793d09054a2 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 15 Oct 2020 01:40:40 +0200 Subject: [PATCH 01/23] WIP CheckInvPaste --- Source/inv.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Source/inv.cpp b/Source/inv.cpp index 287914433..8bfb5c637 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1094,7 +1094,14 @@ void CheckInvPaste(int pnum, int mx, int my) if (plr[pnum].HoldItem._iLoc == il) done = TRUE; if (il == ILOC_ONEHAND && plr[pnum].HoldItem._iLoc == ILOC_TWOHAND) { - il = ILOC_TWOHAND; +#ifdef HELLFIRE + if (plr[pnum]._pClass == PC_BARBARIAN + && (plr[pnum].HoldItem._itype == ITYPE_SWORD || plr[pnum].HoldItem._itype == ITYPE_MACE) + ) + il = ILOC_ONEHAND; + else +#endif + il = ILOC_TWOHAND; done = TRUE; } if (plr[pnum].HoldItem._iLoc == ILOC_UNEQUIPABLE && il == ILOC_BELT) { @@ -1170,6 +1177,16 @@ void CheckInvPaste(int pnum, int mx, int my) PlaySFX(PS_ROGUE13); else if (plr[pnum]._pClass == PC_SORCERER) PlaySFX(PS_MAGE13); +#endif +#ifdef HELLFIRE + else if (plr[pnum]._pClass == PC_MONK) + PlaySFX(PS_MONK13); +#ifndef SPAWN + else if (plr[pnum]._pClass == PC_BARD) + PlaySFX(PS_ROGUE13); +#endif + else if (plr[pnum]._pClass == PC_BARBARIAN) + PlaySFX(PS_MAGE13); #endif } From 3b04a4d6d9d529cb0ead3f53e60df5cac2ae244c Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 02:03:33 +0100 Subject: [PATCH 02/23] [hellfire] SpawnPremium min diff --- Source/items.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/Source/items.cpp b/Source/items.cpp index 96fc642fa..26e1fbe17 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -303,7 +303,29 @@ char *off_4A5AC4 = "SItem"; /** Specifies the current Y-coordinate used for validation of items on ground. */ int idoppely = 16; /** Maps from Griswold premium item number to a quality level delta as added to the base quality level. */ -int premiumlvladd[6] = { -1, -1, 0, 0, 1, 2 }; +int premiumlvladd[SMITH_PREMIUM_ITEMS] = { + -1, + -1, +#ifdef HELLFIRE + -1, +#endif + 0, + 0, +#ifdef HELLFIRE + 0, + 0, + 1, + 1, + 1, +#endif + 1, + 2, +#ifdef HELLFIRE + 2, + 3, + 3, +#endif +}; #ifdef HELLFIRE int items_4231CA(int i) @@ -4929,7 +4951,11 @@ int RndPremiumItem(int minlvl, int maxlvl) return ril[random_(50, ri)] + 1; } +#ifdef HELLFIRE +static void SpawnOnePremium(int i, int plvl, int myplr, bool noSpells) +#else static void SpawnOnePremium(int i, int plvl) +#endif { int itype; ItemStruct holditem; @@ -4971,18 +4997,40 @@ void SpawnPremium(int lvl) if (numpremium < SMITH_PREMIUM_ITEMS) { for (i = 0; i < SMITH_PREMIUM_ITEMS; i++) { if (premiumitem[i]._itype == ITYPE_NONE) +#ifdef HELLFIRE + SpawnOnePremium(i, premiumlevel + premiumlvladd[i], pnum, FALSE); +#else SpawnOnePremium(i, premiumlevel + premiumlvladd[i]); +#endif } numpremium = SMITH_PREMIUM_ITEMS; } while (premiumlevel < lvl) { premiumlevel++; +#ifdef HELLFIRE + premiumitem[0] = premiumitem[3]; + premiumitem[1] = premiumitem[4]; + premiumitem[2] = premiumitem[5]; + premiumitem[3] = premiumitem[6]; + premiumitem[4] = premiumitem[7]; + premiumitem[5] = premiumitem[8]; + premiumitem[6] = premiumitem[9]; + premiumitem[7] = premiumitem[10]; + premiumitem[8] = premiumitem[11]; + premiumitem[9] = premiumitem[12]; + SpawnOnePremium(10, premiumlevel + premiumlvladd[10], pnum, FALSE); + premiumitem[11] = premiumitem[13]; + SpawnOnePremium(12, premiumlevel + premiumlvladd[12], pnum, FALSE); + premiumitem[13] = premiumitem[14]; + SpawnOnePremium(14, premiumlevel + premiumlvladd[14], pnum, FALSE); +#else premiumitem[0] = premiumitem[2]; premiumitem[1] = premiumitem[3]; premiumitem[2] = premiumitem[4]; SpawnOnePremium(3, premiumlevel + premiumlvladd[3]); premiumitem[4] = premiumitem[5]; SpawnOnePremium(5, premiumlevel + premiumlvladd[5]); +#endif } } From f7290182fd42b19b26db885d19b2dbb2bc7db992 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:24:05 +0100 Subject: [PATCH 03/23] Reorder player.cpp --- Source/player.cpp | 324 +++++++++++++++++++++++----------------------- Source/player.h | 62 --------- 2 files changed, 162 insertions(+), 224 deletions(-) diff --git a/Source/player.cpp b/Source/player.cpp index 3b692e990..c5671e8ea 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -383,6 +383,54 @@ void InitPlayerGFX(int pnum) } } +static DWORD GetPlrGFXSize(const char *szCel) +{ + DWORD c; + const char *a, *w; + DWORD dwSize, dwMaxSize; + HANDLE hsFile; + char pszName[256]; + char Type[16]; + + dwMaxSize = 0; + + for (c = 0; c < NUM_CLASSES; c++) { +#ifdef SPAWN + if (c != 0) + continue; +#endif + for (a = &ArmourChar[0]; *a; a++) { +#ifdef SPAWN + if (a != &ArmourChar[0]) + break; +#endif + for (w = &WepChar[0]; *w; w++) { // BUGFIX loads non-existing animagions; DT is only for N, BT is only for U, D & H +#ifdef HELLFIRE + if ((c == PC_BARD && hfbard_mpq == NULL) || (c == PC_BARBARIAN && hfbarb_mpq == NULL)) { +#endif + sprintf(Type, "%c%c%c", CharChar[c], *a, *w); + sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTbl[c], Type, Type, szCel); +#ifdef HELLFIRE + } else { + sprintf(Type, "%c%c%c", CharCharHF[c], *a, *w); + sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTblOld[c], Type, Type, szCel); + } +#endif + if (WOpenFile(pszName, &hsFile, TRUE)) { + /// ASSERT: assert(hsFile); + dwSize = WGetFileSize(hsFile, NULL); + WCloseFile(hsFile); + if (dwMaxSize <= dwSize) { + dwMaxSize = dwSize; + } + } + } + } + } + + return dwMaxSize; +} + void InitPlrGFXMem(int pnum) { if ((DWORD)pnum >= MAX_PLRS) { @@ -454,54 +502,6 @@ void InitPlrGFXMem(int pnum) plr[pnum]._pGFXLoad = 0; } -DWORD GetPlrGFXSize(const char *szCel) -{ - DWORD c; - const char *a, *w; - DWORD dwSize, dwMaxSize; - HANDLE hsFile; - char pszName[256]; - char Type[16]; - - dwMaxSize = 0; - - for (c = 0; c < NUM_CLASSES; c++) { -#ifdef SPAWN - if (c != 0) - continue; -#endif - for (a = &ArmourChar[0]; *a; a++) { -#ifdef SPAWN - if (a != &ArmourChar[0]) - break; -#endif - for (w = &WepChar[0]; *w; w++) { // BUGFIX loads non-existing animagions; DT is only for N, BT is only for U, D & H -#ifdef HELLFIRE - if ((c == PC_BARD && hfbard_mpq == NULL) || (c == PC_BARBARIAN && hfbarb_mpq == NULL)) { -#endif - sprintf(Type, "%c%c%c", CharChar[c], *a, *w); - sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTbl[c], Type, Type, szCel); -#ifdef HELLFIRE - } else { - sprintf(Type, "%c%c%c", CharCharHF[c], *a, *w); - sprintf(pszName, "PlrGFX\\%s\\%s\\%s%s.CL2", ClassStrTblOld[c], Type, Type, szCel); - } -#endif - if (WOpenFile(pszName, &hsFile, TRUE)) { - /// ASSERT: assert(hsFile); - dwSize = WGetFileSize(hsFile, NULL); - WCloseFile(hsFile); - if (dwMaxSize <= dwSize) { - dwMaxSize = dwSize; - } - } - } - } - } - - return dwMaxSize; -} - void FreePlayerGFX(int pnum) { if ((DWORD)pnum >= MAX_PLRS) { @@ -1907,6 +1907,43 @@ void RespawnDeadItem(ItemStruct *itm, int x, int y) itm->_itype = ITYPE_NONE; } +static void PlrDeadItem(int pnum, ItemStruct *itm, int xx, int yy) +{ + int x, y; + int i, j, k; + + if (itm->_itype == ITYPE_NONE) + return; + + if ((DWORD)pnum >= MAX_PLRS) { + app_fatal("PlrDeadItem: illegal player %d", pnum); + } + + x = xx + plr[pnum]._px; + y = yy + plr[pnum]._py; + if ((xx || yy) && ItemSpaceOk(x, y)) { + RespawnDeadItem(itm, x, y); + plr[pnum].HoldItem = *itm; + NetSendCmdPItem(FALSE, CMD_RESPAWNITEM, x, y); + return; + } + + for (k = 1; k < 50; k++) { + for (j = -k; j <= k; j++) { + y = j + plr[pnum]._py; + for (i = -k; i <= k; i++) { + x = i + plr[pnum]._px; + if (ItemSpaceOk(x, y)) { + RespawnDeadItem(itm, x, y); + plr[pnum].HoldItem = *itm; + NetSendCmdPItem(FALSE, CMD_RESPAWNITEM, x, y); + return; + } + } + } + } +} + void StartPlayerKill(int pnum, int earflag) { BOOL diablolevel; @@ -2033,43 +2070,6 @@ void StartPlayerKill(int pnum, int earflag) #endif } -void PlrDeadItem(int pnum, ItemStruct *itm, int xx, int yy) -{ - int x, y; - int i, j, k; - - if (itm->_itype == ITYPE_NONE) - return; - - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("PlrDeadItem: illegal player %d", pnum); - } - - x = xx + plr[pnum]._px; - y = yy + plr[pnum]._py; - if ((xx || yy) && ItemSpaceOk(x, y)) { - RespawnDeadItem(itm, x, y); - plr[pnum].HoldItem = *itm; - NetSendCmdPItem(FALSE, CMD_RESPAWNITEM, x, y); - return; - } - - for (k = 1; k < 50; k++) { - for (j = -k; j <= k; j++) { - y = j + plr[pnum]._py; - for (i = -k; i <= k; i++) { - x = i + plr[pnum]._px; - if (ItemSpaceOk(x, y)) { - RespawnDeadItem(itm, x, y); - plr[pnum].HoldItem = *itm; - NetSendCmdPItem(FALSE, CMD_RESPAWNITEM, x, y); - return; - } - } - } - } -} - void DropHalfPlayersGold(int pnum) { int i, hGold; @@ -3199,6 +3199,56 @@ BOOL PM_DoBlock(int pnum) return FALSE; } +static void ArmorDur(int pnum) +{ + int a; + ItemStruct *pi; + PlayerStruct *p; + + if (pnum != myplr) { + return; + } + + if ((DWORD)pnum >= MAX_PLRS) { + app_fatal("ArmorDur: illegal player %d", pnum); + } + + p = &plr[pnum]; + if (p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { + return; + } + + a = random_(8, 3); + if (p->InvBody[INVLOC_CHEST]._itype != ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { + a = 1; + } + if (p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype != ITYPE_NONE) { + a = 0; + } + + if (a != 0) { + pi = &p->InvBody[INVLOC_CHEST]; + } else { + pi = &p->InvBody[INVLOC_HEAD]; + } + if (pi->_iDurability == DUR_INDESTRUCTIBLE) { + return; + } + + pi->_iDurability--; + if (pi->_iDurability != 0) { + return; + } + + if (a != 0) { + NetSendCmdDelItem(TRUE, INVLOC_CHEST); + } else { + NetSendCmdDelItem(TRUE, INVLOC_HEAD); + } + pi->_itype = ITYPE_NONE; + CalcPlrInv(pnum, TRUE); +} + BOOL PM_DoSpell(int pnum) { if ((DWORD)pnum >= MAX_PLRS) { @@ -3306,56 +3356,6 @@ BOOL PM_DoGotHit(int pnum) return FALSE; } -void ArmorDur(int pnum) -{ - int a; - ItemStruct *pi; - PlayerStruct *p; - - if (pnum != myplr) { - return; - } - - if ((DWORD)pnum >= MAX_PLRS) { - app_fatal("ArmorDur: illegal player %d", pnum); - } - - p = &plr[pnum]; - if (p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { - return; - } - - a = random_(8, 3); - if (p->InvBody[INVLOC_CHEST]._itype != ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { - a = 1; - } - if (p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype != ITYPE_NONE) { - a = 0; - } - - if (a != 0) { - pi = &p->InvBody[INVLOC_CHEST]; - } else { - pi = &p->InvBody[INVLOC_HEAD]; - } - if (pi->_iDurability == DUR_INDESTRUCTIBLE) { - return; - } - - pi->_iDurability--; - if (pi->_iDurability != 0) { - return; - } - - if (a != 0) { - NetSendCmdDelItem(TRUE, INVLOC_CHEST); - } else { - NetSendCmdDelItem(TRUE, INVLOC_HEAD); - } - pi->_itype = ITYPE_NONE; - CalcPlrInv(pnum, TRUE); -} - BOOL PM_DoDeath(int pnum) { if ((DWORD)pnum >= MAX_PLRS) { @@ -3789,6 +3789,33 @@ void ValidatePlayer() plr[myplr]._pMemSpells &= msk; } +static void CheckCheatStats(int pnum) +{ + if (plr[pnum]._pStrength > 750) { + plr[pnum]._pStrength = 750; + } + + if (plr[pnum]._pDexterity > 750) { + plr[pnum]._pDexterity = 750; + } + + if (plr[pnum]._pMagic > 750) { + plr[pnum]._pMagic = 750; + } + + if (plr[pnum]._pVitality > 750) { + plr[pnum]._pVitality = 750; + } + + if (plr[pnum]._pHitPoints > 128000) { + plr[pnum]._pHitPoints = 128000; + } + + if (plr[pnum]._pMana > 128000) { + plr[pnum]._pMana = 128000; + } +} + void ProcessPlayers() { int pnum; @@ -3906,33 +3933,6 @@ void ProcessPlayers() } } -void CheckCheatStats(int pnum) -{ - if (plr[pnum]._pStrength > 750) { - plr[pnum]._pStrength = 750; - } - - if (plr[pnum]._pDexterity > 750) { - plr[pnum]._pDexterity = 750; - } - - if (plr[pnum]._pMagic > 750) { - plr[pnum]._pMagic = 750; - } - - if (plr[pnum]._pVitality > 750) { - plr[pnum]._pVitality = 750; - } - - if (plr[pnum]._pHitPoints > 128000) { - plr[pnum]._pHitPoints = 128000; - } - - if (plr[pnum]._pMana > 128000) { - plr[pnum]._pMana = 128000; - } -} - void ClrPlrPath(int pnum) { if ((DWORD)pnum >= MAX_PLRS) { diff --git a/Source/player.h b/Source/player.h index ae79ba510..1b3c484f0 100644 --- a/Source/player.h +++ b/Source/player.h @@ -6,34 +6,19 @@ #ifndef __PLAYER_H__ #define __PLAYER_H__ -extern int plr_lframe_size; -extern int plr_wframe_size; -extern BYTE plr_gfx_flag; -extern int plr_aframe_size; extern int myplr; #ifdef HELLFIRE extern PlayerStruct *plr; #else extern PlayerStruct plr[MAX_PLRS]; #endif -extern int plr_fframe_size; -extern int plr_qframe_size; extern BOOL deathflag; -extern int plr_hframe_size; -extern int plr_bframe_size; -extern BYTE plr_gfx_bflag; -extern int plr_sframe_size; -extern int deathdelay; -extern int plr_dframe_size; -void SetPlayerGPtrs(BYTE *pData, BYTE **pAnim); void LoadPlrGFX(int pnum, player_graphic gfxflag); void InitPlayerGFX(int pnum); void InitPlrGFXMem(int pnum); -DWORD GetPlrGFXSize(const char *szCel); void FreePlayerGFX(int pnum); void NewPlrAnim(int pnum, BYTE *Peq, int numFrames, int Delay, int width); -void ClearPlrPVars(int pnum); void SetPlrAnims(int pnum); void ClearPlrRVars(PlayerStruct *p); void CreatePlayer(int pnum, char c); @@ -45,61 +30,27 @@ void InitPlayer(int pnum, BOOL FirstTime); void InitMultiView(); void CheckEFlag(int pnum, BOOL flag); BOOL SolidLoc(int x, int y); -BOOL PlrDirOK(int pnum, int dir); void PlrClrTrans(int x, int y); void PlrDoTrans(int x, int y); void SetPlayerOld(int pnum); void FixPlayerLocation(int pnum, int bDir); void StartStand(int pnum, int dir); -void StartWalkStand(int pnum); -void PM_ChangeLightOff(int pnum); -void PM_ChangeOffset(int pnum); -void StartWalk(int pnum, int xvel, int yvel, int xadd, int yadd, int EndDir, int sdir); -void StartWalk2(int pnum, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int EndDir, int sdir); -void StartWalk3(int pnum, int xvel, int yvel, int xoff, int yoff, int xadd, int yadd, int mapx, int mapy, int EndDir, int sdir); void StartAttack(int pnum, int d); -void StartRangeAttack(int pnum, int d, int cx, int cy); void StartPlrBlock(int pnum, int dir); -void StartSpell(int pnum, int d, int cx, int cy); void FixPlrWalkTags(int pnum); void RemovePlrFromMap(int pnum); void StartPlrHit(int pnum, int dam, BOOL forcehit); -void RespawnDeadItem(ItemStruct *itm, int x, int y); void StartPlayerKill(int pnum, int earflag); -void PlrDeadItem(int pnum, ItemStruct *itm, int xx, int yy); void DropHalfPlayersGold(int pnum); #ifdef HELLFIRE void StripTopGold(int pnum); #endif void SyncPlrKill(int pnum, int earflag); -void j_StartPlayerKill(int pnum, int earflag); void RemovePlrMissiles(int pnum); -void InitLevelChange(int pnum); void StartNewLvl(int pnum, int fom, int lvl); void RestartTownLvl(int pnum); void StartWarpLvl(int pnum, int pidx); -BOOL PM_DoStand(int pnum); -BOOL PM_DoNewLvl(int pnum); -BOOL PM_DoWalk(int pnum); -BOOL PM_DoWalk2(int pnum); -BOOL PM_DoWalk3(int pnum); -BOOL WeaponDur(int pnum, int durrnd); -BOOL PlrHitMonst(int pnum, int m); -BOOL PlrHitPlr(int pnum, char p); -BOOL PlrHitObj(int pnum, int mx, int my); -BOOL PM_DoAttack(int pnum); -BOOL PM_DoRangeAttack(int pnum); -void ShieldDur(int pnum); -BOOL PM_DoBlock(int pnum); -BOOL PM_DoSpell(int pnum); -BOOL PM_DoGotHit(int pnum); -void ArmorDur(int pnum); -BOOL PM_DoDeath(int pnum); -void CheckNewPath(int pnum); -BOOL PlrDeathModeOK(int p); -void ValidatePlayer(); void ProcessPlayers(); -void CheckCheatStats(int pnum); void ClrPlrPath(int pnum); BOOL PosOkPlayer(int pnum, int x, int y); void MakePlrPath(int pnum, int xx, int yy, BOOL endspace); @@ -125,30 +76,17 @@ int player_45EFAB(int i); int player_45EFB5(int i); #endif -/* rdata */ - -extern const char ArmourChar[4]; -extern const char WepChar[10]; -extern const char CharChar[]; - /* data */ extern int plrxoff[9]; extern int plryoff[9]; extern int plrxoff2[9]; extern int plryoff2[9]; -extern char PlrGFXAnimLens[NUM_CLASSES][11]; -extern int PWVel[NUM_CLASSES][3]; -extern int AnimLenFromClass[NUM_CLASSES]; extern int StrengthTbl[NUM_CLASSES]; extern int MagicTbl[NUM_CLASSES]; extern int DexterityTbl[NUM_CLASSES]; extern int VitalityTbl[NUM_CLASSES]; -extern int ToBlkTbl[NUM_CLASSES]; -extern const char *const ClassStrTblOld[]; extern int MaxStats[NUM_CLASSES][4]; -extern int ExpLvlsTbl[MAXCHARLEVEL]; extern const char *const ClassStrTbl[NUM_CLASSES]; -extern BYTE fix[9]; #endif /* __PLAYER_H__ */ From ccf7f2971fb2ab0af2cdf18fb137cc0ecc57a3cb Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:26:28 +0100 Subject: [PATCH 04/23] Clean up plrmsg.h --- Source/plrmsg.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Source/plrmsg.h b/Source/plrmsg.h index 12d723d70..20fdd51b4 100644 --- a/Source/plrmsg.h +++ b/Source/plrmsg.h @@ -6,8 +6,6 @@ #ifndef __PLRMSG_H__ #define __PLRMSG_H__ -extern _plrmsg plr_msgs[PMSG_COUNT]; - void plrmsg_delay(BOOL delay); char *ErrorPlrMsg(const char *pszMsg); size_t __cdecl EventPlrMsg(const char *pszFmt, ...); @@ -17,8 +15,4 @@ void InitPlrMsg(); void DrawPlrMsg(); void PrintPlrMsg(DWORD x, DWORD y, DWORD width, const char *str, BYTE col); -/* rdata */ - -extern const char text_color_from_player_num[MAX_PLRS + 1]; - #endif /* __PLRMSG_H__ */ From 4f9fbdb5ed115d749deee4c00916c8819a0836b9 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:31:58 +0100 Subject: [PATCH 05/23] Clean up portal.h --- Source/portal.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Source/portal.h b/Source/portal.h index 4131d0300..1460b4765 100644 --- a/Source/portal.h +++ b/Source/portal.h @@ -7,7 +7,6 @@ #define __PORTAL_H__ extern PortalStruct portal[MAXPORTAL]; -extern int portalindex; void InitPortals(); void SetPortalStats(int i, BOOL o, int x, int y, int lvl, int lvltype); @@ -23,8 +22,4 @@ void GetPortalLevel(); void GetPortalLvlPos(); BOOL PosOkPortal(int lvl, int x, int y); -/* rdata */ -extern int WarpDropX[MAXPORTAL]; -extern int WarpDropY[MAXPORTAL]; - #endif /* __PORTAL_H__ */ From 129cece89f8fa8c944871e29c0a54928d34244bc Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:32:04 +0100 Subject: [PATCH 06/23] Clean up quests.h --- Source/quests.h | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/Source/quests.h b/Source/quests.h index 04ee9f846..d7ca26d6a 100644 --- a/Source/quests.h +++ b/Source/quests.h @@ -6,18 +6,12 @@ #ifndef __QUESTS_H__ #define __QUESTS_H__ -extern int qtopline; extern BOOL questlog; extern BYTE *pQLogCel; extern QuestStruct quests[MAXQUESTS]; -extern int qline; -extern int qlist[MAXQUESTS]; -extern int numqlines; -extern int WaterDone; extern int ReturnLvlX; extern int ReturnLvlY; extern int ReturnLvlT; -extern int questpentframe; extern int ReturnLvl; void InitQuests(); @@ -25,19 +19,11 @@ void CheckQuests(); BOOL ForceQuests(); BOOL QuestStatus(int i); void CheckQuestKill(int m, BOOL sendmsg); -void DrawButcher(); -void DrawSkelKing(int q, int x, int y); -void DrawWarLord(int x, int y); -void DrawSChamber(int q, int x, int y); -void DrawLTBanner(int x, int y); -void DrawBlind(int x, int y); -void DrawBlood(int x, int y); void DRLG_CheckQuests(int x, int y); void SetReturnLvlPos(); void GetReturnLvlPos(); void ResyncMPQuests(); void ResyncQuests(); -void PrintQLString(int x, int y, BOOL cjustflag, const char *str, int col); void DrawQuestLog(); void StartQuestlog(); void QuestlogUp(); @@ -48,12 +34,5 @@ void SetMultiQuest(int q, int s, int l, int v1); /* rdata */ extern QuestData questlist[MAXQUESTS]; -extern char questxoff[7]; -extern char questyoff[7]; -extern const char *constquesttrigstr[5]; -extern int QuestGroup1[3]; -extern int QuestGroup2[3]; -extern int QuestGroup3[3]; -extern int QuestGroup4[2]; #endif /* __QUESTS_H__ */ From 54425d768c9ec945236a342cce010f91b5ea1fde Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:37:02 +0100 Subject: [PATCH 07/23] Clean up redner.h --- Source/render.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Source/render.h b/Source/render.h index 64a238231..c896831d0 100644 --- a/Source/render.h +++ b/Source/render.h @@ -6,11 +6,7 @@ #ifndef __RENDER_H__ #define __RENDER_H__ -void drawTopArchesUpperScreen(BYTE *pBuff); -void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *pMask); void drawUpperScreen(BYTE *pBuff); -void drawTopArchesLowerScreen(BYTE *pBuff); -void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *pMask); void drawLowerScreen(BYTE *pBuff); void world_draw_black_tile(BYTE *pBuff); @@ -18,13 +14,10 @@ void world_draw_black_tile(BYTE *pBuff); extern int WorldBoolFlag; extern DWORD gdwCurrentMask; -// extern char world_4B3264; extern BYTE *gpCelFrame; extern DWORD *gpDrawMask; -// extern char world_4B326D[16]; extern DWORD RightMask[TILE_WIDTH]; extern DWORD LeftMask[TILE_WIDTH]; -extern DWORD WallMask[TILE_WIDTH]; extern int WorldTbl3x16[48]; extern int WorldTbl17_1[17]; extern int WorldTbl17_2[17]; From 93f76bf3f58814ae826b0903d80b9831160075e3 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:37:11 +0100 Subject: [PATCH 08/23] Clean up restrict.h --- Source/restrict.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/restrict.h b/Source/restrict.h index 9e7fee7a4..b74149c10 100644 --- a/Source/restrict.h +++ b/Source/restrict.h @@ -6,7 +6,6 @@ #ifndef __RESTRICT_H__ #define __RESTRICT_H__ -BOOL SystemSupported(); BOOL RestrictedTest(); BOOL ReadOnlyTest(); From 2ad92254698310dc6831a8fa0f83bfc46d72b1c8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:40:10 +0100 Subject: [PATCH 09/23] Clean up scrollrt.h --- Source/scrollrt.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Source/scrollrt.h b/Source/scrollrt.h index b83165d14..ac1a8431c 100644 --- a/Source/scrollrt.h +++ b/Source/scrollrt.h @@ -11,11 +11,8 @@ extern int PitchTbl[1024]; extern BYTE *gpBufEnd; extern DWORD level_cel_block; extern char arch_draw_type; -extern DDSURFACEDESC DDS_desc; 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; #ifdef HELLFIRE extern BOOLEAN AutoMapShowItems; #endif @@ -33,12 +30,4 @@ void EnableFrameCount(); void scrollrt_draw_game_screen(BOOL draw_cursor); void DrawAndBlit(); -/* rdata */ - -/* data */ - -/** used in 1.00 debug */ -extern const char *const szMonModeAssert[18]; -extern const char *const szPlrModeAssert[12]; - #endif /* __SCROLLRT_H__ */ From 3b42420eeb742c87517b6c79c378c4cbc2e6da39 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:49:27 +0100 Subject: [PATCH 10/23] Clean up drlg_l*.h --- Source/drlg_l1.h | 30 ----------- Source/drlg_l2.h | 135 ----------------------------------------------- Source/drlg_l3.h | 54 ------------------- Source/drlg_l4.h | 30 ----------- 4 files changed, 249 deletions(-) diff --git a/Source/drlg_l1.h b/Source/drlg_l1.h index 6d1bd4746..df503b485 100644 --- a/Source/drlg_l1.h +++ b/Source/drlg_l1.h @@ -6,35 +6,21 @@ #ifndef __DRLG_L1_H__ #define __DRLG_L1_H__ -extern BYTE L5dungeon[80][80]; -extern BYTE L5dflags[DMAXX][DMAXY]; -extern BOOL L5setloadflag; -extern int HR1; -extern int HR2; -extern int HR3; #ifdef HELLFIRE extern int UberRow; extern int UberCol; -extern int dword_577368; extern int IsUberRoomOpened; extern int UberLeverRow; extern int UberLeverCol; extern int IsUberLeverActivated; extern int UberDiabloMonsterIndex; #endif -extern int VR1; -extern int VR2; -extern int VR3; -extern BYTE *L5pSetPiece; void DRLG_Init_Globals(); void LoadL1Dungeon(const char *sFileName, int vx, int vy); void LoadPreL1Dungeon(const char *sFileName, int vx, int vy); void CreateL5Dungeon(DWORD rseed, int entry); #ifdef HELLFIRE -void DRLG_InitL5Vals(); -void drlg_l1_crypt_lavafloor(); -void drlg_l1_crypt_rndset(const BYTE *miniset, int rndper); void drlg_l1_set_crypt_room(int rx1, int ry1); void drlg_l1_set_corner_room(int rx1, int ry1); void drlg_l1_crypt_pattern1(int rndper); @@ -46,20 +32,4 @@ void drlg_l1_crypt_pattern6(int rndper); void drlg_l1_crypt_pattern7(int rndper); #endif -/* rdata */ -extern const ShadowStruct SPATS[37]; - -// BUGFIX: These arrays should contain an additional 0 (207 elements). -extern const BYTE BSTYPES[206]; -extern const BYTE L5BTYPES[206]; - -extern const BYTE STAIRSUP[]; -extern const BYTE L5STAIRSUP[]; -extern const BYTE STAIRSDOWN[]; -extern const BYTE LAMPS[]; -extern const BYTE PWATERIN[]; - -/* data */ -extern BYTE L5ConvTbl[16]; - #endif /* __DRLG_L1_H__ */ diff --git a/Source/drlg_l2.h b/Source/drlg_l2.h index f13097083..2c3c75b2a 100644 --- a/Source/drlg_l2.h +++ b/Source/drlg_l2.h @@ -6,143 +6,8 @@ #ifndef __DRLG_L2_H__ #define __DRLG_L2_H__ -extern int nSx1; -extern int nSy1; -extern int nSx2; -extern int nSy2; -extern int nRoomCnt; -extern BYTE predungeon[DMAXX][DMAXY]; -extern ROOMNODE RoomList[81]; -extern HALLNODE *pHallList; - -void InitDungeon(); -void L2LockoutFix(); -void L2DoorFix(); void LoadL2Dungeon(const char *sFileName, int vx, int vy); void LoadPreL2Dungeon(const char *sFileName, int vx, int vy); void CreateL2Dungeon(DWORD rseed, int entry); -/* rdata */ -extern int Area_Min; -extern int Room_Max; -extern int Room_Min; -extern int Dir_Xadd[5]; -extern int Dir_Yadd[5]; -extern ShadowStruct SPATSL2[2]; -//short word_48489A; -extern BYTE BTYPESL2[161]; -extern BYTE BSTYPESL2[161]; -extern BYTE VARCH1[]; -extern BYTE VARCH2[]; -extern BYTE VARCH3[]; -extern BYTE VARCH4[]; -extern BYTE VARCH5[]; -extern BYTE VARCH6[]; -extern BYTE VARCH7[]; -extern BYTE VARCH8[]; -extern BYTE VARCH9[]; -extern BYTE VARCH10[]; -extern BYTE VARCH11[]; -extern BYTE VARCH12[]; -extern BYTE VARCH13[]; -extern BYTE VARCH14[]; -extern BYTE VARCH15[]; -extern BYTE VARCH16[]; -extern BYTE VARCH17[]; -extern BYTE VARCH18[]; -extern BYTE VARCH19[]; -extern BYTE VARCH20[]; -extern BYTE VARCH21[]; -extern BYTE VARCH22[]; -extern BYTE VARCH23[]; -extern BYTE VARCH24[]; -extern BYTE VARCH25[]; -extern BYTE VARCH26[]; -extern BYTE VARCH27[]; -extern BYTE VARCH28[]; -extern BYTE VARCH29[]; -extern BYTE VARCH30[]; -extern BYTE VARCH31[]; -extern BYTE VARCH32[]; -extern BYTE VARCH33[]; -extern BYTE VARCH34[]; -extern BYTE VARCH35[]; -extern BYTE VARCH36[]; -extern BYTE VARCH37[]; -extern BYTE VARCH38[]; -extern BYTE VARCH39[]; -extern BYTE VARCH40[]; -extern BYTE HARCH1[]; -extern BYTE HARCH2[]; -extern BYTE HARCH3[]; -extern BYTE HARCH4[]; -extern BYTE HARCH5[]; -extern BYTE HARCH6[]; -extern BYTE HARCH7[]; -extern BYTE HARCH8[]; -extern BYTE HARCH9[]; -extern BYTE HARCH10[]; -extern BYTE HARCH11[]; -extern BYTE HARCH12[]; -extern BYTE HARCH13[]; -extern BYTE HARCH14[]; -extern BYTE HARCH15[]; -extern BYTE HARCH16[]; -extern BYTE HARCH17[]; -extern BYTE HARCH18[]; -extern BYTE HARCH19[]; -extern BYTE HARCH20[]; -extern BYTE HARCH21[]; -extern BYTE HARCH22[]; -extern BYTE HARCH23[]; -extern BYTE HARCH24[]; -extern BYTE HARCH25[]; -extern BYTE HARCH26[]; -extern BYTE HARCH27[]; -extern BYTE HARCH28[]; -extern BYTE HARCH29[]; -extern BYTE HARCH30[]; -extern BYTE HARCH31[]; -extern BYTE HARCH32[]; -extern BYTE HARCH33[]; -extern BYTE HARCH34[]; -extern BYTE HARCH35[]; -extern BYTE HARCH36[]; -extern BYTE HARCH37[]; -extern BYTE HARCH38[]; -extern BYTE HARCH39[]; -extern BYTE HARCH40[]; -extern BYTE USTAIRS[]; -extern BYTE DSTAIRS[]; -extern BYTE WARPSTAIRS[]; -extern BYTE CRUSHCOL[]; -extern BYTE BIG1[]; -extern BYTE BIG2[]; -extern BYTE BIG3[]; -extern BYTE BIG4[]; -extern BYTE BIG5[]; -extern BYTE BIG6[]; -extern BYTE BIG7[]; -extern BYTE BIG8[]; -extern BYTE BIG9[]; -extern BYTE BIG10[]; -extern BYTE RUINS1[]; -extern BYTE RUINS2[]; -extern BYTE RUINS3[]; -extern BYTE RUINS4[]; -extern BYTE RUINS5[]; -extern BYTE RUINS6[]; -extern BYTE RUINS7[]; -extern BYTE PANCREAS1[]; -extern BYTE PANCREAS2[]; -extern BYTE CTRDOOR1[]; -extern BYTE CTRDOOR2[]; -extern BYTE CTRDOOR3[]; -extern BYTE CTRDOOR4[]; -extern BYTE CTRDOOR5[]; -extern BYTE CTRDOOR6[]; -extern BYTE CTRDOOR7[]; -extern BYTE CTRDOOR8[]; -extern int Patterns[100][10]; - #endif /* __DRLG_L2_H__ */ diff --git a/Source/drlg_l3.h b/Source/drlg_l3.h index ef8319905..e302e0755 100644 --- a/Source/drlg_l3.h +++ b/Source/drlg_l3.h @@ -6,62 +6,8 @@ #ifndef __DRLG_L3_H__ #define __DRLG_L3_H__ -extern BOOLEAN lavapool; -extern int abyssx; -extern int lockoutcnt; -extern BOOLEAN lockout[DMAXX][DMAXY]; - -void AddFenceDoors(); -void FenceDoorFix(); -BOOL DRLG_L3Anvil(); -void FixL3Warp(); -void FixL3HallofHeroes(); -void DRLG_L3LockRec(int x, int y); -BOOL DRLG_L3Lockout(); void CreateL3Dungeon(DWORD rseed, int entry); -#ifdef HELLFIRE -BOOLEAN drlg_l3_hive_rnd_piece(const BYTE *miniset, int rndper); -#endif void LoadL3Dungeon(const char *sFileName, int vx, int vy); void LoadPreL3Dungeon(const char *sFileName, int vx, int vy); -/* rdata */ -extern const BYTE L3ConvTbl[16]; -extern const BYTE L3UP[20]; -extern const BYTE L3DOWN[20]; -extern const BYTE L3HOLDWARP[20]; -extern const BYTE L3TITE1[34]; -extern const BYTE L3TITE2[34]; -extern const BYTE L3TITE3[34]; -extern const BYTE L3TITE6[42]; -extern const BYTE L3TITE7[42]; -extern const BYTE L3TITE8[20]; -extern const BYTE L3TITE9[20]; -extern const BYTE L3TITE10[20]; -extern const BYTE L3TITE11[20]; -extern const BYTE L3TITE12[6]; -extern const BYTE L3TITE13[6]; -extern const BYTE L3CREV1[6]; -extern const BYTE L3CREV2[6]; -extern const BYTE L3CREV3[6]; -extern const BYTE L3CREV4[6]; -extern const BYTE L3CREV5[6]; -extern const BYTE L3CREV6[6]; -extern const BYTE L3CREV7[6]; -extern const BYTE L3CREV8[6]; -extern const BYTE L3CREV9[6]; -extern const BYTE L3CREV10[6]; -extern const BYTE L3CREV11[6]; -extern const BYTE L3ISLE1[14]; -extern const BYTE L3ISLE2[14]; -extern const BYTE L3ISLE3[14]; -extern const BYTE L3ISLE4[14]; -extern const BYTE L3ISLE5[10]; -extern const BYTE L3XTRA1[4]; -extern const BYTE L3XTRA2[4]; -extern const BYTE L3XTRA3[4]; -extern const BYTE L3XTRA4[4]; -extern const BYTE L3XTRA5[4]; -extern const BYTE L3ANVIL[244]; - #endif /* __DRLG_L3_H__ */ diff --git a/Source/drlg_l4.h b/Source/drlg_l4.h index b2e52c776..c525103bf 100644 --- a/Source/drlg_l4.h +++ b/Source/drlg_l4.h @@ -14,36 +14,6 @@ extern int diabquad3x; extern int diabquad3y; extern int diabquad4x; extern int diabquad4y; -extern BOOL hallok[20]; -extern int l4holdx; -extern int l4holdy; -extern int SP4x1; -extern int SP4y1; -extern int SP4x2; -extern int SP4y2; -extern BYTE L4dungeon[80][80]; -extern BYTE dung[20][20]; -//int dword_52A4DC; - -void DRLG_LoadL4SP(); -void DRLG_FreeL4SP(); -void DRLG_L4SetSPRoom(int rx1, int ry1); -void L4SaveQuads(); -void DRLG_L4SetRoom(BYTE *pSetPiece, int rx1, int ry1); -void DRLG_LoadDiabQuads(BOOL preflag); -BOOL IsDURWall(char d); -BOOL IsDLLWall(char dd); -void L4FixRim(); -void DRLG_L4GeneralFix(); void CreateL4Dungeon(DWORD rseed, int entry); -/* rdata */ -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__ */ From fd21b95e01e56dca821f0433203f21b13408b562 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:50:52 +0100 Subject: [PATCH 11/23] Clean up dx.h --- Source/dx.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/Source/dx.h b/Source/dx.h index 1a13e3b12..6201784c8 100644 --- a/Source/dx.h +++ b/Source/dx.h @@ -13,7 +13,6 @@ extern IDirectDrawSurface *lpDDSBackBuf; extern IDirectDrawSurface *lpDDSPrimary; extern char gbBackBuf; extern char gbEmulate; -extern HMODULE ghDiabMod; void dx_init(HWND hWnd); void lock_buf(BYTE idx); @@ -22,6 +21,4 @@ void dx_cleanup(); void dx_reinit(); void j_dx_reinit(); -/* data */ - #endif /* __DX_H__ */ From d959d617dbbbdf6526314a6895ac0a46c865fdd2 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 03:57:36 +0100 Subject: [PATCH 12/23] Clean up gendung.h --- Source/gendung.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Source/gendung.h b/Source/gendung.h index 1cd240605..07f5a9dc5 100644 --- a/Source/gendung.h +++ b/Source/gendung.h @@ -22,11 +22,6 @@ extern BYTE *pDungeonCels; extern BYTE *pSpeedCels; extern int SpeedFrameTbl[128][16]; extern char block_lvid[MAXTILES + 1]; -extern int level_frame_count[MAXTILES]; -extern int tile_defs[MAXTILES]; -extern WORD level_frame_types[MAXTILES]; -extern int level_frame_sizes[MAXTILES]; -extern int nlevel_frames; extern BOOLEAN nBlockTable[MAXTILES + 1]; extern BOOLEAN nSolidTable[MAXTILES + 1]; extern BOOLEAN nTransTable[MAXTILES + 1]; @@ -72,9 +67,7 @@ extern int themeCount; extern THEME_LOC themeLoc[MAXTHEMES]; void FillSolidBlockTbls(); -void MakeSpeedCels(); int IsometricCoord(int x, int y); -void SetSpeedCels(); void SetDungeonMicros(); void DRLG_InitTrans(); void DRLG_MRectTrans(int x1, int y1, int x2, int y2); @@ -85,8 +78,6 @@ void DRLG_AreaTrans(int num, BYTE *List); void DRLG_InitSetPC(); void DRLG_SetPC(); void Make_SetPC(int x, int y, int w, int h); -BOOL DRLG_WillThemeRoomFit(int floor, int x, int y, int minSize, int maxSize, int *width, int *height); -void DRLG_CreateThemeRoom(int themeIndex); void DRLG_PlaceThemeRooms(int minSize, int maxSize, int floor, int freq, int rndSize); void DRLG_HoldThemeRooms(); BOOL SkipThemeRoom(int x, int y); From fb6ee4f37c6bacf823811dc87525e2cba0609a85 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 04:08:45 +0100 Subject: [PATCH 13/23] Clean up setmaps.h --- Source/setmaps.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Source/setmaps.h b/Source/setmaps.h index ad797dc16..f032dc4d1 100644 --- a/Source/setmaps.h +++ b/Source/setmaps.h @@ -7,20 +7,9 @@ #define __SETMAPS_H__ int ObjIndex(int x, int y); -void AddSKingObjs(); -void AddSChamObjs(); -void AddVileObjs(); -void DRLG_SetMapTrans(const char *sFileName); void LoadSetMap(); /* rdata */ -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 const char *const quest_level_names[]; #endif /* __SETMAPS_H__ */ From 2927a64d4d41b3c2bf7334fabf82a21c23b8f792 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 04:20:58 +0100 Subject: [PATCH 14/23] Reorder sound.cpp --- Source/sound.cpp | 206 +++++++++++++++++++++++------------------------ Source/sound.h | 12 --- 2 files changed, 103 insertions(+), 115 deletions(-) diff --git a/Source/sound.cpp b/Source/sound.cpp index 7d4d030f6..686d3e760 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -78,6 +78,74 @@ void snd_update(BOOL bStopAll) } } +static LPDIRECTSOUNDBUFFER sound_dup_channel(LPDIRECTSOUNDBUFFER DSB) +{ + DWORD i; + + if (!gbDupSounds) { + return NULL; + } + + for (i = 0; i < 8; i++) { + if (!DSBs[i]) { + if (sglpDS->DuplicateSoundBuffer(DSB, &DSBs[i]) != DS_OK) { + return NULL; + } + + return DSBs[i]; + } + } + + return NULL; +} + +static void snd_get_volume(const char *value_name, int *value) +{ + int v = *value; + if (!SRegLoadValue(APP_NAME, value_name, 0, &v)) { + v = VOLUME_MAX; + } + *value = v; + + if (*value < VOLUME_MIN) { + *value = VOLUME_MIN; + } else if (*value > VOLUME_MAX) { + *value = VOLUME_MAX; + } + *value -= *value % 100; +} + +static void snd_set_volume(const char *key, int value) +{ + SRegSaveValue(APP_NAME, key, 0, value); +} + +static BOOL sound_file_reload(TSnd *sound_file, LPDIRECTSOUNDBUFFER DSB) +{ + HANDLE file; + LPVOID buf1, buf2; + DWORD size1, size2; + BOOL rv; + + if (DSB->Restore() != DS_OK) + return FALSE; + + rv = FALSE; + + WOpenFile(sound_file->sound_path, &file, FALSE); + WSetFilePointer(file, sound_file->chunk.dwOffset, NULL, FILE_BEGIN); + + if (DSB->Lock(0, sound_file->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0) == DS_OK) { + WReadFile(file, buf1, size1); + if (DSB->Unlock(buf1, size1, buf2, size2) == DS_OK) + rv = TRUE; + } + + WCloseFile(file); + + return rv; +} + void snd_stop_snd(TSnd *pSnd) { if (pSnd && pSnd->DSB) @@ -150,51 +218,19 @@ void snd_play_snd(TSnd *pSnd, int lVolume, int lPan) pSnd->start_tc = tc; } -LPDIRECTSOUNDBUFFER sound_dup_channel(LPDIRECTSOUNDBUFFER DSB) -{ - DWORD i; - - if (!gbDupSounds) { - return NULL; - } - - for (i = 0; i < 8; i++) { - if (!DSBs[i]) { - if (sglpDS->DuplicateSoundBuffer(DSB, &DSBs[i]) != DS_OK) { - return NULL; - } - - return DSBs[i]; - } - } - - return NULL; -} - -BOOL sound_file_reload(TSnd *sound_file, LPDIRECTSOUNDBUFFER DSB) +static void sound_CreateSoundBuffer(TSnd *sound_file) { - HANDLE file; - LPVOID buf1, buf2; - DWORD size1, size2; - BOOL rv; - - if (DSB->Restore() != DS_OK) - return FALSE; - - rv = FALSE; - - WOpenFile(sound_file->sound_path, &file, FALSE); - WSetFilePointer(file, sound_file->chunk.dwOffset, NULL, FILE_BEGIN); - - if (DSB->Lock(0, sound_file->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0) == DS_OK) { - WReadFile(file, buf1, size1); - if (DSB->Unlock(buf1, size1, buf2, size2) == DS_OK) - rv = TRUE; - } - - WCloseFile(file); + DSBUFFERDESC DSB; + HRESULT error_code; + memset(&DSB, 0, sizeof(DSBUFFERDESC)); - return rv; + DSB.dwSize = sizeof(DSBUFFERDESC); + DSB.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_STATIC; + DSB.dwBufferBytes = sound_file->chunk.dwSize; + DSB.lpwfxFormat = &sound_file->fmt; + error_code = sglpDS->CreateSoundBuffer(&DSB, &sound_file->DSB, NULL); + if (error_code != ERROR_SUCCESS) + DSErrMsg(error_code, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); } TSnd *sound_file_load(const char *path) @@ -237,21 +273,6 @@ TSnd *sound_file_load(const char *path) return pSnd; } -void sound_CreateSoundBuffer(TSnd *sound_file) -{ - DSBUFFERDESC DSB; - HRESULT error_code; - memset(&DSB, 0, sizeof(DSBUFFERDESC)); - - DSB.dwSize = sizeof(DSBUFFERDESC); - DSB.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_STATIC; - DSB.dwBufferBytes = sound_file->chunk.dwSize; - DSB.lpwfxFormat = &sound_file->fmt; - error_code = sglpDS->CreateSoundBuffer(&DSB, &sound_file->DSB, NULL); - if (error_code != ERROR_SUCCESS) - DSErrMsg(error_code, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); -} - void sound_file_cleanup(TSnd *sound_file) { if (sound_file) { @@ -265,45 +286,7 @@ void sound_file_cleanup(TSnd *sound_file) } } -void snd_init(HWND hWnd) -{ - int error_code; - snd_get_volume("Sound Volume", &sglSoundVolume); - gbSoundOn = sglSoundVolume > VOLUME_MIN; - - snd_get_volume("Music Volume", &sglMusicVolume); - gbMusicOn = sglMusicVolume > VOLUME_MIN; - - error_code = sound_DirectSoundCreate(NULL, &sglpDS, NULL); - if (error_code != DS_OK) - sglpDS = NULL; - - if (sglpDS && sglpDS->SetCooperativeLevel(hWnd, DSSCL_EXCLUSIVE) == DS_OK) - sound_create_primary_buffer(NULL); - - SVidInitialize(sglpDS); - SFileDdaInitialize(sglpDS); - - gbSndInited = sglpDS != NULL; -} - -void snd_get_volume(const char *value_name, int *value) -{ - int v = *value; - if (!SRegLoadValue(APP_NAME, value_name, 0, &v)) { - v = VOLUME_MAX; - } - *value = v; - - if (*value < VOLUME_MIN) { - *value = VOLUME_MIN; - } else if (*value > VOLUME_MAX) { - *value = VOLUME_MAX; - } - *value -= *value % 100; -} - -void sound_create_primary_buffer(HANDLE music_track) +static void sound_create_primary_buffer(HANDLE music_track) { HRESULT error_code; DSBUFFERDESC dsbuf; @@ -343,7 +326,7 @@ void sound_create_primary_buffer(HANDLE music_track) } } -HRESULT sound_DirectSoundCreate(LPGUID lpGuid, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter) +static HRESULT sound_DirectSoundCreate(LPGUID lpGuid, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter) { HRESULT(WINAPI * DirectSoundCreate) (LPGUID lpGuid, LPDIRECTSOUND * ppDS, LPUNKNOWN pUnkOuter); @@ -362,6 +345,28 @@ HRESULT sound_DirectSoundCreate(LPGUID lpGuid, LPDIRECTSOUND *ppDS, LPUNKNOWN pU return DirectSoundCreate(lpGuid, ppDS, pUnkOuter); } +void snd_init(HWND hWnd) +{ + int error_code; + snd_get_volume("Sound Volume", &sglSoundVolume); + gbSoundOn = sglSoundVolume > VOLUME_MIN; + + snd_get_volume("Music Volume", &sglMusicVolume); + gbMusicOn = sglMusicVolume > VOLUME_MIN; + + error_code = sound_DirectSoundCreate(NULL, &sglpDS, NULL); + if (error_code != DS_OK) + sglpDS = NULL; + + if (sglpDS && sglpDS->SetCooperativeLevel(hWnd, DSSCL_EXCLUSIVE) == DS_OK) + sound_create_primary_buffer(NULL); + + SVidInitialize(sglpDS); + SFileDdaInitialize(sglpDS); + + gbSndInited = sglpDS != NULL; +} + void sound_cleanup() { snd_update(TRUE); @@ -380,11 +385,6 @@ void sound_cleanup() } } -void snd_set_volume(const char *key, int value) -{ - SRegSaveValue(APP_NAME, key, 0, value); -} - void music_stop() { if (sghMusic) { diff --git a/Source/sound.h b/Source/sound.h index 672e12bbe..a3dd27d81 100644 --- a/Source/sound.h +++ b/Source/sound.h @@ -6,38 +6,26 @@ #ifndef __SOUND_H__ #define __SOUND_H__ -extern IDirectSoundBuffer *DSBs[8]; extern BOOLEAN gbSndInited; -extern HMODULE hDsound_dll; void snd_update(BOOL bStopAll); void snd_stop_snd(TSnd *pSnd); BOOL snd_playing(TSnd *pSnd); void snd_play_snd(TSnd *pSnd, int lVolume, int lPan); -IDirectSoundBuffer *sound_dup_channel(IDirectSoundBuffer *DSB); -BOOL sound_file_reload(TSnd *sound_file, IDirectSoundBuffer *DSB); TSnd *sound_file_load(const char *path); -void sound_CreateSoundBuffer(TSnd *sound_file); void sound_file_cleanup(TSnd *sound_file); void snd_init(HWND hWnd); -void snd_get_volume(const char *value_name, int *value); -void sound_create_primary_buffer(HANDLE music_track); -HRESULT sound_DirectSoundCreate(LPGUID lpGuid, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter); void sound_cleanup(); -void snd_set_volume(const char *key, int value); void music_stop(); void music_start(int nTrack); void sound_disable_music(BOOL disable); int sound_get_or_set_music_volume(int volume); int sound_get_or_set_sound_volume(int volume); -/* rdata */ - /* data */ extern BOOLEAN gbMusicOn; extern BOOLEAN gbSoundOn; extern BOOLEAN gbDupSounds; -extern char unk_volume[4][2]; #endif /* __SOUND_H__ */ From e3ef222c4a8e2bd5b6bbded90944546bdb7fdb55 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 04:36:59 +0100 Subject: [PATCH 15/23] Reorder stores.cpp --- Source/stores.cpp | 178 +++++++++++++++++++++++----------------------- Source/stores.h | 94 ------------------------ 2 files changed, 89 insertions(+), 183 deletions(-) diff --git a/Source/stores.cpp b/Source/stores.cpp index 615b53cbd..ad1d0ac03 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -336,6 +336,72 @@ void AddSText(int x, int y, BOOL j, const char *str, char clr, BOOL sel) stext[y]._ssel = sel; } +static void PrintStoreItem(ItemStruct *x, int l, char iclr) +{ + char sstr[128]; + char str, dex; + BYTE mag; + + sstr[0] = '\0'; + if (x->_iIdentified) { + if (x->_iMagical != ITEM_QUALITY_UNIQUE) { + if (x->_iPrePower != -1) { + PrintItemPower(x->_iPrePower, x); + strcat(sstr, tempstr); + } + } + if (x->_iSufPower != -1) { + PrintItemPower(x->_iSufPower, x); + if (sstr[0]) + strcat(sstr, ", "); + strcat(sstr, tempstr); + } + } + if (x->_iMiscId == IMISC_STAFF && x->_iMaxCharges) { + sprintf(tempstr, "Charges: %i/%i", x->_iCharges, x->_iMaxCharges); + if (sstr[0]) + strcat(sstr, ", "); + strcat(sstr, tempstr); + } + if (sstr[0]) { + AddSText(40, l, FALSE, sstr, iclr, FALSE); + l++; + } + sstr[0] = '\0'; + if (x->_iClass == ICLASS_WEAPON) + sprintf(sstr, "Damage: %i-%i ", x->_iMinDam, x->_iMaxDam); + if (x->_iClass == ICLASS_ARMOR) + sprintf(sstr, "Armor: %i ", x->_iAC); + if (x->_iMaxDur != DUR_INDESTRUCTIBLE && x->_iMaxDur) { + sprintf(tempstr, "Dur: %i/%i, ", x->_iDurability, x->_iMaxDur); + strcat(sstr, tempstr); + } else { + strcat(sstr, "Indestructible, "); + } + if (x->_itype == ITYPE_MISC) + sstr[0] = '\0'; + str = x->_iMinStr; + dex = x->_iMinDex; + mag = x->_iMinMag; + if ((str + mag + dex) == 0) { + strcat(sstr, "No required attributes"); + } else { + strcpy(tempstr, "Required:"); + if (x->_iMinStr) + sprintf(tempstr, "%s %i Str", tempstr, x->_iMinStr); + if (x->_iMinMag) + sprintf(tempstr, "%s %i Mag", tempstr, x->_iMinMag); + if (x->_iMinDex) + sprintf(tempstr, "%s %i Dex", tempstr, x->_iMinDex); + strcat(sstr, tempstr); + } + AddSText(40, l++, FALSE, sstr, iclr, FALSE); + if (x->_iMagical == ITEM_QUALITY_UNIQUE) { + if (x->_iIdentified) + AddSText(40, l, FALSE, "Unique Item", iclr, FALSE); + } +} + void StoreAutoPlace() { BOOL done; @@ -462,72 +528,6 @@ void S_ScrollSBuy(int idx) stextsel = stextdown; } -void PrintStoreItem(ItemStruct *x, int l, char iclr) -{ - char sstr[128]; - char str, dex; - BYTE mag; - - sstr[0] = '\0'; - if (x->_iIdentified) { - if (x->_iMagical != ITEM_QUALITY_UNIQUE) { - if (x->_iPrePower != -1) { - PrintItemPower(x->_iPrePower, x); - strcat(sstr, tempstr); - } - } - if (x->_iSufPower != -1) { - PrintItemPower(x->_iSufPower, x); - if (sstr[0]) - strcat(sstr, ", "); - strcat(sstr, tempstr); - } - } - if (x->_iMiscId == IMISC_STAFF && x->_iMaxCharges) { - sprintf(tempstr, "Charges: %i/%i", x->_iCharges, x->_iMaxCharges); - if (sstr[0]) - strcat(sstr, ", "); - strcat(sstr, tempstr); - } - if (sstr[0]) { - AddSText(40, l, FALSE, sstr, iclr, FALSE); - l++; - } - sstr[0] = '\0'; - if (x->_iClass == ICLASS_WEAPON) - sprintf(sstr, "Damage: %i-%i ", x->_iMinDam, x->_iMaxDam); - if (x->_iClass == ICLASS_ARMOR) - sprintf(sstr, "Armor: %i ", x->_iAC); - if (x->_iMaxDur != DUR_INDESTRUCTIBLE && x->_iMaxDur) { - sprintf(tempstr, "Dur: %i/%i, ", x->_iDurability, x->_iMaxDur); - strcat(sstr, tempstr); - } else { - strcat(sstr, "Indestructible, "); - } - if (x->_itype == ITYPE_MISC) - sstr[0] = '\0'; - str = x->_iMinStr; - dex = x->_iMinDex; - mag = x->_iMinMag; - if ((str + mag + dex) == 0) { - strcat(sstr, "No required attributes"); - } else { - strcpy(tempstr, "Required:"); - if (x->_iMinStr) - sprintf(tempstr, "%s %i Str", tempstr, x->_iMinStr); - if (x->_iMinMag) - sprintf(tempstr, "%s %i Mag", tempstr, x->_iMinMag); - if (x->_iMinDex) - sprintf(tempstr, "%s %i Dex", tempstr, x->_iMinDex); - strcat(sstr, tempstr); - } - AddSText(40, l++, FALSE, sstr, iclr, FALSE); - if (x->_iMagical == ITEM_QUALITY_UNIQUE) { - if (x->_iIdentified) - AddSText(40, l, FALSE, "Unique Item", iclr, FALSE); - } -} - void S_StartSBuy() { int i; @@ -769,6 +769,29 @@ BOOL SmithRepairOk(int i) return TRUE; } +static void AddStoreHoldRepair(ItemStruct *itm, int i) +{ + ItemStruct *item; + int v; + + item = &storehold[storenumh]; + storehold[storenumh] = *itm; + if (item->_iMagical != ITEM_QUALITY_NORMAL && item->_iIdentified) + item->_ivalue = 30 * item->_iIvalue / 100; + v = item->_ivalue * (100 * (item->_iMaxDur - item->_iDurability) / item->_iMaxDur) / 100; + if (!v) { + if (item->_iMagical != ITEM_QUALITY_NORMAL && item->_iIdentified) + return; + v = 1; + } + if (v > 1) + v >>= 1; + item->_iIvalue = v; + item->_ivalue = v; + storehidx[storenumh] = i; + storenumh++; +} + void S_StartSRepair() { BOOL repairok; @@ -828,29 +851,6 @@ void S_StartSRepair() OffsetSTextY(22, 6); } -void AddStoreHoldRepair(ItemStruct *itm, int i) -{ - ItemStruct *item; - int v; - - item = &storehold[storenumh]; - storehold[storenumh] = *itm; - if (item->_iMagical != ITEM_QUALITY_NORMAL && item->_iIdentified) - item->_ivalue = 30 * item->_iIvalue / 100; - v = item->_ivalue * (100 * (item->_iMaxDur - item->_iDurability) / item->_iMaxDur) / 100; - if (!v) { - if (item->_iMagical != ITEM_QUALITY_NORMAL && item->_iIdentified) - return; - v = 1; - } - if (v > 1) - v >>= 1; - item->_iIvalue = v; - item->_ivalue = v; - storehidx[storenumh] = i; - storenumh++; -} - void S_StartWitch() { stextsize = FALSE; diff --git a/Source/stores.h b/Source/stores.h index c86539855..50029f924 100644 --- a/Source/stores.h +++ b/Source/stores.h @@ -6,95 +6,33 @@ #ifndef __STORES_H__ #define __STORES_H__ -extern int stextup; -extern int storenumh; -extern int stextlhold; extern ItemStruct boyitem; -extern int stextshold; extern ItemStruct premiumitem[SMITH_PREMIUM_ITEMS]; extern BYTE *pSTextBoxCels; extern int premiumlevel; extern int talker; -extern STextStruct stext[STORE_LINES]; -extern char stextsize; -extern int stextsmax; -extern int InStoreFlag; -extern ItemStruct storehold[48]; -extern int gossipstart; #ifdef HELLFIRE extern ItemStruct witchitem[25]; #else extern ItemStruct witchitem[20]; #endif -extern BOOL stextscrl; extern int numpremium; extern ItemStruct healitem[20]; extern ItemStruct golditem; -extern char storehidx[48]; extern BYTE *pSTextSlidCels; -extern int stextvhold; -extern int stextsel; -extern char stextscrldbtn; -extern int gossipend; extern BYTE *pSPentSpn2Cels; -extern int stextsval; extern int boylevel; extern ItemStruct smithitem[SMITH_ITEMS]; extern int stextdown; -extern char stextscrlubtn; extern char stextflag; void InitStores(); void SetupTownStores(); void FreeStoreMem(); -void DrawSTextBack(); void PrintSString(int x, int y, BOOL cjustflag, const char *str, char col, int val); void DrawSLine(int y); -void DrawSSlider(int y1, int y2); void DrawSTextHelp(); void ClearSText(int s, int e); -void AddSLine(int y); -void AddSTextVal(int y, int val); -void OffsetSTextY(int y, int yo); -void AddSText(int x, int y, BOOL j, const char *str, char clr, BOOL sel); -void StoreAutoPlace(); -void S_StartSmith(); -void S_ScrollSBuy(int idx); -void PrintStoreItem(ItemStruct *x, int l, char iclr); -void S_StartSBuy(); -void S_ScrollSPBuy(int idx); -BOOL S_StartSPBuy(); -BOOL SmithSellOk(int i); -void S_ScrollSSell(int idx); -void S_StartSSell(); -BOOL SmithRepairOk(int i); -void S_StartSRepair(); -void AddStoreHoldRepair(ItemStruct *itm, int i); -void S_StartWitch(); -void S_ScrollWBuy(int idx); -void S_StartWBuy(); -BOOL WitchSellOk(int i); -void S_StartWSell(); -BOOL WitchRechargeOk(int i); -void AddStoreHoldRecharge(ItemStruct itm, int i); -void S_StartWRecharge(); -void S_StartNoMoney(); -void S_StartNoRoom(); -void S_StartConfirm(); -void S_StartBoy(); -void S_StartBBoy(); -void S_StartHealer(); -void S_ScrollHBuy(int idx); -void S_StartHBuy(); -void S_StartStory(); -BOOL IdItemOk(ItemStruct *i); -void AddStoreHoldId(ItemStruct itm, int i); -void S_StartSIdentify(); -void S_StartIdShow(); -void S_StartTalk(); -void S_StartTavern(); -void S_StartBarMaid(); -void S_StartDrunk(); void StartStore(char s); void DrawSText(); void STextESC(); @@ -102,40 +40,9 @@ void STextUp(); void STextDown(); void STextPrior(); void STextNext(); -void S_SmithEnter(); void SetGoldCurs(int pnum, int i); void SetSpdbarGoldCurs(int pnum, int i); void TakePlrsMoney(int cost); -void SmithBuyItem(); -void S_SBuyEnter(); -void SmithBuyPItem(); -void S_SPBuyEnter(); -BOOL StoreGoldFit(int idx); -void PlaceStoreGold(int v); -void StoreSellItem(); -void S_SSellEnter(); -void SmithRepairItem(); -void S_SRepairEnter(); -void S_WitchEnter(); -void WitchBuyItem(); -void S_WBuyEnter(); -void S_WSellEnter(); -void WitchRechargeItem(); -void S_WRechargeEnter(); -void S_BoyEnter(); -void BoyBuyItem(); -void HealerBuyItem(); -void S_BBuyEnter(); -void StoryIdItem(); -void S_ConfirmEnter(); -void S_HealerEnter(); -void S_HBuyEnter(); -void S_StoryEnter(); -void S_SIDEnter(); -void S_TalkEnter(); -void S_TavernEnter(); -void S_BarmaidEnter(); -void S_DrunkEnter(); void STextEnter(); void CheckStoreBtn(); void ReleaseStoreBtn(); @@ -143,6 +50,5 @@ void ReleaseStoreBtn(); /* rdata */ extern int SStringY[24]; -extern const char *const talkname[9]; #endif /* __STORES_H__ */ From 4bd9023bcffbdacd216920e6e396c5f7e4d0cff8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 04:55:28 +0100 Subject: [PATCH 16/23] Reorder sync.cpp --- Source/sync.cpp | 162 ++++++++++++++++++++++++------------------------ Source/sync.h | 10 --- 2 files changed, 81 insertions(+), 91 deletions(-) diff --git a/Source/sync.cpp b/Source/sync.cpp index 197e8207b..eec751629 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -11,50 +11,7 @@ WORD sgwLRU[MAXMONSTERS]; int sgnSyncItem; int sgnSyncPInv; -DWORD sync_all_monsters(const BYTE *pbBuf, DWORD dwMaxLen) -{ - TSyncHeader *pHdr; - int i; - BOOL sync; - - if (nummonsters < 1) { - return dwMaxLen; - } - if (dwMaxLen < sizeof(*pHdr) + sizeof(TSyncMonster)) { - return dwMaxLen; - } - - pHdr = (TSyncHeader *)pbBuf; - pbBuf += sizeof(*pHdr); - dwMaxLen -= sizeof(*pHdr); - - pHdr->bCmd = CMD_SYNCDATA; - pHdr->bLevel = currlevel; - pHdr->wLen = 0; - SyncPlrInv(pHdr); - assert(dwMaxLen <= 0xffff); - sync_one_monster(); - - for (i = 0; i < nummonsters && dwMaxLen >= sizeof(TSyncMonster); i++) { - sync = FALSE; - if (i < 2) { - sync = sync_monster_active2((TSyncMonster *)pbBuf); - } - if (!sync) { - sync = sync_monster_active((TSyncMonster *)pbBuf); - } - if (!sync) { - break; - } - pbBuf += sizeof(TSyncMonster); - pHdr->wLen += sizeof(TSyncMonster); - dwMaxLen -= sizeof(TSyncMonster); - } - - return dwMaxLen; -} - -void sync_one_monster() +static void sync_one_monster() { int i, m; @@ -69,7 +26,19 @@ void sync_one_monster() } } -BOOL sync_monster_active(TSyncMonster *p) +static void sync_monster_pos(TSyncMonster *p, int ndx) +{ + p->_mndx = ndx; + p->_mx = monster[ndx]._mx; + p->_my = monster[ndx]._my; + p->_menemy = encode_enemy(ndx); + p->_mdelta = sync_word_6AA708[ndx] > 255 ? 255 : sync_word_6AA708[ndx]; + + sync_word_6AA708[ndx] = 0xFFFF; + sgwLRU[ndx] = monster[ndx]._msquelch == 0 ? 0xFFFF : 0xFFFE; +} + +static BOOL sync_monster_active(TSyncMonster *p) { int i, m, ndx; DWORD lru; @@ -93,19 +62,7 @@ BOOL sync_monster_active(TSyncMonster *p) return TRUE; } -void sync_monster_pos(TSyncMonster *p, int ndx) -{ - p->_mndx = ndx; - p->_mx = monster[ndx]._mx; - p->_my = monster[ndx]._my; - p->_menemy = encode_enemy(ndx); - p->_mdelta = sync_word_6AA708[ndx] > 255 ? 255 : sync_word_6AA708[ndx]; - - sync_word_6AA708[ndx] = 0xFFFF; - sgwLRU[ndx] = monster[ndx]._msquelch == 0 ? 0xFFFF : 0xFFFE; -} - -BOOL sync_monster_active2(TSyncMonster *p) +static BOOL sync_monster_active2(TSyncMonster *p) { int i, m, ndx; DWORD lru; @@ -133,7 +90,7 @@ BOOL sync_monster_active2(TSyncMonster *p) return TRUE; } -void SyncPlrInv(TSyncHeader *pHdr) +static void SyncPlrInv(TSyncHeader *pHdr) { int ii; ItemStruct *pItem; @@ -191,41 +148,50 @@ void SyncPlrInv(TSyncHeader *pHdr) } } -DWORD sync_update(int pnum, const BYTE *pbBuf) +DWORD sync_all_monsters(const BYTE *pbBuf, DWORD dwMaxLen) { TSyncHeader *pHdr; - WORD wLen; - - pHdr = (TSyncHeader *)pbBuf; - pbBuf += sizeof(*pHdr); + int i; + BOOL sync; - if (pHdr->bCmd != CMD_SYNCDATA) { - app_fatal("bad sync command"); + if (nummonsters < 1) { + return dwMaxLen; + } + if (dwMaxLen < sizeof(*pHdr) + sizeof(TSyncMonster)) { + return dwMaxLen; } - /// ASSERT: assert(gbBufferMsgs != BUFFER_PROCESS); + pHdr = (TSyncHeader *)pbBuf; + pbBuf += sizeof(*pHdr); + dwMaxLen -= sizeof(*pHdr); - if (gbBufferMsgs == 1) { - return pHdr->wLen + sizeof(*pHdr); - } - if (pnum == myplr) { - return pHdr->wLen + sizeof(*pHdr); - } + pHdr->bCmd = CMD_SYNCDATA; + pHdr->bLevel = currlevel; + pHdr->wLen = 0; + SyncPlrInv(pHdr); + assert(dwMaxLen <= 0xffff); + sync_one_monster(); - for (wLen = pHdr->wLen; wLen >= sizeof(TSyncMonster); wLen -= sizeof(TSyncMonster)) { - if (currlevel == pHdr->bLevel) { - sync_monster(pnum, (TSyncMonster *)pbBuf); + for (i = 0; i < nummonsters && dwMaxLen >= sizeof(TSyncMonster); i++) { + sync = FALSE; + if (i < 2) { + sync = sync_monster_active2((TSyncMonster *)pbBuf); + } + if (!sync) { + sync = sync_monster_active((TSyncMonster *)pbBuf); + } + if (!sync) { + break; } - delta_sync_monster((TSyncMonster *)pbBuf, pHdr->bLevel); pbBuf += sizeof(TSyncMonster); + pHdr->wLen += sizeof(TSyncMonster); + dwMaxLen -= sizeof(TSyncMonster); } - assert(wLen == 0); - - return pHdr->wLen + sizeof(*pHdr); + return dwMaxLen; } -void sync_monster(int pnum, const TSyncMonster *p) +static void sync_monster(int pnum, const TSyncMonster *p) { int i, ndx, md, mdx, mdy; DWORD delta; @@ -287,6 +253,40 @@ void sync_monster(int pnum, const TSyncMonster *p) decode_enemy(ndx, p->_menemy); } +DWORD sync_update(int pnum, const BYTE *pbBuf) +{ + TSyncHeader *pHdr; + WORD wLen; + + pHdr = (TSyncHeader *)pbBuf; + pbBuf += sizeof(*pHdr); + + if (pHdr->bCmd != CMD_SYNCDATA) { + app_fatal("bad sync command"); + } + + /// ASSERT: assert(gbBufferMsgs != BUFFER_PROCESS); + + if (gbBufferMsgs == 1) { + return pHdr->wLen + sizeof(*pHdr); + } + if (pnum == myplr) { + return pHdr->wLen + sizeof(*pHdr); + } + + for (wLen = pHdr->wLen; wLen >= sizeof(TSyncMonster); wLen -= sizeof(TSyncMonster)) { + if (currlevel == pHdr->bLevel) { + sync_monster(pnum, (TSyncMonster *)pbBuf); + } + delta_sync_monster((TSyncMonster *)pbBuf, pHdr->bLevel); + pbBuf += sizeof(TSyncMonster); + } + + assert(wLen == 0); + + return pHdr->wLen + sizeof(*pHdr); +} + void sync_init() { sgnMonsters = 16 * myplr; diff --git a/Source/sync.h b/Source/sync.h index 0ebccaea7..c667998a9 100644 --- a/Source/sync.h +++ b/Source/sync.h @@ -6,17 +6,7 @@ #ifndef __SYNC_H__ #define __SYNC_H__ -extern WORD sync_word_6AA708[MAXMONSTERS]; -extern int sgnMonsters; -extern WORD sgwLRU[MAXMONSTERS]; -extern int sgnSyncItem; - DWORD sync_all_monsters(const BYTE *pbBuf, DWORD dwMaxLen); -void sync_one_monster(); -BOOL sync_monster_active(TSyncMonster *p); -void sync_monster_pos(TSyncMonster *p, int ndx); -BOOL sync_monster_active2(TSyncMonster *p); -void SyncPlrInv(TSyncHeader *pHdr); DWORD sync_update(int pnum, const BYTE *pbBuf); void sync_monster(int pnum, const TSyncMonster *p); void sync_init(); From 3fc443ee6a16d76374dd8e07e766cdf7c1460310 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 04:58:33 +0100 Subject: [PATCH 17/23] Clean up textdat.h --- Source/textdat.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/textdat.h b/Source/textdat.h index df8b60997..bd436ad51 100644 --- a/Source/textdat.h +++ b/Source/textdat.h @@ -7,6 +7,5 @@ #define __TEXTDAT_H__ extern const TextDataStruct alltext[]; -extern const DWORD gdwAllTextEntries; #endif /* __TEXTDAT_H__ */ From 1c31f803bc190c1066714c7d78aa32ea5bc63406 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:02:22 +0100 Subject: [PATCH 18/23] Clean up themes.h --- Source/themes.h | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/Source/themes.h b/Source/themes.h index 35c4cb083..1fb2f8db9 100644 --- a/Source/themes.h +++ b/Source/themes.h @@ -8,59 +8,12 @@ extern int numthemes; extern BOOL armorFlag; -extern BOOL ThemeGoodIn[4]; extern BOOL weaponFlag; -extern BOOL treasureFlag; -extern BOOL mFountainFlag; -extern BOOL cauldronFlag; -extern BOOL tFountainFlag; extern int zharlib; -extern int themex; -extern int themey; -extern int themeVar1; extern ThemeStruct themes[MAXTHEMES]; -extern BOOL pFountainFlag; -extern BOOL bFountainFlag; -extern BOOL bCrossFlag; -BOOL TFit_Shrine(int i); -BOOL TFit_Obj5(int t); -BOOL TFit_SkelRoom(int t); -BOOL TFit_GoatShrine(int t); -BOOL CheckThemeObj3(int xp, int yp, int t, int f); -BOOL TFit_Obj3(int t); -BOOL CheckThemeReqs(int t); -BOOL SpecialThemeFit(int i, int t); -BOOL CheckThemeRoom(int tv); void InitThemes(); void HoldThemeRooms(); -void PlaceThemeMonsts(int t, int f); -void Theme_Barrel(int t); -void Theme_Shrine(int t); -void Theme_MonstPit(int t); -void Theme_SkelRoom(int t); -void Theme_Treasure(int t); -void Theme_Library(int t); -void Theme_Torture(int t); -void Theme_BloodFountain(int t); -void Theme_Decap(int t); -void Theme_PurifyingFountain(int t); -void Theme_ArmorStand(int t); -void Theme_GoatShrine(int t); -void Theme_Cauldron(int t); -void Theme_MurkyFountain(int t); -void Theme_TearFountain(int t); -void Theme_BrnCross(int t); -void Theme_WeaponRack(int t); -void UpdateL4Trans(); void CreateThemeRooms(); -/* rdata */ - -extern int ThemeGood[4]; -extern int trm5x[25]; -extern int trm5y[25]; -extern int trm3x[9]; -extern int trm3y[9]; - #endif /* __THEMES_H__ */ From 964539cf7d3d0cc2bdf239bc6e48ae780b541e8a Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:12:21 +0100 Subject: [PATCH 19/23] Clean up town.h --- Source/town.h | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Source/town.h b/Source/town.h index aea6408fc..e1bea8026 100644 --- a/Source/town.h +++ b/Source/town.h @@ -6,30 +6,12 @@ #ifndef __TOWN_H__ #define __TOWN_H__ -void town_clear_upper_buf(BYTE *pBuff); -void town_clear_low_buf(BYTE *pBuff); -void town_special_lower(BYTE *pBuff, int nCel); -void town_special_upper(BYTE *pBuff, int nCel); -void town_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int sx, int sy); void town_draw_clipped_town(BYTE *pBuff, int sx, int sy, int dx, int dy, int eflag); -void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag); -void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int row, int CelSkip, int sx, int sy); void town_draw_clipped_town_2(BYTE *pBuff, int sx, int sy, int row, int CelSkip, int dx, int dy, int eflag); -void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int eflag); -void town_draw_e_flag(BYTE *pBuff, int x, int y, int row, int CelCap, int sx, int sy); void town_draw_town_all(BYTE *pBuff, int x, int y, int row, int CelCap, int sx, int sy, int eflag); -void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int eflag); -void T_DrawGame(int x, int y); -void T_DrawZoom(int x, int y); void T_DrawView(int StartX, int StartY); -void SetTownMicros(); -void T_FillSector(BYTE *P3Tiles, BYTE *pSector, int xi, int yi, int w, int h); -void T_FillTile(BYTE *P3Tiles, int xx, int yy, int t); -void T_Pass3(); #ifdef HELLFIRE void town_4751C6(); -void town_475379(); -void town_47552C(); void town_475595(); #endif void CreateTown(int entry); From 55cd299d750806799cb0f43c2b1a6b8f48c853fb Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:20:37 +0100 Subject: [PATCH 20/23] Reorder towners.cpp --- Source/towners.cpp | 54 +++++++++++++++++++++++----------------------- Source/towners.h | 38 -------------------------------- 2 files changed, 27 insertions(+), 65 deletions(-) diff --git a/Source/towners.cpp b/Source/towners.cpp index efd692a0a..90b95835f 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -158,6 +158,33 @@ QuestTalkData Qtalklist[] = { /** Specifies the active sound effect ID for interacting with cows. */ int CowPlaying = -1; +static void CowSFX(int pnum) +{ + if (CowPlaying == -1 || !effect_is_playing(CowPlaying)) { + sgdwCowClicks++; +#ifdef SPAWN + if (sgdwCowClicks == 4) { + sgdwCowClicks = 0; + CowPlaying = TSFX_COW2; + } else { + CowPlaying = TSFX_COW1; + } +#else + if (sgdwCowClicks >= 8) { + PlaySfxLoc(TSFX_COW1, plr[pnum]._px, plr[pnum]._py + 5); + sgdwCowClicks = 4; + CowPlaying = snSFX[sgnCowMsg][plr[pnum]._pClass]; /* snSFX is local */ + sgnCowMsg++; + if (sgnCowMsg >= 3) + sgnCowMsg = 0; + } else { + CowPlaying = sgdwCowClicks == 4 ? TSFX_COW2 : TSFX_COW1; + } +#endif + PlaySfxLoc(CowPlaying, plr[pnum]._px, plr[pnum]._py); + } +} + int GetActiveTowner(int t) { int i; @@ -1387,30 +1414,3 @@ void TalkToTowner(int p, int t) #endif } } - -void CowSFX(int pnum) -{ - if (CowPlaying == -1 || !effect_is_playing(CowPlaying)) { - sgdwCowClicks++; -#ifdef SPAWN - if (sgdwCowClicks == 4) { - sgdwCowClicks = 0; - CowPlaying = TSFX_COW2; - } else { - CowPlaying = TSFX_COW1; - } -#else - if (sgdwCowClicks >= 8) { - PlaySfxLoc(TSFX_COW1, plr[pnum]._px, plr[pnum]._py + 5); - sgdwCowClicks = 4; - CowPlaying = snSFX[sgnCowMsg][plr[pnum]._pClass]; /* snSFX is local */ - sgnCowMsg++; - if (sgnCowMsg >= 3) - sgnCowMsg = 0; - } else { - CowPlaying = sgdwCowClicks == 4 ? TSFX_COW2 : TSFX_COW1; - } -#endif - PlaySfxLoc(CowPlaying, plr[pnum]._px, plr[pnum]._py); - } -} diff --git a/Source/towners.h b/Source/towners.h index 3ffd82253..c38deb755 100644 --- a/Source/towners.h +++ b/Source/towners.h @@ -8,49 +8,11 @@ extern TownerStruct towner[NUM_TOWNERS]; -int GetActiveTowner(int t); -void SetTownerGPtrs(BYTE *pData, BYTE **pAnim); -void NewTownerAnim(int tnum, BYTE *pAnim, int numFrames, int Delay); -void InitTownerInfo(int i, int w, int sel, int t, int x, int y, int ao, int tp); -void InitQstSnds(int i); -void InitSmith(); -void InitBarOwner(); -void InitTownDead(); -void InitWitch(); -void InitBarmaid(); -void InitBoy(); -void InitHealer(); -void InitTeller(); -void InitDrunk(); -void InitCows(); -#ifdef HELLFIRE -void InitFarmer(); -void InitCowFarmer(); -void InitGirl(); -#endif void InitTowners(); void FreeTownerGFX(); -void TownCtrlMsg(int i); -void TownBlackSmith(); -void TownBarOwner(); -void TownDead(); -void TownHealer(); -void TownStory(); -void TownDrunk(); -void TownBoy(); -void TownWitch(); -void TownBarMaid(); -void TownCow(); -#ifdef HELLFIRE -void TownFarmer(); -void TownCowFarmer(); -void TownGirl(); -#endif void ProcessTowners(); ItemStruct *PlrHasItem(int pnum, int item, int &i); -void TownerTalk(int first, int t); void TalkToTowner(int p, int t); -void CowSFX(int pnum); /* data */ From 0163020ddef72afc1ba2182fdc0bc64c5b8e63f8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:24:21 +0100 Subject: [PATCH 21/23] Clean up trigs.h --- Source/trigs.h | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/Source/trigs.h b/Source/trigs.h index 051615217..2bcbc8649 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -6,11 +6,9 @@ #ifndef __TRIGS_H__ #define __TRIGS_H__ -extern BOOL townwarps[3]; extern BOOL trigflag; extern int numtrigs; extern TriggerStruct trigs[MAXTRIGGERS]; -extern int TWarpFrom; void InitNoTriggers(); void InitTownTriggers(); @@ -22,33 +20,8 @@ void InitSKingTriggers(); void InitSChambTriggers(); void InitPWaterTriggers(); void InitVPTriggers(); -BOOL ForceTownTrig(); -BOOL ForceL1Trig(); -BOOL ForceL2Trig(); -BOOL ForceL3Trig(); -BOOL ForceL4Trig(); void Freeupstairs(); -BOOL ForceSKingTrig(); -BOOL ForceSChambTrig(); -BOOL ForcePWaterTrig(); void CheckTrigForce(); void CheckTriggers(); -/* rdata */ - -extern int TownDownList[11]; -extern int TownWarp1List[13]; -extern int L1UpList[12]; -extern int L1DownList[10]; -extern int L2UpList[3]; -extern int L2DownList[5]; -extern int L2TWarpUpList[3]; -extern int L3UpList[15]; -extern int L3DownList[9]; -extern int L3TWarpUpList[14]; -extern int L4UpList[4]; -extern int L4DownList[6]; -extern int L4TWarpUpList[4]; -extern int L4PentaList[33]; - #endif /* __TRIGS_H__ */ From 68c163d928bdf2876e76907152a83cda9ba9d830 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:35:19 +0100 Subject: [PATCH 22/23] Fix build --- Source/trigs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/trigs.h b/Source/trigs.h index 2bcbc8649..95ce2ea61 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -9,6 +9,7 @@ extern BOOL trigflag; extern int numtrigs; extern TriggerStruct trigs[MAXTRIGGERS]; +extern int TWarpFrom; void InitNoTriggers(); void InitTownTriggers(); From 4251527eb4a7b99b07a0f2154b67212496bbdcb5 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 9 Nov 2020 05:35:31 +0100 Subject: [PATCH 23/23] Reorder wave.cpp --- Source/wave.cpp | 174 ++++++++++++++++++++++++------------------------ Source/wave.h | 7 -- 2 files changed, 87 insertions(+), 94 deletions(-) diff --git a/Source/wave.cpp b/Source/wave.cpp index 8b9b6b402..4e00b9fa4 100644 --- a/Source/wave.cpp +++ b/Source/wave.cpp @@ -6,6 +6,20 @@ #include "all.h" #include "../3rdParty/Storm/Source/storm.h" +static void WGetFileArchive(HANDLE hsFile, DWORD *retries, const char *FileName) +{ + HANDLE archive; + + if (*retries >= 5) + FileErrDlg(FileName); + + if (hsFile && SFileGetFileArchive(hsFile, &archive) && archive != diabdat_mpq) { + Sleep(20); + (*retries)++; + } else if (!InsertCDDlg()) + FileErrDlg(FileName); +} + void WCloseFile(HANDLE file) { SFileCloseFile(file); @@ -22,20 +36,6 @@ LONG WGetFileSize(HANDLE hsFile, DWORD *lpFileSizeHigh) return ret; } -void WGetFileArchive(HANDLE hsFile, DWORD *retries, const char *FileName) -{ - HANDLE archive; - - if (*retries >= 5) - FileErrDlg(FileName); - - if (hsFile && SFileGetFileArchive(hsFile, &archive) && archive != diabdat_mpq) { - Sleep(20); - (*retries)++; - } else if (!InsertCDDlg()) - FileErrDlg(FileName); -} - BOOL WOpenFile(const char *FileName, HANDLE *phsFile, BOOL mayNotExist) { DWORD retry = 0; @@ -76,71 +76,25 @@ int WSetFilePointer(HANDLE file1, int offset, HANDLE file2, int whence) return result; } -BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx) -{ - BOOL ret; - MEMFILE wave_file; - - AllocateMemFile(hsFile, &wave_file, 0); - ret = ReadWaveFile(&wave_file, pwfx, NULL); - FreeMemFile(&wave_file); - return ret; -} - -void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos) +static void FillMemFile(MEMFILE *pMemFile) { - DWORD length; - - memset(pMemFile, 0, sizeof(*pMemFile)); - pMemFile->end = WGetFileSize(hsFile, NULL); - length = 4096; - if (dwPos > length) - length = dwPos; - pMemFile->buf_len = length; - if (length >= pMemFile->end) - length = pMemFile->end; - pMemFile->buf_len = length; - pMemFile->buf = DiabloAllocPtr(length); - pMemFile->file = hsFile; + DWORD to_read; + WSetFilePointer(pMemFile->file, pMemFile->offset, NULL, FILE_BEGIN); + to_read = pMemFile->end - pMemFile->offset; + if (pMemFile->buf_len < to_read) + to_read = pMemFile->buf_len; + if (to_read) + WReadFile(pMemFile->file, pMemFile->buf, to_read); + pMemFile->dist = 0; + pMemFile->bytes_to_read = to_read; } -void FreeMemFile(MEMFILE *pMemFile) +static void FreeMemFile(MEMFILE *pMemFile) { MemFreeDbg(pMemFile->buf); } -BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk) -{ - MMCKINFO hdr; - CKINFO fmt; - PCMWAVEFORMAT wf; - - if (!ReadMemFile(pMemFile, &hdr, 12)) - return FALSE; - if (hdr.ckid != FOURCC_RIFF || hdr.fccType != MAKEFOURCC('W', 'A', 'V', 'E')) - return FALSE; - if (!ReadWaveSection(pMemFile, MAKEFOURCC('f', 'm', 't', ' '), &fmt)) - return FALSE; - if (fmt.dwSize < sizeof(PCMWAVEFORMAT)) - return FALSE; - if (!ReadMemFile(pMemFile, &wf, sizeof(wf))) - return FALSE; - if (SeekMemFile(pMemFile, fmt.dwSize - sizeof(wf), FILE_CURRENT) == -1) - return FALSE; - - pwfx->cbSize = 0; - pwfx->wFormatTag = wf.wf.wFormatTag; - pwfx->nChannels = wf.wf.nChannels; - pwfx->nSamplesPerSec = wf.wf.nSamplesPerSec; - pwfx->nAvgBytesPerSec = wf.wf.nAvgBytesPerSec; - pwfx->nBlockAlign = wf.wf.nBlockAlign; - pwfx->wBitsPerSample = wf.wBitsPerSample; - if (chunk == NULL) - return TRUE; - return ReadWaveSection(pMemFile, MAKEFOURCC('d', 'a', 't', 'a'), chunk); -} - -BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length) +static BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length) { while (length) { size_t to_copy; @@ -161,20 +115,7 @@ BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length) return TRUE; } -void FillMemFile(MEMFILE *pMemFile) -{ - DWORD to_read; - WSetFilePointer(pMemFile->file, pMemFile->offset, NULL, FILE_BEGIN); - to_read = pMemFile->end - pMemFile->offset; - if (pMemFile->buf_len < to_read) - to_read = pMemFile->buf_len; - if (to_read) - WReadFile(pMemFile->file, pMemFile->buf, to_read); - pMemFile->dist = 0; - pMemFile->bytes_to_read = to_read; -} - -int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod) +static int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod) { if (lDist < pMemFile->bytes_to_read) { pMemFile->bytes_to_read -= lDist; @@ -185,7 +126,7 @@ int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod) return pMemFile->offset; } -BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk) +static BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk) { DWORD hdr[2]; @@ -203,6 +144,65 @@ BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk) return chunk->dwOffset != (DWORD)-1; } +static BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk) +{ + MMCKINFO hdr; + CKINFO fmt; + PCMWAVEFORMAT wf; + + if (!ReadMemFile(pMemFile, &hdr, 12)) + return FALSE; + if (hdr.ckid != FOURCC_RIFF || hdr.fccType != MAKEFOURCC('W', 'A', 'V', 'E')) + return FALSE; + if (!ReadWaveSection(pMemFile, MAKEFOURCC('f', 'm', 't', ' '), &fmt)) + return FALSE; + if (fmt.dwSize < sizeof(PCMWAVEFORMAT)) + return FALSE; + if (!ReadMemFile(pMemFile, &wf, sizeof(wf))) + return FALSE; + if (SeekMemFile(pMemFile, fmt.dwSize - sizeof(wf), FILE_CURRENT) == -1) + return FALSE; + + pwfx->cbSize = 0; + pwfx->wFormatTag = wf.wf.wFormatTag; + pwfx->nChannels = wf.wf.nChannels; + pwfx->nSamplesPerSec = wf.wf.nSamplesPerSec; + pwfx->nAvgBytesPerSec = wf.wf.nAvgBytesPerSec; + pwfx->nBlockAlign = wf.wf.nBlockAlign; + pwfx->wBitsPerSample = wf.wBitsPerSample; + if (chunk == NULL) + return TRUE; + return ReadWaveSection(pMemFile, MAKEFOURCC('d', 'a', 't', 'a'), chunk); +} + +BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx) +{ + BOOL ret; + MEMFILE wave_file; + + AllocateMemFile(hsFile, &wave_file, 0); + ret = ReadWaveFile(&wave_file, pwfx, NULL); + FreeMemFile(&wave_file); + return ret; +} + +void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos) +{ + DWORD length; + + memset(pMemFile, 0, sizeof(*pMemFile)); + pMemFile->end = WGetFileSize(hsFile, NULL); + length = 4096; + if (dwPos > length) + length = dwPos; + pMemFile->buf_len = length; + if (length >= pMemFile->end) + length = pMemFile->end; + pMemFile->buf_len = length; + pMemFile->buf = DiabloAllocPtr(length); + pMemFile->file = hsFile; +} + BYTE *LoadWaveFile(HANDLE hsFile, WAVEFORMATEX *pwfx, CKINFO *chunk) { MEMFILE wave_file; diff --git a/Source/wave.h b/Source/wave.h index da21f9925..80f3d4486 100644 --- a/Source/wave.h +++ b/Source/wave.h @@ -8,18 +8,11 @@ void WCloseFile(HANDLE file); LONG WGetFileSize(HANDLE hsFile, DWORD *lpFileSizeHigh); -void WGetFileArchive(HANDLE hsFile, DWORD *retry, const char *FileName); BOOL WOpenFile(const char *FileName, HANDLE *phsFile, BOOL mayNotExist); void WReadFile(HANDLE hsFile, LPVOID buf, DWORD to_read); int WSetFilePointer(HANDLE file1, int offset, HANDLE file2, int whence); BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx); void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos); -void FreeMemFile(MEMFILE *pMemFile); -BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk); -BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length); -void FillMemFile(MEMFILE *pMemFile); -int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod); -BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk); BYTE *LoadWaveFile(HANDLE hsFile, WAVEFORMATEX *pwfx, CKINFO *chunk); #endif /* __WAVE_H__ */