]> granicus.if.org Git - nethack/commitdiff
Windows Makefiles easier soundlib opt-in or opt-out
authornhmall <nhmall@nethack.org>
Mon, 30 Jan 2023 03:07:31 +0000 (22:07 -0500)
committernhmall <nhmall@nethack.org>
Mon, 30 Jan 2023 03:07:31 +0000 (22:07 -0500)
include/windconf.h
sys/windows/Makefile.mingw32
sys/windows/Makefile.nmake

index 5addbfe7137fbf540c25facc9d0c775a1caeb875..6eb5b268734b868e327e7fbb43a145fbc9e482fd 100644 (file)
 extern void interject_assistance(int, int, genericptr_t, genericptr_t);
 extern void interject(int);
 
-#if defined(SND_LIB_WINDSOUND)
-#define SND_SOUNDEFFECTS_AUTOMAP
-#endif
-
 /*
  *===============================================
  * Compiler-specific adjustments
index db5321ee7b919cc389a17d01cad8f9f29b6914fa..352072f2c1f4e2463541e21f8244c38eccad1dca 100644 (file)
@@ -39,12 +39,15 @@ GAMEDIR = ../binary
 
 #
 #---------------------------------------------------------------
-# Do you want to include any sound libraries? If so leave the
-# appropriate compile macro below uncommented, or add others
-# that are available.
+# Do you want to include integration with any sound libraries that work with
+# this Makefile?  Add the list below. If you change the list do 'nmake clean'.
 #
+# There is glue in here for the following: windsound fmod
+# Obtaining the 3rd party library, including its .h files, is up to you.
+#
+# windsound uses built-in Microsoft API's, no 3rd party download is required.
 
-SOUNDLIBDEFS = -DSND_LIB_WINDSOUND -DUSER_SOUNDS
+SOUND_LIBRARIES = windsound
 
 #
 #---------------------------------------------------------------
@@ -290,6 +293,12 @@ else # MINGW64
 rc = windres --target=pe-x86-64
 endif
 
+ifeq "$(MSYSTEM)" "MINGW32"
+arch = x86
+else # MINGW64
+arch = x64
+endif
+
 #
 # Handle user settings
 #
@@ -744,32 +753,106 @@ endif  # GIT_AVAILABLE
 endif  # INTERNET_AVAILABLE
 
 #==========================================
-# nethackw
+# Soundlib Choices
 #==========================================
-COREOBJS = $(addsuffix .o, allmain alloc apply artifact attrib ball bones botl cmd cppregex \
-          dbridge decl detect dig display dlb do do_name do_wear \
-          dog dogmove dokick dothrow drawing dungeon \
-          eat end engrave exper explode extralev files fountain \
-          hack hacklib insight invent isaac64 light lock \
-          mail makemon mcastu mdlib mhitm mhitu minion mklev mkmap mkmaze mkobj mkroom \
-          mon mondata monmove monst mplayer mthrowu muse music \
-          nhlobj nhlsel nhlua windsound o_init objects objnam options \
-          pager pickup pline polyself potion pray priest quest questpgr \
-          random read rect region restore rip rnd role rumors \
-          safeproc save sfstruct shk shknam sit sounds sp_lev spell steal steed symbols sys \
-          teleport timeout topten track trap u_init uhitm utf8map vault version vision \
-          weapon were wield windmain windows windsys wizard worm worn write zap)
 
-CFLAGSW = $(CFLAGS) $(CFLAGSXTRA) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
-CPPFLAGSW = $(CFLAGS) $(CPPFLAGSXTRA) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
+SNDLIBCHOICES = $(strip $(SOUND_LIBRARIES))
 
-ONHW = $(O)nethackw
-NHWONLY = $(addsuffix .o, mhaskyn mhdlg mhfont mhinput mhmain mhmap mhmenu \
-         mhmsgwnd mhrip mhsplash mhstatus mhtext mswproc tile NetHackW win10)
-NHWOBJS = $(addprefix $(ONHW)/, $(COREOBJS) $(NHWONLY))
-DATEW_O  = $(addsuffix .o, $(addprefix $(ONHW)/, date))
-TILEFILES = $(addprefix $(WSHR)/, monsters.txt objects.txt other.txt)
-BMPS = $(addprefix $(MSWIN)/, $(addsuffix .bmp, mnsel mnselcnt mnunsel petmark pilemark rip splash tiles))
+#
+# windsound
+#
+WINDSOUND = $(findstring windsound, $(SNDLIBCHOICES))
+ifeq "$(WINDSOUND)" "windsound"
+$(info Including windsound integration)
+SOUND_WINDSOUND=Y
+HAVE_SOUNDLIB=Y
+NEED_USERSOUNDS=Y
+NEED_SEAUTOMAP=Y
+NEED_WAV=Y
+#SOUNDLIBINCL +=
+SOUNDLIBDEFS += -DSND_LIB_WINDSOUND
+SOUNDLIBOBJS += windsound
+#WINDSOUNDLIBDIR =
+#SOUNDLIBLIBS +=
+#WINDSOUNDLIBDLL =
+#GAMEDIRDLLS +=
+endif
+
+#
+# fmod
+#
+FMOD = $(findstring fmod, $(SNDLIBCHOICES))
+ifeq "$(FMOD)" "fmod"
+$(info Including fmod integration)
+SOUND_FMOD=Y
+HAVE_SOUNDLIB=Y
+NEED_USERSOUNDS=Y
+NEED_SEAUTOMAP=Y
+NEED_WAV=Y
+FMODROOT = ../lib/fmod/api/core
+SOUNDLIBINCL += -I$(FMODROOT)/inc
+SOUNDLIBDEFS += -DSND_LIB_FMOD
+SOUNDLIBOBJS += fmod
+FMODLIBDIR = $(FMODROOT)/lib/$(arch)
+ifeq "$(arch)" "x86"
+SOUNDLIBLIBS += -L $(FMODLIBDIR)
+FMODLIBDLL = fmod_vc.dll
+SOUNDLIBLIBS += -lfmod
+else
+SOUNDLIBLIBS += -L $(FMODLIBDIR)
+FMODLIBDLL = fmod_vc.dll
+SOUNDLIBLIBS += $(FMODLIBDIR)/$(FMODLIBDLL)
+endif
+FMODDIR = ../sound/fmod
+GAMEDIRDLLS += $(GAMEDIR)/$(FMODLIBDLL)
+ifeq "$(arch)" "x86"
+FMODLINKLIB = $(FMODLIBDIR)/fmod_vc.lib
+else
+#x64 mingw32-x64 builds supposedly can link right with the DLL, no import lib
+FMODLINKLIB = $(FMODLIBDIR)/$(FMODLIBDLL)
+endif
+$(info ---------------------------------------------------------------------)
+$(info ** NOTES for fmod sound library integration **)
+$(info For fmod integration, this Makefile expects:)
+$(info fmod include directory    : $(FMODROOT)/inc)
+$(info fmod library directory    : $(FMODLIBDIR))
+$(info fmod library to link with : $(FMODLINKLIB))
+$(info fmod library dll          : $(FMODLIBDIR)/$(FMODLIBDLL))
+$(info ---------------------------------------------------------------------)
+FMOD_MISSING=
+ifeq (,$(wildcard $(FMODROOT)/inc))
+FMOD_MISSING += $(FMODROOT)\inc
+$(info Error: missing $(FMODROOT)/inc)
+endif
+ifeq (,$(wildcard $(FMODLIBDIR)))
+FMOD_MISSING += $(FMODLIBDIR)
+$(info Error: missing $(FMODLIBDIR))
+endif
+ifeq (,$(wildcard $(FMODLINKLIB)))
+FMOD_MISSING += $(FMODLINKLIB)
+$(info Error: missing $(FMODLINKLIB))
+endif
+ifeq (,$(wildcard $(FMODLIBDIR)/$(FMODLIBDLL)))
+FMOD_MISSING += $(FMODLIBDIR)/$(FMODLIBDLL)
+$(info Error: missing $(FMODLIBDIR)/$(FMODLIBDLL))
+endif
+ifneq "$(FMOD_MISSING)" ""
+$(error Error: Cannot proceed with fmod integration included)
+endif
+endif
+
+#==========================================
+# Soundlib Support
+#==========================================
+
+ifeq "$(HAVE_SOUNDLIB)" "Y"
+ifeq "$(NEED_USERSOUNDS)" "Y"
+SOUNDLIBDEFS += -DUSER_SOUNDS
+endif
+ifeq "$(NEED_SEAUTOMAP)" "Y"
+SOUNDLIBDEFS += -DSND_SOUNDEFFECTS_AUTOMAP
+endif
+ifeq "$(NEED_WAV)" "Y"
 WAVLIST = se_squeak_A se_squeak_B se_squeak_B_flat se_squeak_C \
        se_squeak_D se_squeak_D_flat se_squeak_E \
        se_squeak_E_flat se_squeak_F se_squeak_F_sharp \
@@ -792,13 +875,44 @@ WAVLIST = se_squeak_A se_squeak_B se_squeak_B_flat se_squeak_C \
        sound_Wooden_Harp_E sound_Wooden_Harp_F \
        sound_Wooden_Harp_G
 WAVS = $(addprefix $(SNDWAVDIR)/, $(addsuffix .wav, $(WAVLIST)))
+endif   # NEED_WAV
+endif   # HAVE_SOUNDLIB
+
+#==========================================
+# nethackw
+#==========================================
+COREOBJS = $(addsuffix .o, allmain alloc apply artifact attrib ball bones botl cmd cppregex \
+          dbridge decl detect dig display dlb do do_name do_wear \
+          dog dogmove dokick dothrow drawing dungeon \
+          eat end engrave exper explode extralev files fountain \
+          hack hacklib insight invent isaac64 light lock \
+          mail makemon mcastu mdlib mhitm mhitu minion mklev mkmap mkmaze mkobj mkroom \
+          mon mondata monmove monst mplayer mthrowu muse music \
+          nhlobj nhlsel nhlua windsound o_init objects objnam options \
+          pager pickup pline polyself potion pray priest quest questpgr \
+          random read rect region restore rip rnd role rumors \
+          safeproc save sfstruct shk shknam sit sounds sp_lev spell steal steed \
+          symbols sys teleport timeout topten track trap u_init uhitm utf8map \
+          vault version vision weapon were wield windmain windows windsys wizard \
+          worm worn write zap $(SOUNDLIBOBJS))
+
+CFLAGSW = $(CFLAGS) $(CFLAGSXTRA) $(SOUNDLIBINCL) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
+CPPFLAGSW = $(CFLAGS) $(CPPFLAGSXTRA) $(COMMONDEF) $(DLBFLG) -DTILES -D_WINDOWS -DMSWIN_GRAPHICS -DSAFEPROCS -DNOTTYGRAPHICS $(SOUNDLIBDEFS)
+
+ONHW = $(O)nethackw
+NHWONLY = $(addsuffix .o, mhaskyn mhdlg mhfont mhinput mhmain mhmap mhmenu \
+         mhmsgwnd mhrip mhsplash mhstatus mhtext mswproc tile NetHackW win10)
+NHWOBJS = $(addprefix $(ONHW)/, $(COREOBJS) $(NHWONLY))
+DATEW_O  = $(addsuffix .o, $(addprefix $(ONHW)/, date))
+TILEFILES = $(addprefix $(WSHR)/, monsters.txt objects.txt other.txt)
+BMPS = $(addprefix $(MSWIN)/, $(addsuffix .bmp, mnsel mnselcnt mnunsel petmark pilemark rip splash tiles))
 NHWRES = $(ONHW)/winres.o
 NHWTARGETS = $(GAMEDIR)/NetHackW.exe
 
 nethackw: $(NHWTARGETS)
 
 $(GAMEDIR)/NetHackW.exe: $(NHWOBJS) $(NHWRES) $(DATEW_O) $(LUALIB) | $(GAMEDIR)
-       $(ld) $(LDFLAGS) -mwindows $^ $(LIBS) -static -lstdc++ -o$@
+       $(ld) $(LDFLAGS) -mwindows $^ $(LIBS) -static -lstdc++ $(SOUNDLIBLIBS) -o$@
 
 $(ONHW)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONHW)
        $(cc) $(CFLAGSW) $< -o$@
@@ -820,8 +934,15 @@ $(ONHW)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONHW)
 $(ONHW)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONHW)
        $(cc) $(CFLAGSW) $< -o$@
 
-$(ONHW)/%.o: $(SNDSYS)/%.c $(NHLUAH) | $(ONHW)
+ifeq "$(SOUND_WINDSOUND)" "Y"
+$(ONHW)/%.o: ../sound/windsound/%.c $(NHLUAH) | $(ONHW)
        $(cc) $(CFLAGSW) $< -o$@
+endif
+
+ifeq "$(SOUND_FMOD)" "Y"
+$(ONHW)/%.o: ../sound/fmod/%.c $(NHLUAH) | $(ONHW)
+       $(cc) $(CFLAGSW) $< -o$@
+endif
 
 $(ONHW)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONHW)
        $(cc) $(CFLAGSW) $< -o$@
@@ -855,7 +976,7 @@ CLEAN_FILE += $(NHWTARGETS) $(NHWOBJS) $(NHWRES) $(BMPS) $(WAVS)
 #==========================================
 # nethack
 #==========================================
-CFLAGSNH = $(CFLAGSU) $(CFLAGSXTRA) -DNO_TILE_C -DSAFEPROCS -D_LIB -DWIN32CON $(SOUNDLIBDEFS)
+CFLAGSNH = $(CFLAGSU) $(CFLAGSXTRA) $(SOUNDLIBINCL) -DNO_TILE_C -DSAFEPROCS -D_LIB -DWIN32CON $(SOUNDLIBDEFS)
 CPPFLAGSNH = $(CFLAGSU) $(CPPFLAGSXTRA) -DNO_TILE_C -DSAFEPROCS -D_LIB -DWIN32CON $(SOUNDLIBDEFS)
 
 ONH = $(O)nethack
@@ -873,7 +994,7 @@ NHTARGET = $(GAMEDIR)/NetHack.exe
 
 nethack: $(NHTARGET)
 
-$(GAMEDIR)/NetHack.exe: $(NHOBJS) $(NHRES) $(DATE_O) $(LUALIB) $(PDCLIB) | $(GAMEDIR)
+$(GAMEDIR)/NetHack.exe: $(NHOBJS) $(NHRES) $(DATE_O) $(LUALIB) $(PDCLIB) $(SOUNDLIBLIBS) | $(GAMEDIR)
        $(ld) $(LDFLAGS) -mconsole $^ $(LIBS) -static -lstdc++ -o$@
 
 $(ONH)/%.o: $(SRC)/%.c $(NHLUAH) | $(ONH)
@@ -896,8 +1017,15 @@ $(ONH)/cppregex.o: $(SSYS)/cppregex.cpp $(NHLUAH) | $(ONH)
 $(ONH)/%.o: $(SSYS)/%.c $(NHLUAH) | $(ONH)
        $(cc) $(CFLAGSNH) $< -o$@
 
-$(ONH)/%.o: $(SNDSYS)/%.c $(NHLUAH) | $(ONH)
+ifeq "$(SOUND_WINDSOUND)" "Y"
+$(ONH)/%.o: ../sound/windsound/%.c $(NHLUAH) | $(ONH)
+       $(cc) $(CFLAGSNH) $< -o$@
+endif
+
+ifeq "$(SOUND_FMOD)" "Y"
+$(ONH)/%.o: ../sound/fmod/%.c $(NHLUAH) | $(ONH)
        $(cc) $(CFLAGSNH) $< -o$@
+endif
 
 $(ONH)/%.o: $(MSWSYS)/%.c $(NHLUAH) | $(ONH)
        $(cc) $(CFLAGSNH) $< -o$@
@@ -937,7 +1065,7 @@ CLEAN_FILE += $(NHTARGET) $(NHOBJS) $(NHRES)
 
 all: install
 
-TO_INSTALL = $(GAMEDIR)/NetHack.exe $(RTARGETS) \
+TO_INSTALL = $(GAMEDIR)/NetHack.exe $(RTARGETS) $(GAMEDIRDLLS) \
             $(addprefix $(GAMEDIR)/, $(addsuffix .template, sysconf .nethackrc) \
             Guidebook.txt NetHack.txt license opthelp record symbols)
 
@@ -964,6 +1092,11 @@ ifneq "$(USE_DLB)" "Y"
 endif
        @echo NetHack is up to date.
 
+ifdef SOUND_FMOD
+$(GAMEDIR)/$(FMODLIBDLL): $(FMODLIBDIR)/$(FMODLIBDLL)
+        cp $< $@
+endif
+
 $(GAMEDIR)/symbols: $(DAT)/symbols
        cp $< $@
 
index 91bfe0647a10df739ee381e205cc5a508da46aec..c10632912ec7d7942c8f8e234beaad0e0c99d01c 100644 (file)
@@ -41,12 +41,15 @@ GAMEDIR = ..\binary               # Default game build directory
 #
 #
 #------------------------------------------------------------------------------
-# Add any sound libraries the you wish to integrate with NetHack, with spaces
-# between them.
+# Do you want to include integration with any sound libraries that work with
+# this Makefile?  Add the list below. If you change the list do 'nmake clean'.
+#
+# There is glue in here for the following: windsound fmod
+# Obtaining the 3rd party library, including its .h files, is up to you.
 #
 # windsound uses built-in Microsoft API's, no 3rd party download is required.
 
-SOUND_LIBRARIES = windsound
+SOUND_LIBRARIES = windsound fmod
 
 #
 #------------------------------------------------------------------------------
@@ -669,16 +672,85 @@ DLBOBJ_HOST = $(OTTY)dlb$(HOST).o
 #
 SNDTEMP = $(SOUND_LIBRARIES:windsound=)
 !IF "$(SOUND_LIBRARIES)" != "$(SNDTEMP)"
-# SOUND_LIBRARIES included windsound
+!MESSAGE Including windsound integration
 SOUND_WINDSOUND=Y
-!MESSAGE Including windsound support
+HAVE_SOUNDLIB=Y
+NEED_USERSOUNDS=Y
+NEED_SEAUTOMAP=Y
+NEED_WAV=Y
 SOUNDLIBINCL = $(SOUNDLIBINCL)
 SOUNDLIBDEFS = $(SOUNDLIBDEFS) -DSND_LIB_WINDSOUND
 TTYSOUNDOBJS = $(TTYSOUNDOBJS) $(OTTY)windsound.o
 GUISOUNDOBJS = $(GUISOUNDOBJS) $(OGUI)windsound.o
-TTYSOUNDLIBS = $(TTYSOUNDLIBS)
-GUISOUNDLIBS = $(GUIDSOUNDLIBS)
+#WINDSOUNDLIBDIR = 
+#TTYSOUNDLIBS = $(TTYSOUNDLIBS)
+#GUISOUNDLIBS = $(GUISOUNDLIBS)
+#WINDSOUNDLIBDIR =
+#WINDSOUNDLIBDLL =
 WINDSOUNDDIR = ..\sound\windsound
+SOUNDSRCS = $(SOUNDSRCS) $(WINDSOUNDDIR)\windsound.c
+#GAMEDIRDLLS = $(GAMEDIRDLLS) $(GAMEDIR\$(WINDSOUNDLIBDLL)
+!ENDIF
+SNDTEMP=
+
+# +--------------------------------+
+# | fmod? (requires 3rd party lib) |
+# +--------------------------------+
+#
+
+SNDTEMP = $(SOUND_LIBRARIES:fmod=)
+!IF "$(SOUND_LIBRARIES)" != "$(SNDTEMP)"
+!MESSAGE Including fmod integration
+SOUND_FMOD=Y
+HAVE_SOUNDLIB=Y
+NEED_USERSOUNDS=Y
+NEED_SEAUTOMAP=Y
+NEED_WAV=Y
+FMODROOT=..\lib\fmod\api\core
+SOUNDLIBINCL = $(SOUNDLIBINCL) -I$(FMODLIBROOT)/inc
+SOUNDLIBDEFS = $(SOUNDLIBDEFS) -DSND_LIB_FMOD
+TTYSOUNDOBJS = $(TTYSOUNDOBJS) $(OTTY)fmod.o
+GUISOUNDOBJS = $(GUISOUNDOBJS) $(OGUI)fmod.o
+FMODLIBDIR = $(FMODROOT)\lib\$(TARGET_CPU)
+FMODLIBDLL = fmod_vc.dll
+!IF "$(TARGET_CPU)" == "x86"
+TTYSOUNDLIBS = $(TTYSOUNDLIBS) $(FMODLIBDIR)\fmod_vc.lib
+GUISOUNDLIBS = $(GUISOUNDLIBS) $(FMODLIBDIR)\fmod_vc.lib
+#!ELSE
+#TTYSOUNDLIBS = $(TTYSOUNDLIBS) $(FMODLIBDIR)\fmod_vc.lib
+#GUISOUNDLIBS = $(GUISOUNDLIBS) $(FMODLIBDIR)\fmod_vc.lib
+!ENDIF
+GAMEDIRDLLS = $(GAMEDIRDLLS) $(GAMEDIR)\$(FMODLIBDLL)
+FMODDIR = ..\sound\fmod
+SOUNDSRCS = $(SOUNDSRCS) $(FMODDIR)\fmod.c
+!MESSAGE ---------------------------------------------------------------------
+!MESSAGE ** NOTES for fmod sound library integration **
+!MESSAGE For fmod integration, this Makefile expects:
+!MESSAGE fmod include directory    : $(FMODROOT)\inc
+!MESSAGE fmod library directory    : $(FMODLIBDIR)
+!MESSAGE fmod library to link with : $(FMODLIBDIR)\fmod_vc.lib
+!MESSAGE fmod library dll          : $(FMODLIBDIR)\$(FMODLIBDLL)
+!MESSAGE ---------------------------------------------------------------------
+FMOD_MISSING=
+!IF !EXIST("$(FMODROOT)\inc")
+FMOD_MISSING= $(FMOD_MISSING) $(FMODROOT)\inc
+!MESSAGE Error: missing $(FMODROOT)\inc
+!ENDIF
+!IF !EXIST("$(FMODLIBDIR)")
+FMOD_MISSING= $(FMOD_MISSING) $(FMODLIBDIR)
+!MESSAGE Error: missing $(FMODLIBDIR)
+!ENDIF
+!IF !EXIST("$(FMODLIBDIR)\fmod_vc.lib")
+FMOD_MISSING= $(FMOD_MISSING) $(FMODLIBDIR)\fmod_vc.lib
+!MESSAGE Error: missing $(FMODLIBDIR)\fmod_vc.lib
+!ENDIF
+!IF !EXIST("$(FMODLIBDIR)\$(FMODLIBDLL)")
+FMOD_MISSING= $(FMOD_MISSING) $(FMODLIBDIR)\$(FMODLIBDLL)
+!MESSAGE Error: missing $(FMODLIBDIR)\$(FMODLIBDLL)
+!ENDIF
+!IF "$(FMOD_MISSING)" != ""
+!ERROR Error: Cannot proceed with fmod integration included
+!ENDIF
 !ENDIF
 SNDTEMP=
 
@@ -686,11 +758,16 @@ SNDTEMP=
 # SOUND Support
 #=================================================================
 
-!IF "$(SOUNDLIBDEFS)" != ""
+!IF "$(HAVE_SOUNDLIB)" == "Y"
+!IF "$(NEED_USERSOUNDS)" == "Y"
 SOUNDLIBDEFS = $(SOUNDLIBDEFS) -DUSER_SOUNDS
 !ENDIF
+!IF "$(NEED_SEAUTOMAP)" == "Y"
+SOUNDLIBDEFS = $(SOUNDLIBDEFS) -DSND_SOUNDEFFECTS_AUTOMAP
+!ENDIF
 
-SNDWAVFILES = $(SndWavDir)\se_squeak_A.wav $(SndWavDir)\se_squeak_B.wav \
+!IF "$(NEED_WAV)" == "Y"
+WAVS = $(SndWavDir)\se_squeak_A.wav $(SndWavDir)\se_squeak_B.wav \
        $(SndWavDir)\se_squeak_B_flat.wav $(SndWavDir)\se_squeak_C.wav \
        $(SndWavDir)\se_squeak_D.wav $(SndWavDir)\se_squeak_D_flat.wav \
        $(SndWavDir)\se_squeak_E.wav $(SndWavDir)\se_squeak_E_flat.wav \
@@ -721,6 +798,8 @@ SNDWAVFILES = $(SndWavDir)\se_squeak_A.wav $(SndWavDir)\se_squeak_B.wav \
        $(SndWavDir)\sound_Wooden_Harp_C.wav $(SndWavDir)\sound_Wooden_Harp_D.wav \
        $(SndWavDir)\sound_Wooden_Harp_E.wav $(SndWavDir)\sound_Wooden_Harp_F.wav \
        $(SndWavDir)\sound_Wooden_Harp_G.wav
+!ENDIF
+!ENDIF   #HAVE_SOUNDLIB
 
 #==========================================
 # Header file macros
@@ -1148,6 +1227,15 @@ DLB =
 {$(WINDSOUNDDIR)}.c{$(OBJGUI)}.o:
        $(Q)$(CC) $(CFLAGS) -I$(WSHR) $(GUIDEF) $(CROSSCOMPILE) $(CROSSCOMPILE_TARGET) -Fo$@ $<
 
+#==========================================
+# Rules for files in sound\fmod
+#==========================================
+
+{$(FMODDIR)}.c{$(OBJTTY)}.o:
+       $(Q)$(CC) $(CFLAGS) -I$(WSHR) $(TTYDEF) $(CROSSCOMPILE) $(CROSSCOMPILE_TARGET) -Fo$@ $<
+
+{$(FMODDIR)}.c{$(OBJGUI)}.o:
+       $(Q)$(CC) $(CFLAGS) -I$(WSHR) $(GUIDEF) $(CROSSCOMPILE) $(CROSSCOMPILE_TARGET) -Fo$@ $<
 
 #==========================================
 #=============== TARGETS ==================
@@ -1168,7 +1256,7 @@ install:  envchk.tag libdir.tag ottydir.tag outldir.tag \
                $(INCL)\nhlua.h $(OUTL)utility.tag \
                $(DAT)\data $(DAT)\rumors $(DAT)\oracles $(DAT)\engrave \
                $(DAT)\epitaph $(DAT)\bogusmon $(GAMEDIR)\NetHack.exe \
-               $(GAMEDIR)\NetHackW.exe install.tag
+               $(GAMEDIR)\NetHackW.exe $(GAMEDIRDLLS) install.tag
        @echo Done.
 
 !IF "$(INTERNET_AVAILABLE)" == "Y"
@@ -1257,7 +1345,8 @@ $(GAMEDIR)\NetHack.exe : gamedir.tag $(OTTY)consoletty.o \
                $(conlibs) $(BCRYPT) -out:$@ @<<$(@B).lnk
                $(GAMEOBJTTY)
                $(ALLOBJTTY)
-                $(TTYOBJ) $(TTYSOUNDOBJS)
+                $(TTYOBJ)
+                $(TTYSOUNDOBJS)
                 $(CURSESOBJ)
                $(OTTY)consoletty.o
                $(OTTY)date.o
@@ -1281,7 +1370,8 @@ $(GAMEDIR)\NetHackW.exe : gamedir.tag $(OGUI)tile.o \
                $(guilibs) $(COMCTRL) $(BCRYPT) -out:$@ @<<$(@B).lnk
                $(GAMEOBJGUI)
                $(ALLOBJGUI)
-               $(GUIOBJ) $(GUISOUNDOBJS)
+               $(GUIOBJ)
+               $(GUISOUNDOBJS)
                $(OGUI)tile.o
                $(OGUI)date.o
                $(OGUI)NetHackW.res
@@ -1291,7 +1381,8 @@ $(GAMEDIR)\NetHackW.exe : gamedir.tag $(OGUI)tile.o \
 # install
 #--------
 #
-install.tag:   $(DAT)\data $(DAT)\rumors $(DAT)\oracles $(DLB)
+install.tag:   $(DAT)\data $(DAT)\rumors $(DAT)\oracles $(DLB) \
+               $(HACKCSRC) $(SOUNDSRCS)
 ! IF ("$(USE_DLB)"=="Y")
        copy nhdat$(NHV)          $(GAMEDIR)
        copy $(DAT)\license       $(GAMEDIR)
@@ -1356,11 +1447,11 @@ $(OGUI)NetHackW.res: $(SRC)\tiles.bmp $(MSWIN)\NetHackW.rc \
        $(MSWIN)\mnsel.bmp \
        $(MSWIN)\mnselcnt.bmp $(MSWIN)\mnunsel.bmp \
        $(MSWIN)\petmark.bmp $(MSWIN)\pilemark.bmp $(MSWIN)\NetHack.ico \
-       $(MSWIN)\rip.bmp $(MSWIN)\splash.bmp $(SNDWAVFILES)
+       $(MSWIN)\rip.bmp $(MSWIN)\splash.bmp $(WAVS)
        @echo Building resource file $@ from $**
        @$(rc) -nologo -r -fo$@ -i$(MSWIN) -dNDEBUG -I..\sound\wav $(MSWIN)\NetHackW.rc
 
-$(OTTY)console.res: $(MSWSYS)\console.rc $(MSWSYS)\NetHack.ico $(SNDWAVFILES)
+$(OTTY)console.res: $(MSWSYS)\console.rc $(MSWSYS)\NetHack.ico $(WAVS)
        @echo Building resource file $@ from $**
        @$(rc) -nologo -r -fo$@ -i$(MSWSYS) -dNDEBUG -I..\sound\wav $(MSWSYS)\console.rc
 
@@ -1846,9 +1937,21 @@ $(OLUA)lapi.o: $(LUASRC)\lapi.c
 #===================================================================
 # windsound dependencies
 #===================================================================
-
+!IF "$(SOUND_WINDSOUND)" == "Y"
 $(OTTY)windsound.o: ..\sound\windsound\windsound.c $(HACK_H)
+$(OGUI)windsound.o: ..\sound\windsound\windsound.c $(HACK_H)
+!ENDIF
+#===================================================================
+# fmod dependencies
+#===================================================================
+!IF "$(SOUND_FMOD)" == "Y"
+$(OTTY)fmod.o: $(FMODDIR)\fmod.c $(HACK_H)
+$(OGUI)fmod.o: $(FMODDIR)\fmod.c $(HACK_H)
 
+# Copy the DLL to GAMEDIR
+$(GAMEDIR)\FMODLIBDLL: $(FMODLIBDIR)\$(FMODLIBDLL)
+       copy $(FMODLIBDIR)\$(FMODLIBDLL) $@
+!ENDIF
 #===================================================================
 # sys/windows dependencies
 #===================================================================
@@ -2118,6 +2221,7 @@ spotless: clean
        if exist $(DAT)\guioptions      del $(DAT)\guioptions
        if exist $(DAT)\data            del $(DAT)\data
        if exist tilemappings.lst       del tilemappings.lst
+       if exist $(SndWavDir)\*.wav     del $(SndWavDir)\*.wav
        if exist $(OBJTTY)\*            rmdir $(OBJTTY) /s /Q
        if exist $(OBJGUI)\*            rmdir $(OBJGUI) /s /Q
        if exist $(OBJUTIL)\*           rmdir $(OBJUTIL) /s /Q