raze/polymer/eduke32/Makefile.msvc
terminx 50c30ab790 Animation system overhaul part 1. This allows for an unlimited number of .anm/.ivf files to be defined via duke3d.def and played back at any time with the new CON commands. Syntax is currently as follows, but may change:
cutscene "somefile.anm" { delay 10 } // defines somefile.anm with a delay of 10 120Hz tics between frames. a more typical framerate method may come later, but this is how the originals worked.

Once defined, they can be played through CON with the new playback command, also called "cutscene". It works like this:

definequote 12345 somefile.anm
define ANIM_SOMEFILE 12345

...

cutscene ANIM_SOMEFILE // halts game execution and immediately plays cutscene, resuming execution when finished

...

Sounds can be played during animations (and tiles can be overlaid, etc) like this:

onevent EVENT_CUTSCENE
    ifcutscene ANIM_SOMEFILE
    {
        ifvare RETURN 12 // frame 12
            sound FLY_BY
        rotatesprite ...
    }
endevent

The value of the RETURN var at the end of EVENT_CUTSCENE determines the next frame to play. This can be used for looping, etc. Attempting to play animations backwards outright is not advised as animations only seek in one direction (so rewinding requires running it through from frame 0 again). This is will WIP and hasn't been heavily tested at all, so please try it out.

git-svn-id: https://svn.eduke32.com/eduke32@4987 1a8010ca-5511-0410-912e-c29ae57300e0
2015-02-11 05:22:07 +00:00

360 lines
9.6 KiB
Text

# EDuke32 Makefile for Microsoft NMake
obj=obj
ENGINE_ROOT=build
ENGINE_SRC=$(ENGINE_ROOT)\src
ENGINE_INC=$(ENGINE_ROOT)\include
ENGINE_OBJ=$(ENGINE_ROOT)\$(obj)
DUKE3D_SRC=source
DUKE3D_OBJ=$(DUKE3D_SRC)\$(obj)
DUKE3D_INC=$(DUKE3D_SRC)
DUKE3D_RSRC=rsrc
AUDIOLIB_ROOT=$(DUKE3D_SRC)\jaudiolib
AUDIOLIB_OBJ=$(AUDIOLIB_ROOT)\$(obj)
AUDIOLIB_INC=$(AUDIOLIB_ROOT)\include
AUDIOLIB_SRC=$(AUDIOLIB_ROOT)\src
ENET_ROOT=$(DUKE3D_SRC)\enet
ENET_OBJ=$(ENET_ROOT)\$(obj)
ENET_INC=$(ENET_ROOT)\include
ENET_SRC=$(ENET_ROOT)\src
o=obj
res=res
asm=masm
CPLUSPLUS=1
!ifndef WINBITS
WINBITS=32
!endif
WINLIB=\$(WINBITS)
!if ($(WINBITS)==32)
WINMACHINE=/MACHINE:X86
!elseif ($(WINBITS)==64)
WINMACHINE=/MACHINE:X64
!endif
# the WDK allows us to link against msvcrt.dll instead of msvcrxxx.dll
# this path should match build\Makefile.msvc
# WDKROOT="H:\WinDDK\7600.16385.1"
PLATFORM=platform\Windows
AUDIOINC=source\jaudiolib\third-party\common
AUDIOPLATFORM=source\jaudiolib\third-party\Windows
!ifndef RENDERTYPE
RENDERTYPE=WIN
!endif
!ifndef MIXERTYPE
MIXERTYPE=WIN
!endif
!ifdef DEBUG
# debugging options
flags_cl=/Od /Zi
flags_link=/DEBUG
!else
# release options
flags_cl=/O2 /GL /MP # /I$(WDKROOT)\inc\crt /I$(WDKROOT)\inc\api
!if ($(WINBITS)!=64)
flags_cl=$(flags_cl) /arch:SSE
!endif
flags_link=/RELEASE /LTCG # /LIBPATH:$(WDKROOT)\lib\wxp\i386 /LIBPATH:$(WDKROOT)\lib\Crt\i386
!endif
ENGINEOPTS=/DUSE_OPENGL /DPOLYMER /DUSE_LIBPNG /DUSE_LIBVPX /DHAVE_VORBIS /DHAVE_FLAC
!ifdef CPLUSPLUS
ENGINEOPTS=$(ENGINEOPTS) /TP
!endif
!if ($(WINBITS)==64)
NOASM=1
!endif
CC=cl
AS=ml
LINK=link /nologo /opt:ref
MT=mt
CFLAGS= /MT /J /nologo $(flags_cl) \
/I$(DUKE3D_INC) /I$(ENGINE_INC)\msvc /I$(ENGINE_INC) /I$(DUKE3D_SRC)\jmact /I$(AUDIOLIB_ROOT)\include /I$(ENET_ROOT)\include \
/W2 $(ENGINEOPTS) \
/I$(PLATFORM)\include /I$(AUDIOINC)\include /DRENDERTYPE$(RENDERTYPE)=1 /DMIXERTYPE$(MIXERTYPE)=1 /DSDL_FRAMEWORK /DSDL_TARGET=2
ENET_CFLAGS=/I$(ENET_INC) /I$(ENET_SRC)
AUDIOLIB_CFLAGS=/I$(AUDIOLIB_INC) /I$(AUDIOLIB_SRC)
LIBS=user32.lib gdi32.lib shell32.lib winmm.lib ws2_32.lib comctl32.lib shlwapi.lib oleaut32.lib ole32.lib imm32.lib version.lib \
libFLAC.a libogg.a libvorbis.a libvorbisfile.a libvpx.a libpng_mini.a libz_mini.a libcompat-from-mingw-w64.a \
dxguid.lib dsound.lib advapi32.lib libcompat-to-msvc.a
!if ("$(RENDERTYPE)"=="SDL")
LIBS=libSDL2main.a libSDL2.a libSDL2_mixer.a $(LIBS)
!endif
LIBS=/NODEFAULTLIB:glu32.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib /NODEFAULTLIB:libcmt.lib \
/NODEFAULTLIB:libcmtd.lib $(LIBS)
# NOASM When defined, uses C instead of assembly code
!ifdef NOASM
CFLAGS=$(CFLAGS) /DNOASM
!endif
ASFLAGS=/nologo /coff /c
EXESUFFIX=.exe
!ifdef DEBUG
CFLAGS=$(CFLAGS) /DDEBUGGINGAIDS /D "_CRT_SECURE_NO_DEPRECATE"
LIBS=$(LIBS) msvcrtd.lib
!else
# comment msvcrt_winxp.obj if not using the WDK
LIBS=$(LIBS) msvcrt.lib # msvcrt_winxp.obj
!endif
ENGINE_OBJS= \
!ifdef NOASM
$(ENGINE_OBJ)\a-c.$o \
!else
$(ENGINE_OBJ)\a.$o \
!endif
$(ENGINE_OBJ)\baselayer.$o \
$(ENGINE_OBJ)\cache1d.$o \
$(ENGINE_OBJ)\common.$o \
$(ENGINE_OBJ)\compat.$o \
$(ENGINE_OBJ)\crc32.$o \
$(ENGINE_OBJ)\defs.$o \
$(ENGINE_OBJ)\engine.$o \
$(ENGINE_OBJ)\glbuild.$o \
$(ENGINE_OBJ)\texcache.$o \
$(ENGINE_OBJ)\kplib.$o \
$(ENGINE_OBJ)\hightile.$o \
$(ENGINE_OBJ)\polymost.$o \
$(ENGINE_OBJ)\polymer.$o \
$(ENGINE_OBJ)\mdsprite.$o \
$(ENGINE_OBJ)\voxmodel.$o \
$(ENGINE_OBJ)\dxtfilter.$o \
$(ENGINE_OBJ)\textfont.$o \
$(ENGINE_OBJ)\smalltextfont.$o \
$(ENGINE_OBJ)\lz4.$o \
$(ENGINE_OBJ)\md4.$o \
$(ENGINE_OBJ)\mmulti_null.$o \
$(ENGINE_OBJ)\osd.$o \
$(ENGINE_OBJ)\pragmas.$o \
$(ENGINE_OBJ)\scriptfile.$o \
$(ENGINE_OBJ)\mutex.$o \
$(ENGINE_OBJ)\winbits.$o \
$(ENGINE_OBJ)\xxhash.$o
ENGINE_EDITOR_OBJS=$(ENGINE_OBJ)\build.$o \
$(ENGINE_OBJ)\startwin.editor.$o \
$(ENGINE_OBJ)\config.$o
ENET_OBJS=$(ENET_OBJ)\callbacks.$o \
$(ENET_OBJ)\host.$o \
$(ENET_OBJ)\list.$o \
$(ENET_OBJ)\packet.$o \
$(ENET_OBJ)\peer.$o \
$(ENET_OBJ)\protocol.$o \
$(ENET_OBJ)\win32.$o \
$(ENET_OBJ)\compress.$o
AUDIOLIB_OBJS=$(AUDIOLIB_OBJ)\drivers.$o \
$(AUDIOLIB_OBJ)\fx_man.$o \
$(AUDIOLIB_OBJ)\multivoc.$o \
$(AUDIOLIB_OBJ)\mix.$o \
$(AUDIOLIB_OBJ)\mixst.$o \
$(AUDIOLIB_OBJ)\pitch.$o \
$(AUDIOLIB_OBJ)\formats.$o \
$(AUDIOLIB_OBJ)\vorbis.$o \
$(AUDIOLIB_OBJ)\flac.$o \
$(AUDIOLIB_OBJ)\xa.$o \
$(AUDIOLIB_OBJ)\driver_nosound.$o
MACT_OBJS=$(DUKE3D_OBJ)\file_lib.$o \
$(DUKE3D_OBJ)\control.$o \
$(DUKE3D_OBJ)\keyboard.$o \
$(DUKE3D_OBJ)\mouse.$o \
$(DUKE3D_OBJ)\joystick.$o \
$(DUKE3D_OBJ)\mathutil.$o \
$(DUKE3D_OBJ)\scriplib.$o
DUKE3D_OBJS=$(DUKE3D_OBJ)\game.$o \
$(DUKE3D_OBJ)\game_inline.$o \
$(DUKE3D_OBJ)\actors.$o \
$(DUKE3D_OBJ)\actors_inline.$o \
$(DUKE3D_OBJ)\anim.$o \
$(DUKE3D_OBJ)\animsounds.$o \
$(DUKE3D_OBJ)\animvpx.$o \
$(DUKE3D_OBJ)\common.$o \
$(DUKE3D_OBJ)\demo.$o \
$(DUKE3D_OBJ)\gamedef.$o \
$(DUKE3D_OBJ)\gameexec.$o \
$(DUKE3D_OBJ)\gamevars.$o \
$(DUKE3D_OBJ)\global.$o \
$(DUKE3D_OBJ)\input.$o \
$(DUKE3D_OBJ)\menus.$o \
$(DUKE3D_OBJ)\namesdyn.$o \
$(DUKE3D_OBJ)\net.$o \
$(DUKE3D_OBJ)\player.$o \
$(DUKE3D_OBJ)\premap.$o \
$(DUKE3D_OBJ)\savegame.$o \
$(DUKE3D_OBJ)\sector.$o \
$(DUKE3D_OBJ)\sector_inline.$o \
$(DUKE3D_OBJ)\rev.$o \
$(DUKE3D_OBJ)\rts.$o \
$(DUKE3D_OBJ)\config.$o \
$(DUKE3D_OBJ)\animlib.$o\
$(DUKE3D_OBJ)\osdfuncs.$o \
$(DUKE3D_OBJ)\osdcmds.$o \
$(DUKE3D_OBJ)\grpscan.$o \
$(DUKE3D_OBJ)\winbits.$o \
$(DUKE3D_OBJ)\gameres.$(res) \
$(DUKE3D_OBJ)\startwin.game.$o \
$(MACT_OBJS) \
$(DUKE3D_OBJ)\sounds.$o \
$(DUKE3D_OBJ)\soundsdyn.$o \
!ifdef DEBUG
$(DUKE3D_OBJ)\mdump.$o
!endif
DUKE3D_EDITOR_OBJS=$(DUKE3D_OBJ)\astub.$o \
$(DUKE3D_OBJ)\common.$o \
$(DUKE3D_OBJ)\grpscan.$o \
$(DUKE3D_OBJ)\mathutil.$o \
$(DUKE3D_OBJ)\m32common.$o \
$(DUKE3D_OBJ)\m32def.$o \
$(DUKE3D_OBJ)\m32vars.$o \
$(DUKE3D_OBJ)\m32exec.$o \
$(DUKE3D_OBJ)\sounds_mapster32.$o \
$(DUKE3D_OBJ)\rev.$o \
$(DUKE3D_OBJ)\buildres.$(res) \
!ifdef DEBUG
$(DUKE3D_OBJ)\mdump.$o
!endif
!if ("$(RENDERTYPE)"=="WIN")
ENGINE_OBJS=$(ENGINE_OBJS) $(ENGINE_OBJ)\winlayer.$o $(ENGINE_OBJ)\rawinput.$o
!endif
!if ("$(RENDERTYPE)"=="SDL")
ENGINE_OBJS=$(ENGINE_OBJS) $(ENGINE_OBJ)\sdlayer.$o
DUKE3D_OBJS=$(DUKE3D_OBJS) $(DUKE3D_OBJ)\game_icon.$o
DUKE3D_EDITOR_OBJS=$(DUKE3D_EDITOR_OBJS) $(DUKE3D_OBJ)\build_icon.$o
!endif
!if ("$(MIXERTYPE)"=="WIN")
DUKE3D_OBJS=$(DUKE3D_OBJS) $(DUKE3D_OBJ)\midi.$o $(DUKE3D_OBJ)\music.$o $(DUKE3D_OBJ)\mpu401.$o
AUDIOLIB_OBJS=$(AUDIOLIB_OBJS) $(AUDIOLIB_OBJ)\driver_directsound.$o
AUDIOLIB_CFLAGS=$(AUDIOLIB_CFLAGS) /DHAVE_DS
!endif
!if ("$(MIXERTYPE)"=="SDL")
DUKE3D_OBJS=$(DUKE3D_OBJS) $(DUKE3D_OBJ)\sdlmusic.$o
AUDIOLIB_OBJS=$(AUDIOLIB_OBJS) $(AUDIOLIB_OBJ)/driver_sdl.$o
AUDIOLIB_CFLAGS=$(AUDIOLIB_CFLAGS) /DHAVE_SDL
!endif
DUKE3D_OBJS=$(DUKE3D_OBJS) $(MUSICOBJ)
DUKE3D_EDITOR_OBJS=$(DUKE3D_EDITOR_OBJS) $(MUSICOBJ)
CHECKDIR_ENGINE=@if not exist "$(ENGINE_OBJ)" mkdir "$(ENGINE_OBJ)"
CHECKDIR_DUKE3D=@if not exist "$(DUKE3D_OBJ)" mkdir "$(DUKE3D_OBJ)"
CHECKDIR_ENET=@if not exist "$(ENET_OBJ)" mkdir "$(ENET_OBJ)"
CHECKDIR_AUDIOLIB=@if not exist "$(AUDIOLIB_OBJ)" mkdir "$(AUDIOLIB_OBJ)"
# RULES
.SUFFIXES: .masm
{$(ENGINE_SRC)}.masm{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(AS) /c $(ASFLAGS) /Fo$@ $<
{$(ENGINE_SRC)\util}.c{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(ENGINE_SRC)\misc}.rc{$(ENGINE_OBJ)}.$(res):
$(CHECKDIR_ENGINE)
$(RC) /i$(ENGINE_INC)\ /fo$@ /r $<
{$(ENGINE_SRC)}.c{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(ENGINE_SRC)}.cc{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(ENGINE_SRC)}.cpp{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(ENGINE_SRC)}.cxx{$(ENGINE_OBJ)}.$o:
$(CHECKDIR_ENGINE)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(ENET_SRC)}.c{$(ENET_OBJ)}.$o:
$(CHECKDIR_ENET)
$(CC) /c $(CFLAGS) $(ENET_CFLAGS) /Fo$@ $<
{$(AUDIOLIB_SRC)}.c{$(AUDIOLIB_OBJ)}.$o:
$(CHECKDIR_AUDIOLIB)
$(CC) /c $(CFLAGS) $(AUDIOLIB_CFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\}.masm{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(AS) /c $(ASFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\jmact}.c{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\util}.c{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\}.c{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(DUKE3D_RSRC)\}.c{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\}.cpp{$(DUKE3D_OBJ)\}.$o:
$(CHECKDIR_DUKE3D)
$(CC) /c $(CFLAGS) /Fo$@ $<
{$(DUKE3D_SRC)\misc}.rc{$(DUKE3D_OBJ)\}.$(res):
$(CHECKDIR_DUKE3D)
$(RC) /i$(ENGINE_INC)\ /i$(DUKE3D_SRC)\ /i$(DUKE3D_RSRC)\ /DPOLYMER /fo$@ /r $<
# TARGETS
all: eduke32$(EXESUFFIX) mapster32$(EXESUFFIX)
eduke32$(EXESUFFIX): $(DUKE3D_OBJS) $(ENGINE_OBJS) $(AUDIOLIB_OBJS) $(ENET_OBJS)
$(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS $(WINMACHINE) /LIBPATH:$(PLATFORM)\lib$(WINLIB) /LIBPATH:$(AUDIOPLATFORM)\lib$(WINLIB) $(flags_link) /MAP $** $(LIBS)
$(MT) -manifest $(DUKE3D_RSRC)$(WINLIB)\manifest.game.xml -hashupdate -outputresource:$@ -out:$@.manifest
mapster32$(EXESUFFIX): $(DUKE3D_EDITOR_OBJS) $(ENGINE_OBJS) $(ENGINE_EDITOR_OBJS) $(AUDIOLIB_OBJS)
$(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS $(WINMACHINE) /LIBPATH:$(PLATFORM)\lib$(WINLIB) /LIBPATH:$(AUDIOPLATFORM)\lib$(WINLIB) $(flags_link) /MAP $** $(LIBS)
$(MT) -manifest $(DUKE3D_RSRC)$(WINLIB)\manifest.build.xml -hashupdate -outputresource:$@ -out:$@.manifest
!include Makefile.deps
!include $(ENGINE_ROOT)\Makefile.deps
# PHONIES
clean:
-del /Q eduke32$(EXESUFFIX) mapster32$(EXESUFFIX) $(DUKE3D_OBJS) $(DUKE3D_EDITOR_OBJS) *.pdb *.map *.manifest
veryclean: clean
-del /Q $(ENGINE_OBJS) $(ENGINE_EDITOR_OBJS) $(ENET_OBJS) $(AUDIOLIB_OBJS)