aboutsummaryrefslogtreecommitdiff
path: root/games
diff options
context:
space:
mode:
authorKirill Ponomarev <krion@FreeBSD.org>2004-01-23 15:31:16 +0000
committerKirill Ponomarev <krion@FreeBSD.org>2004-01-23 15:31:16 +0000
commit78ac02537e488068066d33b911aafc48f83f2599 (patch)
tree4bf46472f9852b98b86b37fbcd464990a7d9a749 /games
parentb0063e081403ecc3ee1d4b02462be8db29930024 (diff)
downloadports-78ac02537e488068066d33b911aafc48f83f2599.tar.gz
ports-78ac02537e488068066d33b911aafc48f83f2599.zip
Add vavoom 1.15.1,
Vavoom is a source port based on sources of Doom, Heretic, Hexen and a little bit from Quake. To play Vavoom you need main wad file from Doom, Ultimate Doom, Doom II, Heretic, Hexen or Strife. Differences from original game: * Polygonal engine with colored lighting, with software mode, * OpenGL support; * Translucency; * Complete support for freelook (look up & down) in all games; * A powerful language to describe game logic; * 100% client/server architecture with in-game joining; * Quake-style console, with key bindings; * Indirect support for DeHackEd; * Crosshair; * Jumping; PR: ports/61765 Submitted by: Igor Pokrovsky <tiamat@comset.net>
Notes
Notes: svn path=/head/; revision=98893
Diffstat (limited to 'games')
-rw-r--r--games/Makefile1
-rw-r--r--games/vavoom/Makefile76
-rw-r--r--games/vavoom/distinfo1
-rw-r--r--games/vavoom/files/patch-Makefile112
-rw-r--r--games/vavoom/files/patch-source-asm_i386.h18
-rw-r--r--games/vavoom/files/patch-source-cd_linux.cpp186
-rw-r--r--games/vavoom/files/patch-source-s_sdl.cpp150
-rw-r--r--games/vavoom/files/patch-source-sys_sdl.cpp74
-rw-r--r--games/vavoom/pkg-descr23
-rw-r--r--games/vavoom/pkg-message17
-rw-r--r--games/vavoom/pkg-plist30
11 files changed, 688 insertions, 0 deletions
diff --git a/games/Makefile b/games/Makefile
index c05ab9230cc0..579e6d74c7c0 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -424,6 +424,7 @@
SUBDIR += utserver-asu
SUBDIR += utserver-to
SUBDIR += vamos
+ SUBDIR += vavoom
SUBDIR += vectoroids
SUBDIR += virt
SUBDIR += wesnoth
diff --git a/games/vavoom/Makefile b/games/vavoom/Makefile
new file mode 100644
index 000000000000..ed35fb2e5e5d
--- /dev/null
+++ b/games/vavoom/Makefile
@@ -0,0 +1,76 @@
+# New ports collection makefile for: vavoom
+# Date created: 18 Jan 2004
+# Whom: Igor Pokrovsky <tiamat@comset.net>
+#
+# $FreeBSD$
+#
+
+PORTNAME= vavoom
+PORTVERSION= 1.15.1
+CATEGORIES= games
+MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
+MASTER_SITE_SUBDIR= ${PORTNAME}
+DISTNAME= v115_1_src
+
+MAINTAINER= tiamat@comset.net
+COMMENT= Doom, Doom II, Heretic, Hexen and Strife source port
+
+.ifdef (WITH_OPENAL)
+LIB_DEPENDS+= openal.0:${PORTSDIR}/audio/openal
+.endif
+
+USE_ZIP= yes
+USE_GMAKE= yes
+USE_REINPLACE= yes
+USE_SDL= mixer sdl
+USE_GL= yes
+ALL_TARGET= all sv
+ONLY_FOR_ARCHS= i386
+
+EXTRACT_AFTER_ARGS= -d ${WRKSRC}
+
+.ifdef (WITH_OPENAL)
+MAKE_ARGS= "USE_AL=1"
+.endif
+
+.ifndef (WITH_OPENAL)
+pre-everything::
+ @${ECHO_CMD} "********************************************************************"
+ @${ECHO_CMD} "You can define WITH_OPENAL=yes to build Vavoom with 3D sound support"
+ @${ECHO_CMD} "********************************************************************"
+.endif
+
+post-patch:
+ cd ${WRKSRC} && ${SH} ${WRKSRC}/fixunix.sh
+ @${REINPLACE_CMD} -e 's|SDL\/||g' ${WRKSRC}/source/*.cpp
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/Vavoom ${PREFIX}/bin
+ ${INSTALL_PROGRAM} ${WRKSRC}/VavoomSV ${PREFIX}/bin
+
+ @${MKDIR} ${DATADIR}
+ @${MKDIR} ${DATADIR}/basev
+ ${INSTALL_DATA} ${WRKSRC}/basev/default.cfg ${DATADIR}/basev
+ ${INSTALL_DATA} ${WRKSRC}/basev/startup.vs ${DATADIR}/basev
+ ${INSTALL_DATA} ${WRKSRC}/basev/games.txt ${DATADIR}/basev
+.for i in doom heretic hexen strife
+ @${MKDIR} ${DATADIR}/basev/${i}
+ ${INSTALL_DATA} ${WRKSRC}/basev/${i}/wad0.wad ${DATADIR}/basev/${i}
+.endfor
+.for i in doom1 doom2 tnt plutonia
+ @${MKDIR} ${DATADIR}/basev/${i}
+ ${INSTALL_DATA} ${WRKSRC}/basev/${i}/wad0.wad ${DATADIR}/basev/${i}
+ ${INSTALL_DATA} ${WRKSRC}/basev/${i}/base.txt ${DATADIR}/basev/${i}
+.endfor
+
+.ifndef (NOPORTDOCS)
+ @${MKDIR} ${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/vavmref.txt ${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/vavoom.txt ${DOCSDIR}
+.endif
+
+post-install:
+ @${SED} -e 's|%%PREFIX%%|${PREFIX}|; s|%%DATADIR%%|${DATADIR}|' \
+ <${PKGMESSAGE}
+
+.include <bsd.port.mk>
diff --git a/games/vavoom/distinfo b/games/vavoom/distinfo
new file mode 100644
index 000000000000..296eb2612fdd
--- /dev/null
+++ b/games/vavoom/distinfo
@@ -0,0 +1 @@
+MD5 (v115_1_src.zip) = 58a9fad8ec2168b12fe7154ebbee04ad
diff --git a/games/vavoom/files/patch-Makefile b/games/vavoom/files/patch-Makefile
new file mode 100644
index 000000000000..08e1e9ed0e98
--- /dev/null
+++ b/games/vavoom/files/patch-Makefile
@@ -0,0 +1,112 @@
+--- Makefile.orig Fri Dec 19 20:00:14 2003
++++ Makefile Fri Jan 23 16:41:34 2004
+@@ -8,7 +8,7 @@
+ #DEBUG = 1
+
+ # Uncomment to compile using SDL
+-#USE_SDL = 1
++USE_SDL = 1
+
+ # Uncomment to compile without OpenGL driver
+ #NOGL = 1
+@@ -70,7 +70,7 @@
+ obj/sys_i386.o \
+ obj/sys_sdl.o
+ GL_SYS_OBJ = obj/gl_sdl.o
+-LIBS := `sdl-config --libs` -lSDL_mixer -lm -lstdc++
++LIBS := `${SDL_CONFIG} --libs` -lSDL_mixer -lm -lstdc++
+ else
+ #-- Linux with Allegro --
+ SYS_OBJS = \
+@@ -214,7 +214,7 @@
+ ifdef MESAGL
+ LIBS := -lMesaGL $(LIBS)
+ else
+-LIBS := -lGL $(LIBS)
++LIBS := -lGL -L${X11BASE}/lib $(LIBS)
+ endif
+ endif
+
+@@ -308,8 +308,8 @@
+
+ # ---------------------------------------
+
+-C_ARGS = -c -W -Wall -march=pentiumpro -ffast-math
+-CPP_ARGS = -c -W -Wall -march=pentiumpro -ffast-math
++C_ARGS = -c ${CFLAGS} -I${X11BASE}/include `${SDL_CONFIG} --cflags` -W -Wall -ffast-math
++CPP_ARGS = -c ${CFLAGS} -I${X11BASE}/include `${SDL_CONFIG} --cflags` -W -Wall -ffast-math
+ ASM_ARGS = -c -W -Wall -x assembler-with-cpp
+ LINK_ARGS = -Wall
+
+@@ -337,7 +337,7 @@
+ exe: Vavoom$(EXE)
+
+ Vavoom$(EXE): $(OBJ_FILES) $(LIB_FILES)
+- gcc $(LINK_ARGS) -o $@ $^ $(LIBS)
++ ${CC} $(LINK_ARGS) -o $@ $^ $(LIBS)
+
+ suid:
+ chown root.root Vavoom
+@@ -347,13 +347,13 @@
+ addr2line -e Vavoom -f < crash.txt >> basev/debug.txt
+
+ obj/%.o : source/%.c
+- gcc $(C_ARGS) -o $@ $<
++ ${CC} $(C_ARGS) -o $@ $<
+
+ obj/%.o : source/%.cpp source/*.h
+- gcc $(CPP_ARGS) -o $@ $<
++ ${CC} $(CPP_ARGS) -o $@ $<
+
+ obj/%.o : source/%.s source/asm_i386.h
+- gcc $(ASM_ARGS) -o $@ $<
++ ${CC} $(ASM_ARGS) -o $@ $<
+
+ # ---------------------------------------
+
+@@ -370,16 +370,16 @@
+ svexe: VavoomSV$(EXE)
+
+ VavoomSV$(EXE): $(SV_OBJ_FILES)
+- gcc $(LINK_ARGS) -o $@ $(SV_OBJ_FILES) $(SV_LIBS)
++ ${CC} $(LINK_ARGS) -o $@ $(SV_OBJ_FILES) $(SV_LIBS)
+
+ obj/sv/%.o : source/%.c
+- gcc $(C_ARGS) -DSERVER -o $@ $<
++ ${CC} $(C_ARGS) -DSERVER -o $@ $<
+
+ obj/sv/%.o : source/%.cpp source/*.h
+- gcc $(CPP_ARGS) -DSERVER -o $@ $<
++ ${CC} $(CPP_ARGS) -DSERVER -o $@ $<
+
+ obj/sv/%.o : source/%.s
+- gcc $(ASM_ARGS) -DSERVER -o $@ $<
++ ${CC} $(ASM_ARGS) -DSERVER -o $@ $<
+
+ # ---------------------------------------
+
+@@ -415,11 +415,11 @@
+ # ---------------------------------------
+
+ ifndef INSTALL
+-INSTALL = ginstall
++INSTALL = install -c
+ endif
+
+ ifndef INSTALL_DIR
+-INSTALL_DIR = /usr/local/games/Vavoom
++INSTALL_DIR = ${DATADIR}
+ endif
+
+ ifndef INSTALL_GROUP
+@@ -511,8 +511,8 @@
+ asm: $(ASM_FILES)
+
+ source/%.asm : source/%.s source/asm_i386.h source/gas2tasm.exe
+- gcc -x assembler-with-cpp -E -P -DGAS2TASM $< -o - | source/gas2tasm.exe > $@
++ ${CC} -x assembler-with-cpp -E -P -DGAS2TASM $< -o - | source/gas2tasm.exe > $@
+
+ source/gas2tasm.exe : source/gas2tasm.c
+- gcc -O3 -ffast-math -fomit-frame-pointer -s -o $@ $<
++ ${CC} -O3 -ffast-math -fomit-frame-pointer -s -o $@ $<
+
diff --git a/games/vavoom/files/patch-source-asm_i386.h b/games/vavoom/files/patch-source-asm_i386.h
new file mode 100644
index 000000000000..7fa5793831f4
--- /dev/null
+++ b/games/vavoom/files/patch-source-asm_i386.h
@@ -0,0 +1,18 @@
+--- source/asm_i386.h.orig Mon Jan 19 09:45:14 2004
++++ source/asm_i386.h Mon Jan 19 09:46:32 2004
+@@ -27,13 +27,13 @@
+
+ #define USEASM
+
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ #define C(label) label // ELF format
+ #else
+ #define C(label) _##label // COFF format
+ #endif
+
+-#if !defined GAS2TASM && (defined DJGPP || defined __linux__)
++#if !defined GAS2TASM && (defined DJGPP || defined __linux__ || defined __FreeBSD__)
+ #define Align4 .p2align 2
+ #define Align8 .p2align 3
+ #define Align16 .p2align 4
diff --git a/games/vavoom/files/patch-source-cd_linux.cpp b/games/vavoom/files/patch-source-cd_linux.cpp
new file mode 100644
index 000000000000..7f2c3de300b1
--- /dev/null
+++ b/games/vavoom/files/patch-source-cd_linux.cpp
@@ -0,0 +1,186 @@
+--- source/cd_linux.cpp.orig Fri Jan 23 14:59:01 2004
++++ source/cd_linux.cpp Fri Jan 23 14:59:04 2004
+@@ -32,7 +32,7 @@
+ #include <fcntl.h>
+ #include <time.h>
+ #include <errno.h>
+-#include <linux/cdrom.h>
++#include <sys/cdio.h>
+
+ #include "gamedefs.h"
+ #include "s_local.h"
+@@ -137,7 +137,8 @@
+ void CD_Update(void)
+ {
+ guard(CD_Update);
+- struct cdrom_subchnl subchnl;
++ struct ioc_read_subchannel subchnl;
++ struct cd_sub_channel_info data;
+ static time_t lastchk;
+
+ if (!cd_started)
+@@ -149,15 +150,18 @@
+ if (playing && lastchk < time(NULL))
+ {
+ lastchk = time(NULL) + 2; //two seconds between chks
+- subchnl.cdsc_format = CDROM_MSF;
+- if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1 )
++ subchnl.data = &data;
++ subchnl.data_len = sizeof(data);
++ subchnl.address_format = CD_MSF_FORMAT;
++ subchnl.data_format = CD_CURRENT_POSITION;
++ if (ioctl(cdfile, CDIOCREADSUBCHANNEL, (char*) &subchnl) == -1 )
+ {
+- GCon->Log(NAME_Dev, "ioctl cdromsubchnl failed");
++ GCon->Log(NAME_Dev, "ioctl CDIOCREADSUBCHANNEL failed");
+ playing = false;
+ return;
+ }
+- if (subchnl.cdsc_audiostatus != CDROM_AUDIO_PLAY &&
+- subchnl.cdsc_audiostatus != CDROM_AUDIO_PAUSED)
++ if (subchnl.data->header.audio_status != CD_AS_PLAY_IN_PROGRESS &&
++ subchnl.data->header.audio_status != CD_AS_PLAY_PAUSED)
+ {
+ playing = false;
+ if (playLooping)
+@@ -337,24 +341,24 @@
+
+ static void CD_GetInfo(void)
+ {
+- struct cdrom_tochdr tochdr;
++ struct ioc_toc_header tochdr;
+
+ cdValid = false;
+
+- if (ioctl(cdfile, CDROMREADTOCHDR, &tochdr) == -1)
++ if (ioctl(cdfile, CDIOREADTOCHEADER, &tochdr) == -1)
+ {
+- GCon->Log(NAME_Dev, "ioctl cdromreadtochdr failed");
++ GCon->Log(NAME_Dev, "ioctl CDIOREADTOCHEADER failed");
+ return;
+ }
+
+- if (tochdr.cdth_trk0 < 1)
++ if (tochdr.starting_track < 1)
+ {
+ GCon->Log(NAME_Dev, "CDAudio: no music tracks");
+ return;
+ }
+
+ cdValid = true;
+- maxTrack = tochdr.cdth_trk1;
++ maxTrack = tochdr.ending_track;
+ }
+
+ //==========================================================================
+@@ -365,8 +369,8 @@
+
+ static void CD_Play(int track, boolean looping)
+ {
+- struct cdrom_tocentry entry;
+- struct cdrom_ti ti;
++ struct ioc_read_toc_single_entry entry;
++ struct ioc_play_track ti;
+
+ if (!cdValid)
+ {
+@@ -383,6 +387,7 @@
+ return;
+ }
+
++/*
+ // don't try to play a non-audio track
+ entry.cdte_track = track;
+ entry.cdte_format = CDROM_MSF;
+@@ -396,7 +401,7 @@
+ GCon->Logf("CDAudio: track %d is not audio", track);
+ return;
+ }
+-
++*/
+ if (playing)
+ {
+ if (playTrack == track)
+@@ -404,19 +409,19 @@
+ CD_Stop();
+ }
+
+- ti.cdti_trk0 = track;
+- ti.cdti_trk1 = track;
+- ti.cdti_ind0 = 1;
+- ti.cdti_ind1 = 99;
++ ti.start_track = track;
++ ti.end_track = track;
++ ti.start_index = 1;
++ ti.end_index = 99;
+
+- if (ioctl(cdfile, CDROMPLAYTRKIND, &ti) == -1)
++ if (ioctl(cdfile, CDIOCPLAYTRACKS, &ti) == -1)
+ {
+- GCon->Log(NAME_Dev, "ioctl cdromplaytrkind failed");
++ GCon->Log(NAME_Dev, "ioctl CDIOCPLAYTRACKS failed");
+ return;
+ }
+
+- if (ioctl(cdfile, CDROMRESUME) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdromresume failed");
++ if (ioctl(cdfile, CDIOCRESUME) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCRESUME failed");
+
+ playLooping = looping;
+ playTrack = track;
+@@ -434,8 +439,8 @@
+ if (!playing)
+ return;
+
+- if (ioctl(cdfile, CDROMPAUSE) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdrompause failed");
++ if (ioctl(cdfile, CDIOCPAUSE) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCPAUSE failed");
+
+ wasPlaying = playing;
+ playing = false;
+@@ -452,8 +457,8 @@
+ if (!wasPlaying)
+ return;
+
+- if (ioctl(cdfile, CDROMRESUME) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdromresume failed");
++ if (ioctl(cdfile, CDIOCRESUME) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCRESUME failed");
+
+ playing = true;
+ }
+@@ -469,8 +474,8 @@
+ if (!playing)
+ return;
+
+- if (ioctl(cdfile, CDROMSTOP) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdromstop failed");
++ if (ioctl(cdfile, CDIOCSTOP) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCSTOP failed");
+
+ wasPlaying = false;
+ playing = false;
+@@ -484,8 +489,8 @@
+
+ static void CD_OpenDoor(void)
+ {
+- if (ioctl(cdfile, CDROMEJECT) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdromeject failed");
++ if (ioctl(cdfile, CDIOCEJECT) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCEJECT failed");
+ }
+
+ //==========================================================================
+@@ -496,8 +501,8 @@
+
+ static void CD_CloseDoor(void)
+ {
+- if (ioctl(cdfile, CDROMCLOSETRAY) == -1)
+- GCon->Log(NAME_Dev, "ioctl cdromclosetray failed");
++ if (ioctl(cdfile, CDIOCCLOSE) == -1)
++ GCon->Log(NAME_Dev, "ioctl CDIOCCLOSE failed");
+ }
+
+ //**************************************************************************
diff --git a/games/vavoom/files/patch-source-s_sdl.cpp b/games/vavoom/files/patch-source-s_sdl.cpp
new file mode 100644
index 000000000000..8a8c16414181
--- /dev/null
+++ b/games/vavoom/files/patch-source-s_sdl.cpp
@@ -0,0 +1,150 @@
+--- source/s_sdl.cpp.orig Sat Mar 8 14:08:04 2003
++++ source/s_sdl.cpp Wed Jan 21 15:41:52 2004
+@@ -82,8 +82,8 @@
+
+ IMPLEMENT_CLASS(VDefaultSoundDevice);
+
+-static TCvarI mix_frequency ("mix_frequency", "22050", CVAR_ARCHIVE);
+-static TCvarI mix_bits ("mix_bits", "16", CVAR_ARCHIVE);
++static TCvarI mix_frequency ("mix_frequency", "44100", CVAR_ARCHIVE);
++static TCvarI mix_bits ("mix_bits", "8", CVAR_ARCHIVE);
+ static TCvarI mix_channels ("mix_channels", "2", CVAR_ARCHIVE);
+
+ static TCvarI mix_chunksize ("mix_chunksize", "4096", CVAR_ARCHIVE);
+@@ -107,6 +107,8 @@
+ static TVec listener_forward;
+ static TVec listener_right;
+ static TVec listener_up;
++
++SDL_AudioCVT wavecvt;
+
+ // CODE --------------------------------------------------------------------
+
+@@ -337,6 +339,12 @@
+ mix_bits = fmt & 0xFF;
+ mix_channels = ch;
+
++ if (SDL_BuildAudioCVT(&wavecvt, AUDIO_S8, 2, 4096,
++ fmt, mix_channels, mix_frequency) == -1) {
++ Sys_Error("SDL_BuildAudioCVT: failed.\n");
++ return;
++ }
++
+ channels = Z_CNew<channel_t>(mix_voices);
+ for (i = 0; i < mix_voices; i++)
+ {
+@@ -425,13 +433,23 @@
+ return;
+ }
+
+- // copy the lump to a SDL_Mixer chunk...
+- chunk = Mix_LoadRAW_RW(SDL_RWFromMem((void*)S_sfx[sound_id].data,
+- S_sfx[sound_id].len), 0, S_sfx[sound_id].freq, AUDIO_U8, 1);
+- if (chunk == NULL)
+- Sys_Error("Mix_LoadRAW_RW() failed!\n");
+- voice = Mix_LoadChannel(-1, chunk, 0);
+-
++ wavecvt.len = S_sfx[sound_id].len;
++ wavecvt.buf = (Uint8*)malloc(wavecvt.len*wavecvt.len_mult);
++ memcpy(wavecvt.buf, S_sfx[sound_id].data, S_sfx[sound_id].len);
++
++ if (SDL_ConvertAudio(&wavecvt) == -1) {
++ Sys_Error("SDL_ConvertAudio: error during conversion\n");
++ return;
++ }
++
++ // copy the lump to a SDL_Mixer chunk...
++ chunk = Mix_QuickLoad_RAW((Uint8*)wavecvt.buf,
++ wavecvt.len*wavecvt.len_mult);
++ if (chunk == NULL)
++ Sys_Error("Mix_QuickLoad_RAW() failed!\n");
++
++ voice = Mix_PlayChannel(-1, chunk, 0);
++
+ if (voice < 0)
+ {
+ S_DoneWithLump(sound_id);
+@@ -448,9 +466,6 @@
+ pitch = CalcPitch(S_sfx[sound_id].freq, sound_id);
+ #warning how to set the pitch? (CS)
+
+- // ready to go...
+- Mix_Play(voice);
+-
+ channels[chan].origin_id = origin_id;
+ channels[chan].origin = origin;
+ channels[chan].channel = channel;
+@@ -501,22 +516,28 @@
+ return;
+ }
+
+- // copy the lump to a SDL_Mixer chunk...
+- chunk = Mix_LoadRAW_RW(SDL_RWFromMem((void*)S_VoiceInfo.data,
+- S_VoiceInfo.len), 0, S_VoiceInfo.freq, AUDIO_U8, 1);
+- if (chunk == NULL)
+- Sys_Error("Mix_LoadRAW_RW() failed!\n");
+- voice = Mix_LoadChannel(-1, chunk, 0);
+-
++ wavecvt.len = S_sfx[VOICE_SOUND_ID].len;
++ wavecvt.buf = (Uint8*)malloc(wavecvt.len*wavecvt.len_mult);
++ memcpy(wavecvt.buf, S_sfx[VOICE_SOUND_ID].data, S_sfx[VOICE_SOUND_ID].len);
++
++ if (SDL_ConvertAudio(&wavecvt) == -1) {
++ Sys_Error("SDL_ConvertAudio: error during conversion\n");
++ return;
++ }
++ // copy the lump to a SDL_Mixer chunk...
++ chunk = Mix_QuickLoad_RAW((Uint8*)wavecvt.buf,
++ wavecvt.len*wavecvt.len_mult);
++ if (chunk == NULL)
++ Sys_Error("Mix_QuickLoad_RAW() failed!\n");
++
++ voice = Mix_PlayChannel(-1, chunk, 0);
++
+ if (voice < 0)
+ {
+ S_DoneWithLump(VOICE_SOUND_ID);
+ return;
+ }
+
+- // ready to go...
+- Mix_Play(voice);
+-
+ channels[chan].origin_id = 0;
+ channels[chan].origin = TVec(0, 0, 0);
+ channels[chan].channel = 1;
+@@ -558,19 +579,26 @@
+ return;
+ }
+
+- chunk = Mix_LoadRAW_RW(SDL_RWFromMem((void*)S_sfx[sound_id].data,
+- S_sfx[sound_id].len), 0, S_sfx[sound_id].freq, AUDIO_U8, 1);
+- if (chunk == NULL)
+- Sys_Error("Mix_LoadRAW_RW() failed!\n");
+-
+- voice = Mix_LoadChannel(-1, chunk, 0);
++ wavecvt.len = S_sfx[sound_id].len;
++ wavecvt.buf = (Uint8*)malloc(wavecvt.len*wavecvt.len_mult);
++ memcpy(wavecvt.buf, S_sfx[sound_id].data, S_sfx[sound_id].len);
++
++ if (SDL_ConvertAudio(&wavecvt) == -1) {
++ Sys_Error("SDL_ConvertAudio: error during conversion\n");
++ return;
++ }
++ // copy the lump to a SDL_Mixer chunk...
++ chunk = Mix_QuickLoad_RAW((Uint8*)wavecvt.buf,
++ wavecvt.len*wavecvt.len_mult);
++ if (chunk == NULL)
++ Sys_Error("Mix_QuickLoad_RAW() failed!\n");
++
++ voice = Mix_PlayChannel(-1, chunk, 0);
+
+ if (voice < 0)
+ {
+ return;
+ }
+-
+- Mix_Play(voice);
+
+ start = Sys_Time();
+ while (1)
diff --git a/games/vavoom/files/patch-source-sys_sdl.cpp b/games/vavoom/files/patch-source-sys_sdl.cpp
new file mode 100644
index 000000000000..61b50de13164
--- /dev/null
+++ b/games/vavoom/files/patch-source-sys_sdl.cpp
@@ -0,0 +1,74 @@
+--- source/sys_sdl.cpp.orig Wed Jan 21 15:22:13 2004
++++ source/sys_sdl.cpp Wed Jan 21 15:29:23 2004
+@@ -45,7 +45,7 @@
+
+ // EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
+
+-#ifdef __i386__
++#if defined(__i386__)
+ extern "C" {
+
+ void Sys_SetFPCW(void);
+@@ -61,8 +61,10 @@
+
+ // PUBLIC DATA DEFINITIONS -------------------------------------------------
+
++#ifndef __FreeBSD__
+ jmp_buf __Context::Env;
+ const char* __Context::ErrToThrow;
++#endif
+
+ // PRIVATE DATA DEFINITIONS ------------------------------------------------
+
+@@ -256,6 +258,7 @@
+
+ void Sys_MakeCodeWriteable(unsigned long startaddr, unsigned long length)
+ {
++#ifndef __FreeBSD__
+ int r;
+ unsigned long addr;
+ int psize = getpagesize();
+@@ -268,6 +271,7 @@
+ {
+ Sys_Error("Protection change failed\n");
+ }
++#endif
+ }
+
+ //**************************************************************************
+@@ -726,6 +730,7 @@
+ {
+ signal(s, SIG_IGN); // Ignore future instances of this signal.
+
++#ifndef __FreeBSD__
+ switch (s)
+ {
+ case SIGABRT:
+@@ -756,6 +761,27 @@
+ __Context::ErrToThrow = "Terminated by signal";
+ }
+ longjmp(__Context::Env, 1);
++#else
++ switch (s)
++ {
++ case SIGABRT: throw VavoomError("Abnormal termination triggered by abort call");
++ case SIGFPE: throw VavoomError("Floating Point Exception");
++ case SIGILL: throw VavoomError("Illegal Instruction");
++ case SIGINT: throw VavoomError("Interrupted by User");
++ case SIGSEGV: throw VavoomError("Segmentation Violation");
++ case SIGTERM: throw VavoomError("Software termination signal from kill");
++#ifdef SIGKILL
++ case SIGKILL: throw VavoomError("Killed");
++#endif
++#ifdef SIGQUIT
++ case SIGQUIT: throw VavoomError("Quited");
++#endif
++#ifdef SIGNOFP
++ case SIGNOFP: throw VavoomError("VAVOOM requires a floating-point processor");
++#endif
++ default: throw VavoomError("Terminated by signal");
++ }
++#endif
+ }
+
+ //==========================================================================
diff --git a/games/vavoom/pkg-descr b/games/vavoom/pkg-descr
new file mode 100644
index 000000000000..89fe8bae3f53
--- /dev/null
+++ b/games/vavoom/pkg-descr
@@ -0,0 +1,23 @@
+Vavoom is a source port based on sources of Doom, Heretic, Hexen
+and a little bit from Quake. To play Vavoom you need main wad file
+from Doom, Ultimate Doom, Doom II, Heretic, Hexen or Strife.
+
+Differences from original game:
+* Polygonal engine with colored lighting, with software mode, OpenGL support;
+* Translucency;
+* Complete support for freelook (look up & down) in all games;
+* A powerful language to describe game logic;
+* 100% client/server architecture with in-game joining;
+* Quake-style console, with key bindings;
+* Indirect support for DeHackEd;
+* Crosshair;
+* Jumping;
+....
+
+No music support is available in SDL compiled version at the moment.
+Sound effects are 8 bit, 44100KHz, stereo.
+
+WWW: http://www.vavoom-engine.com/
+
+- Igor Pokrovsky
+tiamat@comset.net
diff --git a/games/vavoom/pkg-message b/games/vavoom/pkg-message
new file mode 100644
index 000000000000..1c40a36425e4
--- /dev/null
+++ b/games/vavoom/pkg-message
@@ -0,0 +1,17 @@
+*****************************************************************************
+* In order to run Vavoom you will need original IWAD file from either:
+* Doom, Doom II, TNT, Plutonia, Heretic, Hexen or Strife.
+*
+* Manually do the following:
+* 1. Make directory for Vavoom data
+* mkdir ${HOME}/vavoom
+* 2. Copy Vavoom data into this directory
+* cp -r %%DATADIR%%/basev ${HOME}/vavoom
+* 3. Copy IWAD from original game here as well
+* cp /where/is/doom.wad ${HOME}/vavoom
+* 4. Execute Vavoom from directory with game data
+* cd ${HOME}/vavoom && %%PREFIX%%/bin/Vavoom -opengl
+* or
+* cd ${HOME}/vavoom && %%PREFIX%%/bin/Vavoom -opengl -openal
+* if you compiled Vavoom with OpenAL support
+*****************************************************************************
diff --git a/games/vavoom/pkg-plist b/games/vavoom/pkg-plist
new file mode 100644
index 000000000000..c158903d0141
--- /dev/null
+++ b/games/vavoom/pkg-plist
@@ -0,0 +1,30 @@
+bin/Vavoom
+bin/VavoomSV
+%%DATADIR%%/basev/doom/wad0.wad
+@dirrm %%DATADIR%%/basev/doom
+%%DATADIR%%/basev/doom1/base.txt
+%%DATADIR%%/basev/doom1/wad0.wad
+@dirrm %%DATADIR%%/basev/doom1
+%%DATADIR%%/basev/doom2/base.txt
+%%DATADIR%%/basev/doom2/wad0.wad
+@dirrm %%DATADIR%%/basev/doom2
+%%DATADIR%%/basev/heretic/wad0.wad
+@dirrm %%DATADIR%%/basev/heretic
+%%DATADIR%%/basev/hexen/wad0.wad
+@dirrm %%DATADIR%%/basev/hexen
+%%DATADIR%%/basev/plutonia/base.txt
+%%DATADIR%%/basev/plutonia/wad0.wad
+@dirrm %%DATADIR%%/basev/plutonia
+%%DATADIR%%/basev/strife/wad0.wad
+@dirrm %%DATADIR%%/basev/strife
+%%DATADIR%%/basev/tnt/base.txt
+%%DATADIR%%/basev/tnt/wad0.wad
+@dirrm %%DATADIR%%/basev/tnt
+%%DATADIR%%/basev/default.cfg
+%%DATADIR%%/basev/games.txt
+%%DATADIR%%/basev/startup.vs
+@dirrm %%DATADIR%%/basev
+@dirrm %%DATADIR%%
+%%PORTDOCS%%%%DOCSDIR%%/vavmref.txt
+%%PORTDOCS%%%%DOCSDIR%%/vavoom.txt
+%%PORTDOCS%%@dirrm %%DOCSDIR%%