mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-27 22:42:57 +00:00
7e7ab6b4ec
- Added multiple-choice sound sequences. These overcome one of the major deficiences of the Hexen-inherited SNDSEQ system while still being Hexen compatible: Custom door sounds can now use different opening and closing sequences, for both normal and blazing speeds. - Added a serializer for TArray. - Added a countof macro to doomtype.h. See the1's blog to find out why it's implemented the way it is. <http://blogs.msdn.com/the1/articles/210011.aspx> - Added a new method to FRandom for getting random numbers larger than 255, which lets me: - Fixed: SNDSEQ delayrand commands could delay for no more than 255 tics. - Fixed: If you're going to have sector_t.SoundTarget, then they need to be included in the pointer cleanup scans. - Ported back newer name code from 2.1. - Fixed: Using -warp with only one parameter in Doom and Heretic to select a map on episode 1 no longer worked. - New: Loading a multiplayer save now restores the players based on their names rather than on their connection order. Using connection order was sensible when -net was the only way to start a network game, but with -host/-join, it's not so nice. Also, if there aren't enough players in the save, then the extra players will be spawned normally, so you can continue a saved game with more players than you started it with. - Added some new SNDSEQ commands to make it possible to define Heretic's ambient sounds in SNDSEQ: volumerel, volumerand, slot, randomsequence, delayonce, and restart. With these, it is basically possible to obsolete all of the $ambient SNDINFO commands. - Fixed: Sound sequences would only execute one command each time they were ticked. - Fixed: No bounds checking was done on the volume sound sequences played at. - Fixed: The tic parameter to playloop was useless and caused it to act like a redundant playrepeat. I have removed all the logic that caused playloop to play repeating sounds, and now it acts like an infinite sequence of play/delay commands until the sequence is stopped. - Fixed: Sound sequences were ticked every frame, not every tic, so all the delay commands were timed incorrectly and varied depending on your framerate. Since this is useful for restarting looping sounds that got cut off, I have not changed this. Instead, the delay commands now record the tic when execution should resume, not the number of tics left to delay. SVN r57 (trunk)
235 lines
10 KiB
Text
235 lines
10 KiB
Text
do ifopt help
|
|
echo "Available options are:
|
|
debug - Build debug instead of release
|
|
verbose - Show system commands instead of decorated messages
|
|
clean - Clean temp files (use with debug to clean debug files)
|
|
zdoom.wad - (Re)build just zdoom.wad, even if it already exists
|
|
|
|
To use with MinGW, compile cbuild.c into an executable using:
|
|
gcc -O2 -W -Wall -Werror -o cbuild.exe cbuild.c
|
|
|
|
Or if you have a sh-compatible shell, you can run the cbuild.c file
|
|
directly or have it automatically compile itself with GCC by passing
|
|
--make-compiled
|
|
"
|
|
exit 0
|
|
done
|
|
|
|
# Here's the main script. All commands are case in-sensitive.
|
|
|
|
# 'Ifopt' will check if the following word was passed on the command line, and execute the
|
|
# rest of the line if so. The reverse, 'ifnopt', also exists.
|
|
|
|
ifopt verbose verbose 1
|
|
ifopt debug CONFIG = Debug
|
|
|
|
# VAR?=foo will only set the var if it's unset. Note that if you want spaces, put '' or ""
|
|
# quotes around the value. VAR+=foo will append foo to the very end of the existing var.
|
|
# And, VAR-=foo will remove all occurences of foo from the var.
|
|
CONFIG ?= Release
|
|
|
|
OPTLEVEL ?= 2
|
|
ARCH_TYPE ?= pentium
|
|
TUNE_TYPE ?= athlon-xp
|
|
|
|
RELEASETARGET ?= zdoomgcc
|
|
DEBUGTARGET ?= zdoomgccd
|
|
|
|
DEBUGOBJDIR = debugobj
|
|
RELEASEOBJDIR = releaseobj
|
|
|
|
|
|
CPPFLAGS = "-DHAVE_FILELENGTH -D__forceinline=inline -Izlib -IFLAC -Isrc -Isrc/sdl -Isrc/g_doom -Isrc/g_heretic -Isrc/g_hexen -Isrc/g_raven -Isrc/g_strife -Isrc/g_shared -Isrc/oplsynth -Isrc/sound"
|
|
LDFLAGS = "-lFLAC++ -lFLAC -lz -lfmod `sdl-config --libs`"
|
|
CFLAGS = "`sdl-config --cflags` "
|
|
|
|
do ifopt debug
|
|
OBJDIR = "${DEBUGOBJDIR}"
|
|
CFLAGS += "-Wall -Wno-unused -g3"
|
|
CPPFLAGS += " -D_DEBUG"
|
|
CXXFLAGS = "${CFLAGS}"
|
|
NASMFLAGS = "-g"
|
|
TARGET = "${DEBUGTARGET}"
|
|
else
|
|
OBJDIR = "${RELEASEOBJDIR}"
|
|
CFLAGS += "-march=${ARCH_TYPE} -mtune=${TUNE_TYPE} -Wall -Wno-unused -O${OPTLEVEL} -fomit-frame-pointer"
|
|
CPPFLAGS += " -DNDEBUG"
|
|
CXXFLAGS = "${CFLAGS}"
|
|
LDFLAGS += " -Wl,-Map=zdoomgcc.map"
|
|
TARGET = "${RELEASETARGET}"
|
|
done
|
|
|
|
ifnplat win32 CPPFLAGS += " -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp"
|
|
|
|
# This is where the object and dependancy files go when compiled
|
|
OBJ_DIR = "${OBJDIR}"
|
|
DEP_DIR = "${OBJDIR}"
|
|
|
|
do ifnopt clean
|
|
EVILCLEAN = 0
|
|
|
|
ifnexist "${OBJ_DIR}" mkdir "${OBJ_DIR}"
|
|
|
|
ifopt zdoom.wad goto makewad
|
|
|
|
do if "${NOASM}"=""
|
|
# This sets a custom command to run durring a compile for files with the
|
|
# given extension. <@> is replaced with the output file, <!> is the source,
|
|
# and <*> is the raw name as given to the compile command, without the
|
|
# extension
|
|
do ifplat win32
|
|
associate 'nas' 'nasmw -o <@> -f win32 <!>'
|
|
else ifplat unix
|
|
associate 'nas' 'nasm -o <@> -f elf -DM_TARGET_LINUX <!>'
|
|
else
|
|
echo ''
|
|
echo Disabling assembly for this platform.
|
|
echo ''
|
|
goto no_asm
|
|
done
|
|
CPPFLAGS = "-DUSEASM ${CPPFLAGS}"
|
|
else
|
|
#:no_asm
|
|
CPPFLAGS = "-DNOASM ${CPPFLAGS}"
|
|
done
|
|
|
|
# Set the compile and link commands. 'Compile' will compile the list of sourcefiles and
|
|
# store their names until another Compile is encountered (if you wish to add to a previous
|
|
# list, use 'Compileadd').
|
|
#
|
|
# C sources are compiled with:
|
|
# ${CC} ${CPPFLAGS} ${CFLAGS} ${DEP_OPT}${DEP_DIR}/file-sans-ext${DEP_EXT} ${OUT_OPT}${OBJ_DIR}/file-sans-ext${OBJ_EXT} ${SRC_OPT}detected-source-path/file-with-ext
|
|
#
|
|
# and for C++ sources:
|
|
# ${CXX} ${CPPFLAGS} ${CXXFLAGS} ${DEP_OPT}${DEP_DIR}/file-sans-ext${DEP_EXT} ${OUT_OPT}${OBJ_DIR}/file-sans-ext${OBJ_EXT} ${SRC_OPT}detected-source-path/file-with-ext
|
|
#
|
|
# A source file will not be compiled if the object file exists and is newer than the source.
|
|
# Or if the associated dependancy file exists, all of the object's dependancies are older
|
|
# than the object.
|
|
#
|
|
# If DEP_OPT is unset, the whole DEP_* section will be removed from the command line. Files
|
|
# with unknown extensions are silently ignored (but will still be passed to Linkexec with
|
|
# their name "object-ified").
|
|
#
|
|
# 'Linkexec' executes:
|
|
# ${LD} ${OUT_OPT}file${EXE_EXT} <list of objects previously compiled> ${LDFLAGS}
|
|
#
|
|
# It will not link if the target executable exists and is newer than all of the objects it's
|
|
# linking with.
|
|
|
|
COMPILER = Compile
|
|
LINK = Linkexec
|
|
|
|
# This is where it can find the sources.
|
|
src_paths src src/g_doom src/g_heretic src/g_hexen src/g_raven src/g_strife \
|
|
src/g_shared src/oplsynth src/sound src/sdl
|
|
|
|
else
|
|
|
|
# Override the compile and link commands with rmobj and rmexec. A quick way to delete
|
|
# the objects and executables while dealing with only one list. No, rmobj will not
|
|
# delete the specified source file, but rather the object and dependancy files that would
|
|
# result from compiling the specified source.
|
|
EVILCLEAN = 1
|
|
COMPILER = -rmobj
|
|
LINK = -rmexec
|
|
|
|
done
|
|
|
|
${COMPILER} "autostart.cpp a.nas blocks.nas misc.nas tmap.nas tmap2.nas tmap3.nas \
|
|
am_map.cpp b_bot.cpp b_func.cpp b_game.cpp b_move.cpp b_think.cpp bbannouncer.cpp \
|
|
c_bind.cpp c_cmds.cpp c_console.cpp c_cvars.cpp c_dispatch.cpp c_expr.cpp \
|
|
cmdlib.cpp colormatcher.cpp configfile.cpp ct_chat.cpp d_dehacked.cpp d_main.cpp \
|
|
d_net.cpp d_netinfo.cpp d_protocol.cpp decallib.cpp decorations.cpp dobject.cpp \
|
|
doomdef.cpp doomstat.cpp dsectoreffect.cpp dthinker.cpp empty.cpp f_finale.cpp \
|
|
f_wipe.cpp farchive.cpp files.cpp g_game.cpp g_hub.cpp g_level.cpp gameconfigfile.cpp \
|
|
gi.cpp hu_scores.cpp info.cpp infodefaults.cpp lumpconfigfile.cpp m_alloc.cpp \
|
|
m_argv.cpp m_bbox.cpp m_cheat.cpp m_fixed.cpp m_menu.cpp m_misc.cpp m_options.cpp \
|
|
m_png.cpp m_random.cpp mus2midi.cpp nodebuild.cpp nodebuild_events.cpp \
|
|
nodebuild_extract.cpp nodebuild_gl.cpp nodebuild_utility.cpp p_acs.cpp \
|
|
p_buildmap.cpp p_ceiling.cpp p_conversation.cpp p_doors.cpp p_effect.cpp \
|
|
p_enemy.cpp p_floor.cpp p_interaction.cpp p_lights.cpp p_lnspec.cpp p_map.cpp \
|
|
p_maputl.cpp p_mobj.cpp p_pillar.cpp p_plats.cpp p_pspr.cpp p_saveg.cpp \
|
|
p_sectors.cpp p_setup.cpp p_sight.cpp p_spec.cpp p_switch.cpp p_teleport.cpp \
|
|
p_terrain.cpp p_things.cpp p_tick.cpp p_trace.cpp p_user.cpp p_writemap.cpp \
|
|
p_xlat.cpp po_man.cpp r_bsp.cpp r_data.cpp r_draw.cpp r_drawt.cpp r_main.cpp \
|
|
r_plane.cpp r_segs.cpp r_sky.cpp r_things.cpp r_polymost.cpp s_advsound.cpp \
|
|
s_environment.cpp s_playlist.cpp s_sndseq.cpp s_sound.cpp sc_man.cpp skins.cpp \
|
|
st_stuff.cpp stats.cpp stringtable.cpp tables.cpp tempfiles.cpp thingdef.cpp thingdef_codeptr.cpp \
|
|
v_collection.cpp v_draw.cpp v_font.cpp v_palette.cpp v_pfx.cpp v_text.cpp \
|
|
v_video.cpp vectors.cpp name.cpp zstring.cpp zstringpool.cpp zstrformat.cpp \
|
|
w_wad.cpp wi_stuff.cpp a_arachnotron.cpp a_archvile.cpp a_bossbrain.cpp \
|
|
a_bruiser.cpp a_cacodemon.cpp a_cyberdemon.cpp a_demon.cpp \
|
|
a_doomarmor.cpp a_doomartifacts.cpp a_doomdecorations.cpp a_doomhealth.cpp \
|
|
a_doomimp.cpp a_doomkeys.cpp a_doommisc.cpp a_doomplayer.cpp a_doomweaps.cpp \
|
|
a_fatso.cpp a_keen.cpp a_lostsoul.cpp a_painelemental.cpp a_possessed.cpp \
|
|
a_revenant.cpp a_scriptedmarine.cpp a_spidermaster.cpp doom_sbar.cpp a_beast.cpp \
|
|
a_chicken.cpp a_clink.cpp a_dsparil.cpp a_hereticarmor.cpp \
|
|
a_hereticartifacts.cpp a_hereticdecorations.cpp a_hereticimp.cpp a_heretickeys.cpp \
|
|
a_hereticmisc.cpp a_hereticplayer.cpp a_hereticweaps.cpp a_ironlich.cpp \
|
|
a_knight.cpp a_mummy.cpp a_snake.cpp a_wizard.cpp heretic_sbar.cpp a_bats.cpp \
|
|
a_bishop.cpp a_blastradius.cpp a_boostarmor.cpp a_centaur.cpp a_clericboss.cpp \
|
|
a_clericflame.cpp a_clericholy.cpp a_clericmace.cpp a_clericplayer.cpp \
|
|
a_clericstaff.cpp a_demons.cpp a_dragon.cpp a_ettin.cpp a_fighteraxe.cpp \
|
|
a_fighterboss.cpp a_fighterhammer.cpp a_fighterplayer.cpp a_fighterquietus.cpp \
|
|
a_firedemon.cpp a_flame.cpp a_flechette.cpp a_fog.cpp a_healingradius.cpp \
|
|
a_heresiarch.cpp a_hexenarmor.cpp a_hexendecorations.cpp a_hexenkeys.cpp \
|
|
a_hexenspecialdecs.cpp a_iceguy.cpp a_korax.cpp a_mageboss.cpp a_magecone.cpp \
|
|
a_magelightning.cpp a_mageplayer.cpp a_magestaff.cpp a_magewand.cpp a_mana.cpp \
|
|
a_pig.cpp a_puzzleitems.cpp a_scriptprojectiles.cpp a_serpent.cpp a_speedboots.cpp \
|
|
a_spike.cpp a_summon.cpp a_teleportother.cpp a_weaponpieces.cpp a_wraith.cpp \
|
|
hexen_sbar.cpp a_artiegg.cpp a_artitele.cpp a_minotaur.cpp a_ravenambient.cpp \
|
|
a_ravenartifacts.cpp a_ravenhealth.cpp a_acolyte.cpp a_alienspectres.cpp \
|
|
a_beggars.cpp a_coin.cpp a_crusader.cpp a_entityboss.cpp a_inquisitor.cpp \
|
|
a_loremaster.cpp a_macil.cpp a_merchants.cpp a_oracle.cpp a_peasant.cpp \
|
|
a_programmer.cpp a_questitems.cpp a_ratbuddy.cpp a_reaver.cpp a_rebels.cpp \
|
|
a_sentinel.cpp a_spectral.cpp a_stalker.cpp a_strifeammo.cpp a_strifearmor.cpp \
|
|
a_strifebishop.cpp a_strifeitems.cpp a_strifekeys.cpp a_strifeplayer.cpp \
|
|
a_strifestuff.cpp a_strifeweapons.cpp a_templar.cpp a_thingstoblowup.cpp \
|
|
a_zombie.cpp strife_sbar.cpp a_action.cpp a_artifacts.cpp a_bridge.cpp \
|
|
a_camera.cpp a_debris.cpp a_decals.cpp a_flashfader.cpp a_fountain.cpp \
|
|
a_hatetarget.cpp a_keys.cpp a_lightning.cpp a_movingcamera.cpp a_pickups.cpp \
|
|
a_quake.cpp a_secrettrigger.cpp a_sectoraction.cpp a_sharedmisc.cpp a_skies.cpp \
|
|
a_soundenvironment.cpp a_soundsequence.cpp a_spark.cpp a_splashes.cpp a_waterzone.cpp a_weaponpiece.cpp a_weapons.cpp \
|
|
hudmessages.cpp shared_sbar.cpp fmopl.cpp mlkernel.cpp mlopl.cpp mlopl_io.cpp \
|
|
opl_mus_player.cpp fmodsound.cpp i_music.cpp i_sound.cpp music_cd.cpp \
|
|
music_flac.cpp music_midi_midiout.cpp music_midi_stream.cpp music_midi_timidity.cpp \
|
|
music_mod.cpp music_mus_midiout.cpp music_mus_opl.cpp music_stream.cpp \
|
|
sample_flac.cpp crashcatcher.c i_input.cpp i_net.cpp i_cd.cpp i_main.cpp \
|
|
i_system.cpp hardware.cpp i_movie.cpp sdlvideo.cpp autozend.cpp"
|
|
|
|
${LINK} "${TARGET}"
|
|
|
|
|
|
# If we're not cleaning and zdoom.wad exists, exit now.
|
|
if "${EVILCLEAN}"="0" ifexist zdoom.wad exit 0
|
|
#:makewad
|
|
|
|
LDFLAGS = ''
|
|
CFLAGS = '-Os -Wall -fomit-frame-pointer'
|
|
|
|
src_paths tools/makewad
|
|
${COMPILER} makewad.c
|
|
${LINK} tools/makewad/makewad
|
|
|
|
src_paths tools/xlatcc
|
|
${COMPILER} xlat-parse.tab.c gen.c
|
|
${LINK} tools/xlatcc/xlatcc
|
|
|
|
src_paths tools/dehsupp
|
|
${COMPILER} parse.tab.c
|
|
${LINK} tools/dehsupp/dehsupp
|
|
|
|
do if "${EVILCLEAN}"="1"
|
|
-rm "${OBJ_DIR}"
|
|
-rm "${DEP_DIR}"
|
|
-rm zdoomgcc.map
|
|
-rm zdoom.wad
|
|
else
|
|
chdir wadsrc
|
|
do ifret 0
|
|
-call ../tools/makewad/makewad zdoom.lst
|
|
ifret 0 -copy zdoom.wad ../
|
|
chdir ..
|
|
done
|
|
done
|