#       SCCS Id: @(#)Makefile.ovl       3.0     90/01/29
#       PC NetHack 3.0 Makefile for Microsoft(tm) "C" 5.1 -- Pierre Martineau
#       Overlay Arrangement -- Stephen Spackman, Pierre Martineau, Norm Meluch
#       Multiple Compilation Hack and so forth -- Stephen Spackman
#       Additional editing -- Kevin Smolkowski
#
#       Other things that have to be reconfigured are in config.h, pcconf.h,
#       and possibly system.h.
#
#       Nota Bene: OVERLAY *must* be defined in pcconf.h to use this makefile!
#       Also: Rename this file to "makefile", some targets rely on it.
# -----------------------------------------------------------------------------
#       In addition to your C compiler,
#
#       if you want to change           you will need a
#       files with suffix               workalike for
#              .y                           yacc
#              .l                           lex
#              .asm                         masm
# -----------------------------------------------------------------------------
#       As it is set up, this makefile requires that exesmurf (the
#       NetHack overlay-aware .exe header editor) be on your path or in the
#       $(SRC) directory. If you wish to change the path or use Microsoft
#       EXEMOD instead, see the symbols EXEPATCH and EXEFLAGS.
#
# *****************************************************************************
# ************************ Compiler Info **************************************
# *****************************************************************************
CC       = cl /c
LINK     = link
MODEL    = L
ASM      = masm
EXEPATCH = exesmurf
# $(MAKE) macro is often predefined, so we use $(MAKEBIN) instead.
MAKEBIN = make45l
# For those of us who have these on PC.
# YACC   = yacc
# LEX    = lex
YACC    = bison -y
LEX     = flex
# Standard file names may vary in PC installations.
YTABC   = y_tab.c
YTABH   = y_tab.h
LEXYYC  = lexyy.c
# Register bug, remove stack probes...
# /Gt22 is currently about the largest value that keeps the initialised data
# segment below 64K (and keeps the linker happy).
# 286 or higher machines can use the /G2 CFLAG option for better performance.
CFLAGS  = /A$(MODEL) /Oa /Gs /Gt22 /Zp1 /W0 /I$(INCL)
COSPACE = /Os
COSPEED = /Ot  # MSC 5.1 seems to be broken, or maybe it's the NetHack code.
#              # Either way, setting COSPEED to /Ot wreaked jolly flaming havoc.
#
LFLAGS  = /noi /seg:512 /map /st:4096 /OLDOVERLAY
#
# Available assembler flags:
#       /Di386  = Use 386 specific enhancements
#       /DNOEMS = Do not use EMS memory
#       /DDEBUG = Report memory usage on startup
#       /DNOSPLIT = EXE file is not split out to OVL files
AFLAGS  = /MX
#
EXEFLAGS = /max4500 /min4500
#
# *****************************************************************************
# ********* Directories (makedefs hardcodes these, don't change them) *********
# *****************************************************************************
#
INCL    = ..\include
AUX     = ..\auxil
SRC     = ..\src
OTHERS  = ..\others
OBJ     = $(SRC)\o
#
# *****************************************************************************
# ************************ Local Variables ************************************
# *****************************************************************************
#
# The game name
GAME     = NetHack
#
# The default make target (so just typing 'ndmake45l' is useful)
DEFAULT  : $(GAME)
#
# The game directory
# make sure GAMEDIR exists!
GAMEDIR  = ..
#
# The game filename
GAMEFILE = $(GAMEDIR)\$(GAME).exe
#
# Target environment prefix
TARG     = pc
#
# Overlay manager object file.
OVLMGR   = ovlmgr.obj
#
# Termcap routines.
TERMCAPS = $(SRC)\termlib.lib
#
###############################################################################
# Switch the following lines if you have a MASM compatible assembler.
# $(OBJ)\$(OVLMGR):
$(OBJ)\$(OVLMGR): ; copy $(OTHERS)\$(OVLMGR) $(OBJ)\$(OVLMGR)
###############################################################################
# If you have yacc and lex programs and make any changes, comment out the
# upper two targets and uncomment the lower two.
do_yacc: yacc_msg
do_lex:  lex_msg
# do_yacc: yacc_act
# do_lex:  lex_act
###############################################################################
# Optional high-quality BSD random number generation routines (see pcconf.h).
# Set to nothing if not used.
RANDOM   = $(OBJ)\random.o
# RANDOM =
###############################################################################
# Optional C library specifier for those with non-standard libraries or
# a multiple-target library setup.
# CLIB     = llibcer /nod
CLIB     =
###############################################################################
# If TERMLIB is NOT #defined in the source, comment out the lower line and
# uncomment the upper. Don't forget to copy the $(TERMCAPS) file to the
# $(SRC) directory if you have uncommented the lower line.
# TERMLIB  =
TERMLIB  = $(TERMCAPS)
###############################################################################
#
# nothing below this line should have to be changed

ROOT =  $(OBJ)\$(OVLMGR) $(OBJ)\trampoli.o $(OBJ)\main.o $(OBJ)\msdos.o \
	$(OBJ)\alloc.o $(OBJ)\random.o $(OBJ)\decl.o $(OBJ)\monst.o \
	$(OBJ)\objects.o $(OBJ)\invent.0 $(OBJ)\mkobj.0 $(OBJ)\mkroom.0 \
	$(OBJ)\rnd.0 $(OBJ)\termcap.0
# main monster code
OVL01 = $(OBJ)\attrib.0
OVL02 = $(OBJ)\prisym.b
OVL03 = $(OBJ)\read.0
OVL04 = $(OBJ)\rnd.2-b
OVL05 = $(OBJ)\steal.0-1
OVL06 = $(OBJ)\prisym.2
OVL07 = $(OBJ)\termcap.1 $(OBJ)\unix.0
OVL08 = $(OBJ)\were.1-b
OVL09 = $(OBJ)\do_name.0
OVL10 = $(OBJ)\mthrowu.2-b
OVL11 = $(OBJ)\topl.b
OVL12 = $(OBJ)\hack.b
OVL13 = $(OBJ)\makemon.b
OVL14 = $(OBJ)\mondata.b $(OBJ)\timeout.1-b
OVL15 = $(OBJ)\wizard.1-b
OVL16 = $(OBJ)\do.b
OVL17 = $(OBJ)\do.0 $(OBJ)\invent.3
OVL18 = $(OBJ)\worm.o
OVL19 = $(OBJ)\pri.b $(OBJ)\topl.1-2
OVL20 = $(OBJ)\mkobj.2-b
OVL21 = $(OBJ)\termcap.2-b
OVL22 = $(OBJ)\mthrowu.1
OVL23 = $(OBJ)\attrib.2-b $(OBJ)\exper.o
OVL24 = $(OBJ)\monmove.2-b $(OBJ)\steal.2-b
OVL25 = $(OBJ)\hack.2
OVL26 = $(OBJ)\demon.o $(OBJ)\mcastu.o
OVL27 = $(OBJ)\dothrow.o
OVL28 = $(OBJ)\cmd.2-b $(OBJ)\getline.2 $(OBJ)\write.o
OVL29 = $(OBJ)\artifact.2 $(OBJ)\eat.1 $(OBJ)\invent.1
OVL30 = $(OBJ)\dog.b $(OBJ)\sounds.1-b
OVL31 = $(OBJ)\priest.1-b
# pet code
OVL32 = $(OBJ)\apply.0 $(OBJ)\dog.1 $(OBJ)\dogmove.o
OVL33 = $(OBJ)\invent.b
OVL34 = $(OBJ)\pager.1-b
OVL35 = $(OBJ)\mhitm.1-b
OVL36 = $(OBJ)\objnam.2-b
OVL37 = $(OBJ)\pri.0 $(OBJ)\prisym.0 $(OBJ)\topl.0
OVL38 = $(OBJ)\dokick.o
OVL39 = $(OBJ)\do_wear.2 $(OBJ)\getline.b $(OBJ)\mondata.2 $(OBJ)\objnam.0-1 \
	$(OBJ)\pager.0 $(OBJ)\polyself.0-1
OVL40 = $(OBJ)\makemon.0-2 $(OBJ)\mkobj.1
OVL41 = $(OBJ)\mon.2-b $(OBJ)\trap.2
OVL42 = $(OBJ)\do_wear.0-1 $(OBJ)\mhitu.2-b
OVL43 = $(OBJ)\allmain.1 $(OBJ)\mhitm.0 $(OBJ)\mhitu.0-1 $(OBJ)\rnd.1 \
	$(OBJ)\weapon.0-1
OVL44 = $(OBJ)\apply.2-b
OVL45 = $(OBJ)\artifact.1 $(OBJ)\search.0 $(OBJ)\uhitm.o $(OBJ)\weapon.2-b
OVL46 = $(OBJ)\cmd.0 $(OBJ)\dbridge.0 $(OBJ)\dog.0 $(OBJ)\engrave.0-1 \
	$(OBJ)\hack.0 $(OBJ)\mon.0-1 $(OBJ)\mondata.0-1 $(OBJ)\monmove.0-1 \
	$(OBJ)\mthrowu.0 $(OBJ)\priest.0 $(OBJ)\shk.0 $(OBJ)\track.0 \
	$(OBJ)\trap.0-1 $(OBJ)\were.0
# advanced monsters
OVL47 = $(OBJ)\shk.1-b
# main people things: you take your turn
OVL48 = $(OBJ)\allmain.0 $(OBJ)\artifact.0 $(OBJ)\attrib.1 $(OBJ)\cmd.1 \
	$(OBJ)\do.1 $(OBJ)\do.3 $(OBJ)\eat.0 $(OBJ)\engrave.2 \
	$(OBJ)\getline.0-1 $(OBJ)\hack.1 $(OBJ)\lock.0 $(OBJ)\mail.0 \
	$(OBJ)\pickup.1 $(OBJ)\pri.1 $(OBJ)\prisym.1 $(OBJ)\sounds.0 \
	$(OBJ)\timeout.0 $(OBJ)\track.1 $(OBJ)\vault.0 $(OBJ)\wizard.0
OVL49 = $(OBJ)\search.1-b
OVL50 = $(OBJ)\lock.1-b
OVL51 = $(OBJ)\dbridge.1-b
OVL52 = $(OBJ)\polyself.2-b
OVL53 = $(OBJ)\invent.2 $(OBJ)\pickup.0 $(OBJ)\pickup.2-b
OVL54 = $(OBJ)\eat.2-b
OVL55 = $(OBJ)\pray.o
OVL56 = $(OBJ)\potion.o
OVL57 = $(OBJ)\trap.b
OVL58 = $(OBJ)\read.1-b $(OBJ)\spell.o
# clothing stuff
OVL59 = $(OBJ)\do_wear.b $(OBJ)\wield.o $(OBJ)\worn.o
# Zappage
OVL60 = $(OBJ)\pri.2 $(OBJ)\zap.o
# Unusual circumstances
OVL61 = $(OBJ)\artifact.b $(OBJ)\do_name.1-b $(OBJ)\fountain.o $(OBJ)\music.o \
	$(OBJ)\rumors.o $(OBJ)\shknam.0 $(OBJ)\sit.o $(OBJ)\vault.1-b
# Levelling
OVL62 = $(OBJ)\apply.1 $(OBJ)\bones.o $(OBJ)\do.2 $(OBJ)\dog.2 \
	$(OBJ)\extralev.o $(OBJ)\mklev.o $(OBJ)\mkmaze.o $(OBJ)\mkroom.1-b \
	$(OBJ)\sp_lev.o $(OBJ)\track.2-b
# Uppers and Downers
# Note: version.o is in OVL63, but in a special way.  See below.
OVL63 = $(OBJ)\allmain.2-b $(OBJ)\end.o $(OBJ)\engrave.b $(OBJ)\mail.1-b \
	$(OBJ)\o_init.o $(OBJ)\options.o $(OBJ)\restore.o $(OBJ)\rip.o \
	$(OBJ)\save.o $(OBJ)\shknam.1-b $(OBJ)\topten.o $(OBJ)\tty.o \
	$(OBJ)\u_init.o $(OBJ)\unix.1-b


# *****************************************************************************
# ************************* Make Objects **************************************
# *****************************************************************************

MOBJ = $(OVL01) $(OVL02) $(OVL03) $(OVL04) $(OVL05) $(OVL06) $(OVL07) $(OVL08)\
       $(OVL09) $(OVL10) $(OVL11) $(OVL12) $(OVL13) $(OVL14) $(OVL15) $(OVL16)\
       $(OVL17) $(OVL18) $(OVL19) $(OVL20) $(OVL21) $(OVL22) $(OVL23) $(OVL24)\
       $(OVL25) $(OVL26) $(OVL27) $(OVL28) $(OVL29) $(OVL30) $(OVL31) $(OVL32)\
       $(OVL33) $(OVL34) $(OVL35) $(OVL36) $(OVL37) $(OVL38) $(OVL39) $(OVL40)\
       $(OVL41) $(OVL42) $(OVL43) $(OVL44) $(OVL45) $(OVL46) $(OVL47) $(OVL48)\
       $(OVL49) $(OVL50) $(OVL51) $(OVL52) $(OVL53) $(OVL54) $(OVL55) $(OVL56)\
       $(OVL57) $(OVL58) $(OVL59) $(OVL60) $(OVL61) $(OVL62) $(OVL63)

VOBJ =  $(ROOT) $(MOBJ)

HOBJ =  $(VOBJ) $(OBJ)\version.o

# object files for makedefs
MAKEOBJS    =   $(OBJ)\makedefs.o $(OBJ)\alloc.o    $(OBJ)\monst.o    \
		$(OBJ)\objects.o  $(OBJ)\panic.o

OVERLAYS = ($(OVL01)) ($(OVL02)) ($(OVL03)) ($(OVL04)) ($(OVL05)) ($(OVL06)) \
	   ($(OVL07)) ($(OVL08)) ($(OVL09)) ($(OVL10)) ($(OVL11)) ($(OVL12)) \
	   ($(OVL13)) ($(OVL14)) ($(OVL15)) ($(OVL16)) ($(OVL17)) ($(OVL18)) \
	   ($(OVL19)) ($(OVL20)) ($(OVL21)) ($(OVL22)) ($(OVL23)) ($(OVL24)) \
	   ($(OVL25)) ($(OVL26)) ($(OVL27)) ($(OVL28)) ($(OVL29)) ($(OVL30)) \
	   ($(OVL31)) ($(OVL32)) ($(OVL33)) ($(OVL34)) ($(OVL35)) ($(OVL36)) \
	   ($(OVL37)) ($(OVL38)) ($(OVL39)) ($(OVL40)) ($(OVL41)) ($(OVL42)) \
	   ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) ($(OVL48)) \
	   ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) ($(OVL54)) \
	   ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) ($(OVL60)) \
	   ($(OVL61)) ($(OVL62)) ($(OBJ)\version.o      $(OVL63))

# object files for special levels compiler
SPLEVOBJS   =   $(OBJ)\lev_comp.o $(OBJ)\lev_lex.o  $(OBJ)\lev_main.o \
		$(OBJ)\alloc.o    $(OBJ)\monst.o    $(OBJ)\objects.o  \
		$(OBJ)\panic.o

# *****************************************************************************
# ************************** Header Objects ***********************************
# *****************************************************************************

PCCONF_H   = $(INCL)\$(TARG)conf.h $(INCL)\msdos.h    $(INCL)\system.h
GLOBAL_H   = $(PCCONF_H)           $(INCL)\coord.h    $(INCL)\global.h
CONFIG_H   = $(GLOBAL_H)           $(INCL)\config.h   $(INCL)\tradstdc.h
PERMONST_H = $(INCL)\permonst.h    $(INCL)\monattk.h  $(INCL)\monflag.h
YOUPROP_H  = $(PERMONST_H)         $(INCL)\prop.h     $(INCL)\mondata.h \
	     $(INCL)\pm.h          $(INCL)\youprop.h
YOU_H      = $(YOUPROP_H)          $(INCL)\attrib.h   $(INCL)\monst.h \
	     $(INCL)\you.h
DECL_H     = $(YOU_H)              $(INCL)\decl.h     $(INCL)\obj.h \
	     $(INCL)\onames.h      $(INCL)\spell.h    $(INCL)\color.h
HACK_H     = $(CONFIG_H)           $(DECL_H)          $(INCL)\trap.h \
	     $(INCL)\flag.h        $(INCL)\gold.h     $(INCL)\mkroom.h \
	     $(INCL)\monsym.h      $(INCL)\objclass.h $(INCL)\rm.h \
	     $(INCL)\trampoli.h    $(INCL)\hack.h

# *****************************************************************************
# ************************ File Dependencies **********************************
# *****************************************************************************

# Due to an NDMake inadequacy these must accord with a topological sort of the
# generated-from relation... output on the left, input on the right. Trust me.
.SUFFIXES:  .exe .0 .0-1 .0-2 .0-3 .1 .1-2 .1-3 .1-b .2 .2-3 .2-b .3 .3-b .b \
	    .o .c .y .l .obj .asm

.c.o:
	$(CC) $(CFLAGS) $(COSPACE) /Fo$(OBJ)\$*.o $*.c
.c.0:
	$(CC) $(CFLAGS) $(COSPEED) /DOVL0 /NT$*.0 /Fo$(OBJ)\$*.0 $*.c
.c.0-1:
	$(CC) $(CFLAGS) $(COSPEED) /DOVL0 /DOVL1 /NT$*.0-1 /Fo$(OBJ)\$*.0-1 $*.c
.c.0-2:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL0 /DOVL1 /DOVL2 /NT$*.0-2 /Fo$(OBJ)\$*.0-2 $*.c
.c.0-3:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL0 /DOVL1 /DOVL2 /DOVL3 /NT$*.0-3 /Fo$(OBJ)\$*.0-3 $*.c
.c.1:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL1 /NT$*.1 /Fo$(OBJ)\$*.1 $*.c
.c.1-2:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /NT$*.1-2 /Fo$(OBJ)\$*.1-2 $*.c
.c.1-3:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /DOVL3 /NT$*.1-3 /Fo$(OBJ)\$*.1-3 $*.c
.c.1-b:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /DOVL3 /DOVLB /NT$*.1-b /Fo$(OBJ)\$*.1-b $*.c
.c.2:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL2 /NT$*.2 /Fo$(OBJ)\$*.2 $*.c
.c.2-3:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL2 /DOVL3 /NT$*.2-3 /Fo$(OBJ)\$*.2-3 $*.c
.c.2-b:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL2 /DOVL3 /DOVLB /NT$*.2-b /Fo$(OBJ)\$*.2-b $*.c
.c.3:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL3 /NT$*.3 /Fo$(OBJ)\$*.3 $*.c
.c.3-b:
	$(CC) $(CFLAGS) $(COSPACE) /DOVL3 /DOVLB /NT$*.3-b /Fo$(OBJ)\$*.3-b $*.c
.c.b:
	$(CC) $(CFLAGS) $(COSPACE) /DOVLB /NT$*.b /Fo$(OBJ)\$*.b $*.c
.asm.obj:
	$(ASM) $(AFLAGS) $*.asm,$(OBJ)\$*.obj ;

$(GAME): $(GAMEFILE)

$(GAME).exe: $(GAMEFILE)

$(GAMEFILE): $(EXEPATCH) $(OBJ) $(HOBJ)
	@echo Loading....
	$(LINK) $(ROOT) $(OVERLAYS),$(GAMEFILE),$(GAME),$(CLIB) $(TERMLIB) $(LFLAGS) ;
	$(EXEPATCH) $(GAMEFILE) $(EXEFLAGS)
	$(EXEPATCH) $(GAMEFILE) 1 49
	@echo NetHack is up to date.

$(OBJ):
	if not exist .\$(OBJ)\*.* mkdir $(OBJ)

#       The following 3 modules vary depending on what OS you are using.

$(OBJ)\main.o:  $(HACK_H) $(TARG)main.c
	$(CC) $(CFLAGS) $(COSPACE)  /Fo.\$(OBJ)\main.o $(TARG)main.c

$(OBJ)\tty.o:   $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c
	$(CC) $(CFLAGS) $(COSPACE)  /Fo.\$(OBJ)\tty.o  $(TARG)tty.c

$(OBJ)\unix.0:  $(HACK_H) $(TARG)unix.c
	$(CC) $(CFLAGS) $(COSPEED)  /DOVL0 /Fo.\$(OBJ)\unix.0 $(TARG)unix.c
$(OBJ)\unix.1-b:        $(HACK_H) $(TARG)unix.c
	$(CC) $(CFLAGS) $(COSPACE)  /DOVL1 /DOVL2 /DOVL3 /DOVLB /Fo.\$(OBJ)\unix.1-b $(TARG)unix.c

$(OBJ)\makedefs.o:      $(INCL)\config.h $(INCL)\permonst.h $(INCL)\objclass.h

makedefs.exe:   $(MAKEOBJS)
	$(LINK) $(LFLAGS) $(MAKEOBJS), makedefs.exe,, $(CLIB);

#       Targets for the special levels compiler

lev_comp.c: lev_comp.y
	$(MAKEBIN) do_yacc

lev_lex.c:  lev_comp.l
	$(MAKEBIN) do_lex

yacc_msg:
	@echo lev_comp.y has changed. To update lev_comp.c and lev_comp.h run YACC.

yacc_act:
	$(YACC) -d lev_comp.y
	copy $(YTABC) lev_comp.c
	copy $(YTABH) $(INCL)\lev_comp.h
	del $(YTABC)
	del $(YTABH)

lex_msg:
	@echo lev_comp.l has changed. To update lev_lex.c run LEX.

lex_act:
	$(LEX) lev_comp.l
	copy $(LEXYYC) lev_lex.c
	del $(LEXYYC)

#       This is stupid but since the default rule does not work here ...

$(OBJ)\lev_comp.o:      $(HACK_H)   $(INCL)\sp_lev.h    lev_comp.c
	$(CC) $(CFLAGS) /Fo$(OBJ)\$*.o $*.c
$(OBJ)\lev_lex.o:       $(HACK_H)   $(INCL)\sp_lev.h    $(INCL)\lev_comp.h \
			lev_lex.c
	$(CC) $(CFLAGS) /Fo$(OBJ)\$*.o $*.c

lev_comp.exe:   $(SPLEVOBJS)
	$(LINK) $(LFLAGS) $(SPLEVOBJS),lev_comp.exe,, $(CLIB);

$(EXEPATCH): $(EXEPATCH).exe

$(EXEPATCH).exe: $(OBJ)\$(EXEPATCH).o
	$(LINK) $(OBJ)\$*.o,$*.exe;

$(OBJ)\$(EXEPATCH).o: $(EXEPATCH).c
	$(CC) /W0 /Fo$(OBJ)\$*.o $*.c

# *****************************************************************************
# *************************  Makedefs Stuff ***********************************
# *****************************************************************************
#       The following include files depend on makedefs to be created.
#       date.h should be remade any time any of the source or include code
#       is modified.

$(INCL)\date.h: $(VOBJ) makedefs.exe
	.\makedefs -v

$(INCL)\onames.h: makedefs.exe
	.\makedefs -o

$(INCL)\pm.h: makedefs.exe
	.\makedefs -p

$(INCL)\trap.h: makedefs.exe
	.\makedefs -t

data:   $(AUX)\data.bas makedefs.exe
	.\makedefs -d

rumors: $(AUX)\rumors.tru $(AUX)\rumors.fal makedefs.exe
	.\makedefs -r

# *****************************************************************************
# ************************ Secondary targets **********************************
# *****************************************************************************

all:    install

install:        $(OBJ) lev_comp.exe $(GAMEFILE) auxil.tag install.tag
	@echo Don't forget to check HACKDIR in NetHack.cnf.
	@echo Done.

install.tag:
	copy $(OTHERS)\termcap          $(GAMEDIR)
	copy $(AUX)\*.                  $(GAMEDIR)
	del  $(GAMEDIR)\MacHelp
	copy $(OTHERS)\NetHack.cnf      $(GAMEDIR)
	echo install done > install.tag

spec_lev.tag: lev_comp.exe $(AUX)\castle.des $(AUX)\endgame.des $(AUX)\tower.des
	lev_comp $(AUX)\castle.des
	lev_comp $(AUX)\endgame.des
	lev_comp $(AUX)\tower.des
	copy castle $(GAMEDIR)
	copy endgame $(GAMEDIR)
	copy tower? $(GAMEDIR)
	del castle
	del endgame
	del tower?
	echo spec_lev done > spec_lev.tag

auxil.tag:      spec_lev.tag    data    rumors
	echo special levels created > auxil.tag

clean:
	del $(OBJ)\*.o
	del $(OBJ)\*.0
	del $(OBJ)\*.0-1
	del $(OBJ)\*.0-2
	del $(OBJ)\*.0-3
	del $(OBJ)\*.1
	del $(OBJ)\*.1-2
	del $(OBJ)\*.1-3
	del $(OBJ)\*.1-b
	del $(OBJ)\*.2
	del $(OBJ)\*.2-3
	del $(OBJ)\*.2-b
	del $(OBJ)\*.3
	del $(OBJ)\*.3-b
	del $(OBJ)\*.b
	del $(OBJ)\*.obj
	rmdir $(OBJ)

spotless: clean
	del $(INCL)\date.h
	del $(INCL)\onames.h
	del $(INCL)\pm.h
	if exist makedefs.exe del makedefs.exe
	if exist lev_comp.exe del lev_comp.exe
	del castle
	del endgame
	del tower?
	del *.bak
	del *.tag
	del *.map
	del *.obj
	del *.lib
	del *.txt
	del $(AUX)\data
	del $(AUX)\rumors

# *****************************************************************************
# ************************* Other dependencies ********************************
# *****************************************************************************
# Other dependencies
#
# I deleted that line.  ;-}

$(OBJ)\allmain.0:       $(HACK_H)
$(OBJ)\allmain.1:       $(HACK_H)
$(OBJ)\allmain.2-b:     $(HACK_H)
$(OBJ)\alloc.o:         $(CONFIG_H)
$(OBJ)\apply.0:         $(HACK_H)   $(INCL)\edog.h
$(OBJ)\apply.1:         $(HACK_H)   $(INCL)\edog.h
$(OBJ)\apply.2-b:       $(HACK_H)   $(INCL)\edog.h
$(OBJ)\artifact.0:      $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\artifact.1:      $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\artifact.2:      $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\artifact.b:      $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\attrib.0:        $(HACK_H)
$(OBJ)\attrib.1:        $(HACK_H)
$(OBJ)\attrib.2-b:      $(HACK_H)
$(OBJ)\bones.o:         $(HACK_H)
$(OBJ)\cmd.0:           $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\cmd.1:           $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\cmd.2-b:         $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\dbridge.0:       $(HACK_H)
$(OBJ)\dbridge.1-b:     $(HACK_H)
$(OBJ)\decl.o:          $(HACK_H)
$(OBJ)\demon.o:         $(HACK_H)
$(OBJ)\do.0:            $(HACK_H)
$(OBJ)\do.1:            $(HACK_H)
$(OBJ)\do.2:            $(HACK_H)
$(OBJ)\do.3:            $(HACK_H)
$(OBJ)\do.b:            $(HACK_H)
$(OBJ)\do_name.0:       $(HACK_H)
$(OBJ)\do_name.1-b:     $(HACK_H)
$(OBJ)\do_wear.0-1:     $(HACK_H)
$(OBJ)\do_wear.2:       $(HACK_H)
$(OBJ)\do_wear.b:       $(HACK_H)
$(OBJ)\dog.0:           $(HACK_H)   $(INCL)\edog.h
$(OBJ)\dog.1:           $(HACK_H)   $(INCL)\edog.h
$(OBJ)\dog.2:           $(HACK_H)   $(INCL)\edog.h
$(OBJ)\dog.b:           $(HACK_H)   $(INCL)\edog.h
$(OBJ)\dogmove.o:       $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\edog.h
$(OBJ)\dokick.o:        $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\dothrow.o:       $(HACK_H)
$(OBJ)\eat.0:           $(HACK_H)
$(OBJ)\eat.1:           $(HACK_H)
$(OBJ)\eat.2-b:         $(HACK_H)
$(OBJ)\end.o:           $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\engrave.0-1:     $(HACK_H)
$(OBJ)\engrave.2:       $(HACK_H)
$(OBJ)\engrave.b:       $(HACK_H)
$(OBJ)\exper.o:         $(HACK_H)
$(OBJ)\extralev.o:      $(HACK_H)
$(OBJ)\fountain.o:      $(HACK_H)
$(OBJ)\getline.0-1:     $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\getline.2:       $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\getline.b:       $(HACK_H)   $(INCL)\func_tab.h
$(OBJ)\hack.0:          $(HACK_H)
$(OBJ)\hack.1:          $(HACK_H)
$(OBJ)\hack.2:          $(HACK_H)
$(OBJ)\hack.b:          $(HACK_H)
$(OBJ)\invent.0:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\invent.1:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\invent.2:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\invent.3:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\invent.b:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\ioctl.o:         $(HACK_H)
$(OBJ)\lev_main.o:      $(HACK_H)   $(INCL)\sp_lev.h
$(OBJ)\lock.0:          $(HACK_H)
$(OBJ)\lock.1-b:        $(HACK_H)
$(OBJ)\mail.0:          $(HACK_H)
$(OBJ)\mail.1-b:        $(HACK_H)
$(OBJ)\makemon.0-2:     $(HACK_H)
$(OBJ)\makemon.b:       $(HACK_H)
$(OBJ)\mcastu.o:        $(HACK_H)
$(OBJ)\mhitm.0:         $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\mhitm.1-b:       $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\mhitu.0-1:       $(HACK_H)   $(INCL)\artifact.h   $(INCL)\edog.h
$(OBJ)\mhitu.2-b:       $(HACK_H)   $(INCL)\artifact.h   $(INCL)\edog.h
$(OBJ)\mklev.o:         $(HACK_H)
$(OBJ)\mkmaze.o:        $(HACK_H)
$(OBJ)\mkobj.0:         $(HACK_H)
$(OBJ)\mkobj.1:         $(HACK_H)
$(OBJ)\mkobj.2-b:       $(HACK_H)
$(OBJ)\mkroom.0:        $(HACK_H)
$(OBJ)\mkroom.1-b:      $(HACK_H)
$(OBJ)\mon.0-1:         $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\wseg.h
$(OBJ)\mon.2-b:         $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\wseg.h
$(OBJ)\mondata.0-1:     $(HACK_H)   $(INCL)\eshk.h       $(INCL)\epri.h
$(OBJ)\mondata.2:       $(HACK_H)   $(INCL)\eshk.h       $(INCL)\epri.h
$(OBJ)\mondata.b:       $(HACK_H)   $(INCL)\eshk.h       $(INCL)\epri.h
$(OBJ)\monmove.0-1:     $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\artifact.h
$(OBJ)\monmove.2-b:     $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\artifact.h
$(OBJ)\monst.o:         $(CONFIG_H) $(PERMONST_H)        $(INCL)\eshk.h \
			$(INCL)\vault.h $(INCL)\epri.h   $(INCL)\color.h
$(OBJ)\msdos.o:         $(HACK_H)
$(OBJ)\mthrowu.0:       $(HACK_H)
$(OBJ)\mthrowu.1:       $(HACK_H)
$(OBJ)\mthrowu.2-b:     $(HACK_H)
$(OBJ)\music.o:         $(HACK_H)
$(OBJ)\o_init.o:        $(HACK_H)
$(OBJ)\objects.o:       $(CONFIG_H) $(INCL)\obj.h        $(INCL)\objclass.h \
			$(INCL)\prop.h  $(INCL)\color.h
$(OBJ)\objnam.0-1:      $(HACK_H)
$(OBJ)\objnam.2-b:      $(HACK_H)
$(OBJ)\options.o:       $(HACK_H)
$(OBJ)\pager.0:         $(HACK_H)
$(OBJ)\pager.1-b:       $(HACK_H)
$(OBJ)\panic.o:         $(CONFIG_H)
$(OBJ)\pickup.0:        $(HACK_H)
$(OBJ)\pickup.1:        $(HACK_H)
$(OBJ)\pickup.2-b:      $(HACK_H)
$(OBJ)\polyself.0-1:    $(HACK_H)
$(OBJ)\polyself.2-b:    $(HACK_H)
$(OBJ)\potion.o:        $(HACK_H)
$(OBJ)\pray.o:          $(HACK_H)
$(OBJ)\pri.0:           $(HACK_H)   $(INCL)\epri.h       $(INCL)\termcap.h
$(OBJ)\pri.1:           $(HACK_H)   $(INCL)\epri.h       $(INCL)\termcap.h
$(OBJ)\pri.2:           $(HACK_H)   $(INCL)\epri.h       $(INCL)\termcap.h
$(OBJ)\pri.b:           $(HACK_H)   $(INCL)\epri.h       $(INCL)\termcap.h
$(OBJ)\priest.0:        $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\eshk.h \
			$(INCL)\epri.h
$(OBJ)\priest.1-b:      $(HACK_H)   $(INCL)\mfndpos.h    $(INCL)\eshk.h \
			$(INCL)\epri.h
$(OBJ)\prisym.0:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\prisym.1:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\prisym.2:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\prisym.b:        $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\random.o:
$(OBJ)\read.0:          $(HACK_H)
$(OBJ)\read.1-b:        $(HACK_H)
$(OBJ)\restore.o:       $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\rip.o:           $(HACK_H)
$(OBJ)\rnd.0:           $(HACK_H)
$(OBJ)\rnd.1:           $(HACK_H)
$(OBJ)\rnd.2-b:         $(HACK_H)
$(OBJ)\rumors.o:        $(HACK_H)
$(OBJ)\save.o:          $(HACK_H)   $(INCL)\lev.h        $(INCL)\wseg.h
$(OBJ)\search.0:        $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\search.1-b:      $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\shk.0:           $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\shk.1-b:         $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\shknam.0:        $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\shknam.1-b:      $(HACK_H)   $(INCL)\eshk.h
$(OBJ)\sit.o:           $(HACK_H)
$(OBJ)\sounds.0:        $(HACK_H)   $(INCL)\edog.h       $(INCL)\eshk.h
$(OBJ)\sounds.1-b:      $(HACK_H)   $(INCL)\edog.h       $(INCL)\eshk.h
$(OBJ)\sp_lev.o:        $(HACK_H)   $(INCL)\sp_lev.h
$(OBJ)\spell.o:         $(HACK_H)
$(OBJ)\steal.0-1:       $(HACK_H)
$(OBJ)\steal.2-b:       $(HACK_H)
$(OBJ)\termcap.0:       $(HACK_H)   $(INCL)\termcap.h
$(OBJ)\termcap.1:       $(HACK_H)   $(INCL)\termcap.h
$(OBJ)\termcap.2-b:     $(HACK_H)   $(INCL)\termcap.h
$(OBJ)\timeout.0:       $(HACK_H)
$(OBJ)\timeout.1-b:     $(HACK_H)
$(OBJ)\topl.0:          $(HACK_H)
$(OBJ)\topl.1-2:        $(HACK_H)
$(OBJ)\topl.b:          $(HACK_H)
$(OBJ)\topten.o:        $(HACK_H)
$(OBJ)\track.0:         $(HACK_H)
$(OBJ)\track.1:         $(HACK_H)
$(OBJ)\track.2-b:       $(HACK_H)
$(OBJ)\trampoli.o:      $(HACK_H)
$(OBJ)\trap.0-1:        $(HACK_H)   $(INCL)\edog.h
$(OBJ)\trap.2:          $(HACK_H)   $(INCL)\edog.h
$(OBJ)\trap.b:          $(HACK_H)   $(INCL)\edog.h
$(OBJ)\u_init.o:        $(HACK_H)
$(OBJ)\uhitm.o:         $(HACK_H)   $(INCL)\artifact.h
$(OBJ)\vault.0:         $(HACK_H)   $(INCL)\vault.h
$(OBJ)\vault.1-b:       $(HACK_H)   $(INCL)\vault.h
$(OBJ)\version.o:       $(HACK_H)   $(INCL)\date.h       $(INCL)\patchlev.h
$(OBJ)\weapon.0-1:      $(HACK_H)
$(OBJ)\weapon.2-b:      $(HACK_H)
$(OBJ)\were.0:          $(HACK_H)
$(OBJ)\were.1-b:        $(HACK_H)
$(OBJ)\wield.o:         $(HACK_H)
$(OBJ)\wizard.0:        $(HACK_H)
$(OBJ)\wizard.1-b:      $(HACK_H)
$(OBJ)\worm.o:          $(HACK_H)   $(INCL)\wseg.h
$(OBJ)\worn.o:          $(HACK_H)
$(OBJ)\write.o:         $(HACK_H)
$(OBJ)\zap.o:           $(HACK_H)
