From 3bebbbbcd0d35b49daa0db3dadd7b670afdcf398 Mon Sep 17 00:00:00 2001 From: Zacam Date: Tue, 29 Jun 2010 22:09:34 +0000 Subject: [PATCH] Trunk Sync r6269. I hope this works. This is supposed to be a Trunk overlay merge into Antipodes, which should mean that Antipodes is now a copy of Trunk in all respects. --- Makefile.am | 2 +- acinclude.m4 | 175 + autogen.sh | 4 +- code/Makefile.am | 18 +- code/ai/ai.h | 7 + code/ai/ai_profiles.cpp | 22 +- code/ai/ai_profiles.h | 5 + code/ai/aibig.cpp | 28 +- code/ai/aicode.cpp | 364 +- code/ai/aigoals.cpp | 5 +- code/ai/aiturret.cpp | 48 +- code/asteroid/asteroid.cpp | 2 +- code/autopilot/autopilot.cpp | 111 +- code/camera/camera.cpp | 144 +- code/camera/camera.h | 11 +- code/cfile/cfilesystem.cpp | 2 +- code/cmdline/cmdline.cpp | 139 +- code/cmdline/cmdline.h | 4 +- code/cutscene/cutscenes.cpp | 18 +- code/cutscene/cutscenes.h | 1 - code/fireball/fireballs.h | 1 + code/fred2/AltShipClassDlg.cpp | 2 +- code/fred2/fred.cpp | 43 +- code/fred2/fred.h | 2 + code/fred2/fred.rc | 63 +- code/fred2/management.cpp | 16 +- code/fred2/missionnotesdlg.cpp | 12 + code/fred2/missionnotesdlg.h | 1 + code/fred2/missionsave.cpp | 151 +- code/fred2/resource.h | 16 +- code/fred2/sexp_tree.cpp | 132 +- code/fred2/sexp_tree.h | 7 +- code/fred2/shipeditordlg.cpp | 23 +- code/fred2/shipspecialdamage.cpp | 134 +- code/fred2/shipspecialdamage.h | 8 +- code/fred2/shipspecialhitpoints.cpp | 157 +- code/fred2/shipspecialhitpoints.h | 8 +- code/fred2/soundenvironmentdlg.cpp | 247 + code/fred2/soundenvironmentdlg.h | 63 + code/fred2/wing_editor.cpp | 11 +- code/freespace2/freespace.cpp | 95 +- code/gamesnd/eventmusic.cpp | 3 +- code/gamesnd/gamesnd.cpp | 141 + code/globalincs/alphacolors.cpp | 2 +- code/globalincs/def_files.cpp | 20 +- code/globalincs/globals.h | 2 + code/globalincs/pstypes.h | 1 + code/globalincs/windebug.cpp | 14 + code/graphics/generic.cpp | 55 +- code/graphics/generic.h | 2 +- code/graphics/gropengl.cpp | 6 +- code/graphics/gropenglpostprocessing.cpp | 100 +- code/graphics/gropenglshader.cpp | 113 +- code/graphics/gropenglshader.h | 8 +- code/graphics/gropengltexture.cpp | 4 +- code/graphics/gropengltexture.h | 5 +- code/graphics/gropengltnl.cpp | 15 +- code/hud/hud.cpp | 23 +- code/hud/hudescort.cpp | 20 +- code/hud/hudlock.cpp | 2 +- code/hud/hudparse.cpp | 69 +- code/hud/hudparse.h | 1 + code/hud/hudreticle.cpp | 18 +- code/hud/hudsquadmsg.cpp | 25 +- code/hud/hudtarget.cpp | 114 +- code/hud/hudtargetbox.cpp | 16 +- code/hud/hudtargetbox.h | 2 +- code/io/joy_ff.cpp | 6 + code/io/keycontrol.cpp | 24 +- code/lab/lab.cpp | 12 + code/math/bitarray.h | 49 + code/math/vecmat.cpp | 6 +- code/menuui/optionsmenumulti.cpp | 31 +- code/menuui/optionsmenumulti.h | 2 +- code/menuui/techmenu.cpp | 15 +- code/menuui/techmenu.h | 2 +- code/mission/missionbriefcommon.cpp | 1 - code/mission/missionlog.cpp | 4 +- code/mission/missionmessage.cpp | 20 +- code/mission/missionparse.cpp | 247 +- code/mission/missionparse.h | 27 +- code/mission/missiontraining.cpp | 51 +- code/mission/missiontraining.h | 1 + code/missionui/fictionviewer.cpp | 176 +- code/missionui/missionbrief.cpp | 5 +- code/missionui/missioncmdbrief.cpp | 49 +- code/missionui/missiondebrief.cpp | 15 +- code/missionui/missionshipchoice.cpp | 19 +- code/missionui/missionweaponchoice.cpp | 8 +- code/model/model.h | 2 + code/model/modelanim.cpp | 26 +- code/model/modelread.cpp | 54 +- code/nebula/neb.cpp | 6 + code/network/multi.h | 73 +- code/network/multi_respawn.cpp | 2 +- code/network/multi_sexp.cpp | 21 +- code/network/multi_voice.cpp | 26 +- code/network/multimsgs.cpp | 4 +- code/object/objcollide.cpp | 12 +- code/object/object.cpp | 7 +- code/object/objectdock.cpp | 13 +- code/object/objectshield.cpp | 4 +- code/object/parseobjectdock.cpp | 13 +- code/osapi/outwnd_unix.cpp | 10 +- code/parse/lua.cpp | 373 +- code/parse/scripting.cpp | 1 + code/parse/scripting.h | 1 + code/parse/sexp.cpp | 1443 +- code/parse/sexp.h | 64 +- code/particle/particle.cpp | 47 +- code/physics/physics.cpp | 30 +- code/physics/physics.h | 2 +- code/playerman/playercontrol.cpp | 12 +- code/pngutils/pngutils.cpp | 14 +- code/popup/popupdead.cpp | 19 - code/radar/radarorb.cpp | 6 +- code/ship/afterburner.cpp | 11 +- code/ship/ship.cpp | 316 +- code/ship/ship.h | 34 +- code/ship/shipfx.cpp | 32 +- code/ship/shiphit.cpp | 4 +- code/sound/acm.h | 4 - code/sound/audiostr.cpp | 217 +- code/sound/ds.cpp | 849 +- code/sound/ds.h | 86 +- code/sound/ds3d.cpp | 2 +- code/sound/rtvoice.cpp | 248 +- code/sound/rtvoice.h | 6 +- code/sound/sound.cpp | 50 +- code/sound/sound.h | 38 +- code/stats/scoring.cpp | 10 +- code/vcodec/codec1.cpp | 1990 - code/vcodec/codec1.h | 132 - code/weapon/beam.cpp | 121 +- code/weapon/beam.h | 84 + code/weapon/muzzleflash.cpp | 146 +- code/weapon/muzzleflash.h | 8 +- code/weapon/swarm.cpp | 19 +- code/weapon/swarm.h | 23 + code/weapon/weapon.h | 7 +- code/weapon/weapons.cpp | 60 +- code/windows_stub/config.h | 3 +- code/windows_stub/stubs.cpp | 13 + code/wxfred2/aboutbox.cpp | 1 + code/wxfred2/campaigneditor.cpp | 10 +- code/wxfred2/campaigneditor.h | 6 +- code/wxfred2/commandbriefingeditor.cpp | 1 + code/wxfred2/debriefingeditor.cpp | 1 + code/wxfred2/fredframe.cpp | 10 +- code/wxfred2/fredframe.h | 6 +- code/wxfred2/mission.h | 198 + code/wxfred2/missionspecseditor.cpp | 58 +- code/wxfred2/missionspecseditor.h | 9 +- code/wxfred2/res/V_fred.ico | Bin 0 -> 182593 bytes code/wxfred2/res/V_fred.xpm | 391 + code/wxfred2/res/bitmap1.xpm | 39 + code/wxfred2/res/black_do.xpm | 39 + code/wxfred2/res/bmp00001.xpm | 34 + code/wxfred2/res/chained.xpm | 39 + code/wxfred2/res/chained_directive.xpm | 39 + code/wxfred2/res/data.xpm | 39 + code/wxfred2/res/data00.xpm | 39 + code/wxfred2/res/data05.xpm | 39 + code/wxfred2/res/data10.xpm | 39 + code/wxfred2/res/data15.xpm | 39 + code/wxfred2/res/data20.xpm | 39 + code/wxfred2/res/data25.xpm | 39 + code/wxfred2/res/data30.xpm | 39 + code/wxfred2/res/data35.xpm | 39 + code/wxfred2/res/data40.xpm | 39 + code/wxfred2/res/data45.xpm | 39 + code/wxfred2/res/data50.xpm | 39 + code/wxfred2/res/data55.xpm | 39 + code/wxfred2/res/data60.xpm | 39 + code/wxfred2/res/data65.xpm | 39 + code/wxfred2/res/data70.xpm | 39 + code/wxfred2/res/data75.xpm | 39 + code/wxfred2/res/data80.xpm | 39 + code/wxfred2/res/data85.xpm | 39 + code/wxfred2/res/data90.xpm | 39 + code/wxfred2/res/data95.xpm | 39 + code/wxfred2/res/freddoc.ico | Bin 0 -> 3310 bytes code/wxfred2/res/green_do.xpm | 39 + code/wxfred2/res/root.xpm | 39 + code/wxfred2/res/root_directive.xpm | 39 + code/wxfred2/res/toolbar.xpm | 46 + code/wxfred2/res/toolbar1.xpm | 46 + code/wxfred2/res/variable.xpm | 39 + code/wxfred2/res/wxFREDIcon.xpm | 279 + code/wxfred2/voiceactingmanagereditor.cpp | 5 +- code/wxfred2/voicefilemanager.cpp | 36 - code/wxfred2/voicefilemanager.h | 30 - code/wxfred2/wxFRED.fbp | 35362 ++++++++++++++++ code/wxfred2/wxfred.xrc | 6046 +-- code/wxfred2/wxfred2.cpp | 5 +- configure.ac | 125 +- libjpeg/Makefile.am | 86 - lua/Makefile.am | 77 - oggvorbis/lib/ogg_static.lib | Bin 27024 -> 29444 bytes oggvorbis/lib/ogg_static_d.lib | Bin 59072 -> 64190 bytes oggvorbis/lib/theora_static.lib | Bin 168058 -> 260528 bytes oggvorbis/lib/theora_static_d.lib | Bin 381082 -> 619478 bytes oggvorbis/lib/vorbis_static.lib | Bin 231768 -> 235482 bytes oggvorbis/lib/vorbis_static_d.lib | Bin 449310 -> 448152 bytes oggvorbis/lib/vorbisfile_static.lib | Bin 262988 -> 35106 bytes oggvorbis/lib/vorbisfile_static_d.lib | Bin 519088 -> 78478 bytes projects/MSVC_2005/Fred2.vcproj | 20 +- projects/MSVC_2005/Freespace2.vcproj | 20 +- projects/MSVC_2005/code.vcproj | 12 - projects/MSVC_2008/Fred2.vcproj | 8 + projects/MSVC_2008/code.vcproj | 16 +- projects/MSVC_2008/zlib.vcproj | 341 - projects/MSVC_2010/Fred2.vcxproj | 1220 + projects/MSVC_2010/Fred2.vcxproj.filters | 520 + projects/MSVC_2010/Freespace2.sln | 219 + projects/MSVC_2010/Freespace2.vcxproj | 1157 + projects/MSVC_2010/code.vcxproj | 1343 + projects/MSVC_2010/code.vcxproj.filters | 1873 + projects/MSVC_2010/libjpeg.vcxproj | 728 + projects/MSVC_2010/libjpeg.vcxproj.filters | 197 + projects/MSVC_2010/liblua.vcxproj | 734 + projects/MSVC_2010/liblua.vcxproj.filters | 185 + projects/MSVC_2010/libpng.vcxproj | 724 + projects/MSVC_2010/libpng.vcxproj.filters | 82 + projects/MSVC_2010/wxFRED2.vcxproj | 516 + projects/MSVC_2010/wxFRED2.vcxproj.filters | 171 + projects/MSVC_2010/zlib.vcxproj | 643 + projects/MSVC_2010/zlib.vcxproj.filters | 92 + projects/MSVC_6/Fred2.dsp | 20 +- projects/MSVC_6/Freespace2.dsp | 4 +- projects/MSVC_6/code.dsp | 34 +- .../Xcode/FS2_Open.xcodeproj/project.pbxproj | 20 +- 232 files changed, 57599 insertions(+), 7950 deletions(-) create mode 100644 code/fred2/soundenvironmentdlg.cpp create mode 100644 code/fred2/soundenvironmentdlg.h create mode 100644 code/math/bitarray.h delete mode 100644 code/vcodec/codec1.cpp delete mode 100644 code/vcodec/codec1.h create mode 100644 code/wxfred2/mission.h create mode 100644 code/wxfred2/res/V_fred.ico create mode 100644 code/wxfred2/res/V_fred.xpm create mode 100644 code/wxfred2/res/bitmap1.xpm create mode 100644 code/wxfred2/res/black_do.xpm create mode 100644 code/wxfred2/res/bmp00001.xpm create mode 100644 code/wxfred2/res/chained.xpm create mode 100644 code/wxfred2/res/chained_directive.xpm create mode 100644 code/wxfred2/res/data.xpm create mode 100644 code/wxfred2/res/data00.xpm create mode 100644 code/wxfred2/res/data05.xpm create mode 100644 code/wxfred2/res/data10.xpm create mode 100644 code/wxfred2/res/data15.xpm create mode 100644 code/wxfred2/res/data20.xpm create mode 100644 code/wxfred2/res/data25.xpm create mode 100644 code/wxfred2/res/data30.xpm create mode 100644 code/wxfred2/res/data35.xpm create mode 100644 code/wxfred2/res/data40.xpm create mode 100644 code/wxfred2/res/data45.xpm create mode 100644 code/wxfred2/res/data50.xpm create mode 100644 code/wxfred2/res/data55.xpm create mode 100644 code/wxfred2/res/data60.xpm create mode 100644 code/wxfred2/res/data65.xpm create mode 100644 code/wxfred2/res/data70.xpm create mode 100644 code/wxfred2/res/data75.xpm create mode 100644 code/wxfred2/res/data80.xpm create mode 100644 code/wxfred2/res/data85.xpm create mode 100644 code/wxfred2/res/data90.xpm create mode 100644 code/wxfred2/res/data95.xpm create mode 100644 code/wxfred2/res/freddoc.ico create mode 100644 code/wxfred2/res/green_do.xpm create mode 100644 code/wxfred2/res/root.xpm create mode 100644 code/wxfred2/res/root_directive.xpm create mode 100644 code/wxfred2/res/toolbar.xpm create mode 100644 code/wxfred2/res/toolbar1.xpm create mode 100644 code/wxfred2/res/variable.xpm create mode 100644 code/wxfred2/res/wxFREDIcon.xpm delete mode 100644 code/wxfred2/voicefilemanager.cpp delete mode 100644 code/wxfred2/voicefilemanager.h create mode 100644 code/wxfred2/wxFRED.fbp delete mode 100644 libjpeg/Makefile.am delete mode 100644 lua/Makefile.am create mode 100644 projects/MSVC_2010/Fred2.vcxproj create mode 100644 projects/MSVC_2010/Fred2.vcxproj.filters create mode 100644 projects/MSVC_2010/Freespace2.sln create mode 100644 projects/MSVC_2010/Freespace2.vcxproj create mode 100644 projects/MSVC_2010/code.vcxproj create mode 100644 projects/MSVC_2010/code.vcxproj.filters create mode 100644 projects/MSVC_2010/libjpeg.vcxproj create mode 100644 projects/MSVC_2010/libjpeg.vcxproj.filters create mode 100644 projects/MSVC_2010/liblua.vcxproj create mode 100644 projects/MSVC_2010/liblua.vcxproj.filters create mode 100644 projects/MSVC_2010/libpng.vcxproj create mode 100644 projects/MSVC_2010/libpng.vcxproj.filters create mode 100644 projects/MSVC_2010/wxFRED2.vcxproj create mode 100644 projects/MSVC_2010/wxFRED2.vcxproj.filters create mode 100644 projects/MSVC_2010/zlib.vcxproj create mode 100644 projects/MSVC_2010/zlib.vcxproj.filters diff --git a/Makefile.am b/Makefile.am index 75936c91b7..d66512b145 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ # # This file uses GNU Automake to generate makefiles -SUBDIRS = libjpeg lua code +SUBDIRS = code EXTRA_DIST = \ diff --git a/acinclude.m4 b/acinclude.m4 index 75ab48c3b9..f04e462b5a 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -712,3 +712,178 @@ int main () AC_SUBST(THEORA_LIBS) rm -f conf.theoratest ]) + + +dnl AM_PATH_OPENAL([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Test for OpenAL, and define OPENAL_CFLAGS and OPENAL_LIBS +dnl +AC_DEFUN([AM_PATH_OPENAL], +[dnl +dnl Get the cflags and libraries +dnl +AC_ARG_WITH(openal,[ --with-openal=PFX Prefix where OpenAL is installed (optional)], openal_prefix="$withval", openal_prefix="") +AC_ARG_WITH(openal-libraries,[ --with-openal-libraries=DIR Directory where OpenAL library is installed (optional)], openal_libraries="$withval", openal_libraries="") +AC_ARG_WITH(openal-includes,[ --with-openal-includes=DIR Directory where OpenAL header files are installed (optional)], openal_includes="$withval", openal_includes="") +AC_ARG_ENABLE(openaltest, [ --disable-openaltest Do not try to compile and run a test OpenAL program],, enable_openaltest=yes) + + if test "x$openal_libraries" != "x" ; then + OPENAL_LIBS="-L$openal_libraries" + elif test "x$openal_prefix" != "x" ; then + OPENAL_LIBS="-L$openal_prefix/lib" + elif test "x$prefix" != "xNONE"; then + OPENAL_LIBS="-L$libdir" + fi + + OPENAL_LIBS="$OPENAL_LIBS -lopenal" + + if test "x$openal_includes" != "x" ; then + OPENAL_CFLAGS="-I$openal_includes" + elif test "x$openal_prefix" != "x" ; then + OPENAL_CFLAGS="-I$openal_prefix/include" + elif test "x$prefix" != "xNONE"; then + OPENAL_CFLAGS="" + fi + + + AC_MSG_CHECKING(for OpenAL) + no_openal="" + + + if test "x$enable_openaltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $OPENAL_CFLAGS" + LIBS="$LIBS $OPENAL_LIBS" +dnl +dnl Now check if the installed OpenAL is sufficiently new. +dnl + rm -f conf.openaltest + AC_TRY_RUN([ +#include +#include +#include +#include +#include + +int main () +{ +#ifdef AL_VERSION_1_1 + alcIsExtensionPresent(NULL, (const ALCchar*)"ALC_ENUMERATION_EXT"); + + system("touch conf.openaltest"); + return 0; +#else + printf("\n*** OpenAL version 1.1 or greater is required.\n"); + return 1; +#endif +} + +],, no_openal=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + + if test "x$no_openal" = "x" ; then + AC_MSG_RESULT(yes) + ifelse([$1], , :, [$1]) + else + AC_MSG_RESULT(no) + if test -f conf.openaltest ; then + : + else + echo "*** Could not run OpenAL test program, checking why..." + CFLAGS="$CFLAGS $OPENAL_CFLAGS" + LIBS="$LIBS $OPENAL_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding OpenAL or finding the wrong" + echo "*** version of OpenAL. If it is not finding OpenAL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means OpenAL was incorrectly installed" + echo "*** or that you have moved OpenAL since it was installed." ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + OPENAL_CFLAGS="" + OPENAL_LIBS="" + ifelse([$2], , :, [$2]) + fi + AC_SUBST(OPENAL_CFLAGS) + AC_SUBST(OPENAL_LIBS) + rm -f conf.openaltest +]) + +dnl AM_PATH_OPENGL([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl Test for OpenGL, and define OPENGL_CFLAGS and OPENGL_LIBS +dnl +AC_DEFUN([AM_PATH_OPENGL], +[dnl +dnl Get the cflags and libraries +dnl +AC_ARG_WITH(opengl,[ --with-opengl=PFX Prefix where OpenGL is installed (optional)], opengl_prefix="$withval", opengl_prefix="") +AC_ARG_WITH(opengl-libraries,[ --with-opengl-libraries=DIR Directory where OpenGL library is installed (optional)], opengl_libraries="$withval", opengl_libraries="") +AC_ARG_WITH(opengl-includes,[ --with-opengl-includes=DIR Directory where OpenGL header files are installed (optional)], opengl_includes="$withval", opengl_includes="") +AC_ARG_ENABLE(opengltest, [ --disable-opengltest Do not try to compile and run a test OpenGL program],, enable_opengltest=yes) + + if test "x$opengl_libraries" != "x" ; then + OPENGL_LIBS="-L$opengl_libraries" + elif test "x$opengl_prefix" != "x" ; then + OPENGL_LIBS="-L$opengl_prefix/lib" + elif test "x$prefix" != "xNONE"; then + OPENGL_LIBS="-L$libdir" + fi + + OPENGL_LIBS="$OPENGL_LIBS -lGL -lGLU" + + if test "x$opengl_includes" != "x" ; then + OPENGL_CFLAGS="-I$opengl_includes" + elif test "x$opengl_prefix" != "x" ; then + OPENGL_CFLAGS="-I$opengl_prefix/include" + elif test "x$prefix" != "xNONE"; then + OPENGL_CFLAGS="" + fi + + + no_opengl="" + + + if test "x$enable_opengltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $OPENGL_CFLAGS" + LIBS="$LIBS $OPENGL_LIBS" + + AC_CHECK_LIB(GL, glPushMatrix, + [AC_CHECK_HEADER(GL/gl.h, + [AC_CHECK_LIB(GLU, gluPerspective, + [AC_CHECK_HEADER(GL/glu.h, , + dnl NOTE: this is a failure + no_opengl=yes + )] + )] + )] + ) + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + + if test "x$no_opengl" = "x" ; then + ifelse([$1], , :, [$1]) + else + OPENGL_CFLAGS="" + OPENGL_LIBS="" + ifelse([$2], , :, [$2]) + fi + AC_SUBST(OPENGL_CFLAGS) + AC_SUBST(OPENGL_LIBS) +]) diff --git a/autogen.sh b/autogen.sh index b7c076ec45..1b13255933 100755 --- a/autogen.sh +++ b/autogen.sh @@ -49,7 +49,7 @@ DIE=0 DIE=1 } -for AM in automake-1.9 automake-1.8 automake-1.7 automake-1.6 automake; do +for AM in automake-1.11 automake-1.10 automake-1.9 automake-1.8 automake-1.7 automake-1.6 automake; do (check_version "$AM" 1 6 1) && { AUTOMAKE="$AM" break @@ -67,7 +67,7 @@ fi # if no automake, don't bother testing for aclocal test -z "$AUTOMAKE" || { - for ACL in aclocal-1.9 aclocal-1.8 aclocal-1.7 aclocal-1.6 aclocal; do + for ACL in aclocal-1.11 aclocal-1.10 aclocal-1.9 aclocal-1.8 aclocal-1.7 aclocal-1.6 aclocal; do (check_version "$ACL" 1 6 1) && { ACLOCAL="$ACL" break diff --git a/code/Makefile.am b/code/Makefile.am index af829ff957..f3d5fa22f6 100644 --- a/code/Makefile.am +++ b/code/Makefile.am @@ -185,7 +185,7 @@ EXTRA_DIST = \ # D_ variants are defaults and should always be used # FS2_ variants are for game building and wxFRED -AM_CXXFLAGS = @D_CFLAGS@ @FS2_CXXFLAGS@ -I../lua +AM_CXXFLAGS = @D_CFLAGS@ @FS2_CXXFLAGS@ AM_LDFLAGS = @D_LDFLAGS@ @FS2_LDFLAGS@ noinst_LIBRARIES = libcode.a @@ -811,10 +811,10 @@ fs2_open_INF_d_SOURCES = \ fs2_open_INF_r_SOURCES = \ ${FS2OPEN_SOURCES} -fs2_open_d_LDADD = libcode.a ../libjpeg/libjpeg.a ../lua/liblua.a -fs2_open_r_LDADD = libcode.a ../libjpeg/libjpeg.a ../lua/liblua.a -fs2_open_INF_d_LDADD = libcode.a ../libjpeg/libjpeg.a ../lua/liblua.a -fs2_open_INF_r_LDADD = libcode.a ../libjpeg/libjpeg.a ../lua/liblua.a +fs2_open_d_LDADD = libcode.a +fs2_open_r_LDADD = libcode.a +fs2_open_INF_d_LDADD = libcode.a +fs2_open_INF_r_LDADD = libcode.a ## ## End MAIN binary @@ -846,10 +846,10 @@ wxFRED2_INF_d_SOURCES = \ wxFRED2_INF_r_SOURCES = \ ${wxFRED_SOURCES} -wxFRED2_d_LDADD = libcode.a ../libjpeg/libjpeg.a -wxFRED2_r_LDADD = libcode.a ../libjpeg/libjpeg.a -wxFRED2_INF_d_LDADD = libcode.a ../libjpeg/libjpeg.a -wxFRED2_INF_r_LDADD = libcode.a ../libjpeg/libjpeg.a +wxFRED2_d_LDADD = libcode.a +wxFRED2_r_LDADD = libcode.a +wxFRED2_INF_d_LDADD = libcode.a +wxFRED2_INF_r_LDADD = libcode.a ## ## End wxFRED2 binary diff --git a/code/ai/ai.h b/code/ai/ai.h index 5d5cbd0d76..8f53da8a07 100644 --- a/code/ai/ai.h +++ b/code/ai/ai.h @@ -205,12 +205,16 @@ typedef struct ai_class { float ai_glide_attack_percent[NUM_SKILL_LEVELS]; float ai_circle_strafe_percent[NUM_SKILL_LEVELS]; float ai_glide_strafe_percent[NUM_SKILL_LEVELS]; + float ai_random_sidethrust_percent[NUM_SKILL_LEVELS]; float ai_stalemate_time_thresh[NUM_SKILL_LEVELS]; float ai_stalemate_dist_thresh[NUM_SKILL_LEVELS]; int ai_chance_to_use_missiles_on_plr[NUM_SKILL_LEVELS]; float ai_max_aim_update_delay[NUM_SKILL_LEVELS]; + float ai_turret_max_aim_update_delay[NUM_SKILL_LEVELS]; int ai_profile_flags; //Holds the state of flags that are set int ai_profile_flags_set; //Holds which flags are set and which are just left alone + int ai_profile_flags2; + int ai_profile_flags2_set; //SUSHI: These are optional overrides to an AI class to prevent the automatic scaling based on AI class index int ai_aburn_use_factor[NUM_SKILL_LEVELS]; @@ -435,11 +439,14 @@ typedef struct ai_info { float ai_glide_attack_percent; float ai_circle_strafe_percent; float ai_glide_strafe_percent; + float ai_random_sidethrust_percent; float ai_stalemate_time_thresh; float ai_stalemate_dist_thresh; int ai_chance_to_use_missiles_on_plr; float ai_max_aim_update_delay; + float ai_turret_max_aim_update_delay; int ai_profile_flags; //Holds AI_Profiles flags (possibly overriden by AI class) that actually apply to AI + int ai_profile_flags2; union { diff --git a/code/ai/ai_profiles.cpp b/code/ai/ai_profiles.cpp index edf9bde28e..ab12347fe8 100644 --- a/code/ai/ai_profiles.cpp +++ b/code/ai/ai_profiles.cpp @@ -49,7 +49,6 @@ void set_flag(ai_profile_t *profile, char *name, int flag, int type) void parse_ai_profiles_tbl(char *filename) { int i, rval; - bool no_create = false; char profile_name[NAME_LENGTH]; ai_profile_t dummy_profile; char *saved_Mp = NULL; @@ -84,6 +83,7 @@ void parse_ai_profiles_tbl(char *filename) { ai_profile_t *profile = &dummy_profile; ai_profile_t *previous_profile = NULL; + bool no_create = false; // get the name required_string("$Profile Name:"); @@ -273,6 +273,19 @@ void parse_ai_profiles_tbl(char *filename) } } + if (optional_string("$Random Sidethrust Percent:")) { + parse_float_list(profile->random_sidethrust_percent, NUM_SKILL_LEVELS); + //Percent is nice for modders, but here in the code we want it betwwen 0 and 1.0 + //While we're at it, verify the range + for (int i = 0; i < NUM_SKILL_LEVELS; i++) { + if (profile->random_sidethrust_percent[i] < 0.0f || profile->random_sidethrust_percent[i] > 100.0f) { + profile->random_sidethrust_percent[i] = 0.0f; + Warning(LOCATION, "$Random Sidethrust Percent should be between 0 and 100.0 (read %f). Setting to 0.", profile->random_sidethrust_percent[i]); + } + profile->random_sidethrust_percent[i] /= 100.0; + } + } + if (optional_string("$Stalemate Time Threshold:")) parse_float_list(profile->stalemate_time_thresh, NUM_SKILL_LEVELS); @@ -309,6 +322,9 @@ void parse_ai_profiles_tbl(char *filename) if (optional_string("$Max Aim Update Delay:")) parse_float_list(profile->max_aim_update_delay, NUM_SKILL_LEVELS); + if (optional_string("$Turret Max Aim Update Delay:")) + parse_float_list(profile->turret_max_aim_update_delay, NUM_SKILL_LEVELS); + set_flag(profile, "$big ships can attack beam turrets on untargeted ships:", AIPF_BIG_SHIPS_CAN_ATTACK_BEAM_TURRETS_ON_UNTARGETED_SHIPS, AIP_FLAG); set_flag(profile, "$smart primary weapon selection:", AIPF_SMART_PRIMARY_WEAPON_SELECTION, AIP_FLAG); @@ -373,6 +389,10 @@ void parse_ai_profiles_tbl(char *filename) set_flag(profile, "$turrets ignore targets radius in range checks:", AIPF2_TURRETS_IGNORE_TARGET_RADIUS, AIP_FLAG2); + set_flag(profile, "$no extra collision avoidance vs player:", AIPF2_NO_SPECIAL_PLAYER_AVOID, AIP_FLAG2); + + set_flag(profile, "$perform less checks for death screams:", AIPF2_PERFORM_LESS_SCREAM_CHECKS, AIP_FLAG2); + // if we've been through once already and are at the same place, force a move if ( saved_Mp && (saved_Mp == Mp) ) Mp++; diff --git a/code/ai/ai_profiles.h b/code/ai/ai_profiles.h index ef71e86cca..bae1431a04 100644 --- a/code/ai/ai_profiles.h +++ b/code/ai/ai_profiles.h @@ -52,6 +52,8 @@ // flags2 #define AIPF2_TURRETS_IGNORE_TARGET_RADIUS (1 << 0) +#define AIPF2_NO_SPECIAL_PLAYER_AVOID (1 << 1) +#define AIPF2_PERFORM_LESS_SCREAM_CHECKS (1 << 2) #define MAX_AI_PROFILES 5 @@ -93,9 +95,11 @@ typedef struct ai_profile_t { float glide_attack_percent[NUM_SKILL_LEVELS]; // SUSHI: The likelihood (0.0-1.0) of the AI to use the "glide attack" move float circle_strafe_percent[NUM_SKILL_LEVELS]; // SUSHI: The likelihood (0.0-1.0) of the AI to use the "circle strafe" move float glide_strafe_percent[NUM_SKILL_LEVELS]; // SUSHI: The likelihood (0.0-1.0) of the AI to use glide when strafing capships + float random_sidethrust_percent[NUM_SKILL_LEVELS]; // SUSHI: The likelihood (0.0-1.0) of the AI to randomly use sidethrust while dogfihthing float stalemate_time_thresh[NUM_SKILL_LEVELS]; // SUSHI: The amount of time required for the AI to detect (and try to break) dogfight stalemate float stalemate_dist_thresh[NUM_SKILL_LEVELS]; // SUSHI: The maximum distance the AI and target must be within for a stalemate float max_aim_update_delay[NUM_SKILL_LEVELS]; // SUSHI: The maximum delay before the AI updates their aim against small ships + float turret_max_aim_update_delay[NUM_SKILL_LEVELS]; // SUSHI: As above, but for turrets updating their aim // Multiplicative delay factors for increasing skill levels. float ship_fire_delay_scale_hostile[NUM_SKILL_LEVELS]; @@ -124,6 +128,7 @@ typedef struct ai_profile_t { // the chance (x/7) that ship is allowed to fire missiles at player ship. int chance_to_use_missiles_on_plr[NUM_SKILL_LEVELS]; + } ai_profile_t; diff --git a/code/ai/aibig.cpp b/code/ai/aibig.cpp index 4a17fda252..764dc84404 100644 --- a/code/ai/aibig.cpp +++ b/code/ai/aibig.cpp @@ -704,6 +704,9 @@ void ai_big_maybe_fire_weapons(float dist_to_enemy, float dot_to_enemy, vec3d *f // ship_stop_fire_primary(Pl_objp); } } + } + + if (tswp->num_secondary_banks > 0) { int priority1, priority2; @@ -787,7 +790,10 @@ void ai_big_maybe_fire_weapons(float dist_to_enemy, float dot_to_enemy, vec3d *f } } } else { - aip->time_enemy_in_range *= (1.0f - flFrametime); + if (flFrametime < 1.0f) + aip->time_enemy_in_range *= (1.0f - flFrametime); + else + aip->time_enemy_in_range = 0; } if(has_fired == -1){ //stuff that hapens when the ship stops fireing @@ -1094,8 +1100,12 @@ void ai_big_chase() // a big ship if (aip->mode != AIM_EVADE && aip->path_start == -1 ) { ai_big_maybe_fire_weapons(dist_to_enemy, dot_to_enemy, &player_pos, &predicted_enemy_pos, &En_objp->phys_info.vel); - } else - aip->time_enemy_in_range *= (1.0f - flFrametime); + } else { + if (flFrametime < 1.0f) + aip->time_enemy_in_range *= (1.0f - flFrametime); + else + aip->time_enemy_in_range = 0; + } } void ai_big_ship(object *objp) @@ -1151,9 +1161,13 @@ void ai_big_attack_get_data(vec3d *enemy_pos, float *dist_to_enemy, float *dot_t float weapon_speed; // Compute position of gun in absolute space and use that as fire position. - pnt = po->gun_banks[0].pnt[0]; - vm_vec_unrotate(&gun_pos, &pnt, &Pl_objp->orient); - vm_vec_add2(&gun_pos, &Pl_objp->pos); + if (po->n_guns > 0) { + pnt = po->gun_banks[0].pnt[0]; + vm_vec_unrotate(&gun_pos, &pnt, &Pl_objp->orient); + vm_vec_add2(&gun_pos, &Pl_objp->pos); + } else { + gun_pos = Pl_objp->pos; + } weapon_speed = ai_get_weapon_speed(&shipp->weapons); set_predicted_enemy_pos_turret(&predicted_enemy_pos, &gun_pos, Pl_objp, enemy_pos, &En_objp->phys_info.vel, weapon_speed, aip->time_enemy_in_range); @@ -1417,7 +1431,7 @@ void ai_big_strafe_glide_attack() if (aip->submode_parm1 == 1) { accelerate_ship(aip, 1.0f); //Use afterburners if we have them and are pointed the right way - if (dot_to_goal > 0.99f && ai_maybe_fire_afterburner(Pl_objp, aip)) { + if (dot_to_goal > 0.99f) { afterburners_start(Pl_objp); aip->afterburner_stop_time = Missiontime + 3*F1_0; } diff --git a/code/ai/aicode.cpp b/code/ai/aicode.cpp index b873bcba53..aa407b2cb2 100644 --- a/code/ai/aicode.cpp +++ b/code/ai/aicode.cpp @@ -78,7 +78,7 @@ #define NEXT_REARM_TIMESTAMP (60*1000) // Ships will re-request rearm, typically, after this long. -#define CIRCLE_STRAFE_DIST 250.0f //Maximum distance for circle strafe behavior. +#define CIRCLE_STRAFE_MAX_DIST 300.0f //Maximum distance for circle strafe behavior. // AIM_CHASE submode defines // SM_STEALTH_FIND @@ -304,6 +304,9 @@ typedef struct { // Move to a position relative to a dock bay using thrusters. float dock_orient_and_approach(object *docker_objp, int docker_index, object *dockee_objp, int dockee_index, int dock_mode, rotating_dockpoint_info *rdinfo = NULL); +// The object that is declared to be the leader of the group formation for +// the "autopilot" +object *Autopilot_flight_leader = NULL; // ai_set_rearm_status takes a team (friendly, hostile, neutral) and a time. This function // sets the timestamp used to tell is it is a good time for this team to rearm. Once the timestamp @@ -548,13 +551,17 @@ void init_ai_class(ai_class *aicp) aicp->ai_glide_attack_percent[i] = FLT_MIN; aicp->ai_circle_strafe_percent[i] = FLT_MIN; aicp->ai_glide_strafe_percent[i] = FLT_MIN; + aicp->ai_random_sidethrust_percent[i] = FLT_MIN; aicp->ai_stalemate_time_thresh[i] = FLT_MIN; aicp->ai_stalemate_dist_thresh[i] = FLT_MIN; aicp->ai_chance_to_use_missiles_on_plr[i] = INT_MIN; aicp->ai_max_aim_update_delay[i] = FLT_MIN; + aicp->ai_turret_max_aim_update_delay[i] = FLT_MIN; } aicp->ai_profile_flags = 0; aicp->ai_profile_flags_set = 0; + aicp->ai_profile_flags2 = 0; + aicp->ai_profile_flags2_set = 0; //AI Class autoscale overrides //INT_MIN and FLT_MIM represent the "not set" state @@ -568,21 +575,25 @@ void init_ai_class(ai_class *aicp) aicp->ai_class_autoscale = true; //Retail behavior is to do the stupid autoscaling } -void set_aic_flag(ai_class *aicp, char *name, int flag) +void set_aic_flag(ai_class *aicp, char *name, int flag, int type) { + int* flags = (type == AIP_FLAG) ? &(aicp->ai_profile_flags) : &(aicp->ai_profile_flags2); + int* set = (type == AIP_FLAG) ? &(aicp->ai_profile_flags_set) : &(aicp->ai_profile_flags2_set); + if (optional_string(name)) { bool val; stuff_boolean(&val); if (val) - aicp->ai_profile_flags |= flag; + *flags |= flag; else - aicp->ai_profile_flags &= ~flag; + *flags &= ~flag; - aicp->ai_profile_flags_set |= flag; + *set |= flag; } - aicp->ai_profile_flags_set &= ~flag; + else + *set &= ~flag; } void parse_ai_class() @@ -673,14 +684,50 @@ void parse_ai_class() if (optional_string("$AI Turn Time Scale:")) parse_float_list(aicp->ai_turn_time_scale, NUM_SKILL_LEVELS); - if (optional_string("$Glide Attack Percent:")) + if (optional_string("$Glide Attack Percent:")) { parse_float_list(aicp->ai_glide_attack_percent, NUM_SKILL_LEVELS); + for (int i = 0; i < NUM_SKILL_LEVELS; i++) { + if (aicp->ai_glide_attack_percent[i] < 0.0f || aicp->ai_glide_attack_percent[i] > 100.0f) { + aicp->ai_glide_attack_percent[i] = 0.0f; + Warning(LOCATION, "$Glide Attack Percent should be between 0 and 100.0 (read %f). Setting to 0.", aicp->ai_glide_attack_percent[i]); + } + aicp->ai_glide_attack_percent[i] /= 100.0; + } - if (optional_string("$Circle Strafe Percent:")) + } + + if (optional_string("$Circle Strafe Percent:")) { parse_float_list(aicp->ai_circle_strafe_percent, NUM_SKILL_LEVELS); + for (int i = 0; i < NUM_SKILL_LEVELS; i++) { + if (aicp->ai_circle_strafe_percent[i] < 0.0f || aicp->ai_circle_strafe_percent[i] > 100.0f) { + aicp->ai_circle_strafe_percent[i] = 0.0f; + Warning(LOCATION, "$Circle Strafe Percent should be between 0 and 100.0 (read %f). Setting to 0.", aicp->ai_circle_strafe_percent[i]); + } + aicp->ai_circle_strafe_percent[i] /= 100.0; + } + } - if (optional_string("$Glide Strafe Percent:")) + if (optional_string("$Glide Strafe Percent:")) { parse_float_list(aicp->ai_glide_strafe_percent, NUM_SKILL_LEVELS); + for (int i = 0; i < NUM_SKILL_LEVELS; i++) { + if (aicp->ai_glide_strafe_percent[i] < 0.0f || aicp->ai_glide_strafe_percent[i] > 100.0f) { + aicp->ai_glide_strafe_percent[i] = 0.0f; + Warning(LOCATION, "$Glide Strafe Percent should be between 0 and 100.0 (read %f). Setting to 0.", aicp->ai_glide_strafe_percent[i]); + } + aicp->ai_glide_strafe_percent[i] /= 100.0; + } + } + + if (optional_string("$Random Sidethrust Percent:")) { + parse_float_list(aicp->ai_random_sidethrust_percent, NUM_SKILL_LEVELS); + for (int i = 0; i < NUM_SKILL_LEVELS; i++) { + if (aicp->ai_random_sidethrust_percent[i] < 0.0f || aicp->ai_random_sidethrust_percent[i] > 100.0f) { + aicp->ai_random_sidethrust_percent[i] = 0.0f; + Warning(LOCATION, "$Random Sidethrust Percent should be between 0 and 100.0 (read %f). Setting to 0.", aicp->ai_random_sidethrust_percent[i]); + } + aicp->ai_random_sidethrust_percent[i] /= 100.0; + } + } if (optional_string("$Stalemate Time Threshold:")) parse_float_list(aicp->ai_stalemate_time_thresh, NUM_SKILL_LEVELS); @@ -694,29 +741,34 @@ void parse_ai_class() if (optional_string("$Max Aim Update Delay:")) parse_float_list(aicp->ai_max_aim_update_delay, NUM_SKILL_LEVELS); - set_aic_flag(aicp, "$big ships can attack beam turrets on untargeted ships:", AIPF_BIG_SHIPS_CAN_ATTACK_BEAM_TURRETS_ON_UNTARGETED_SHIPS); + if (optional_string("$Turret Max Aim Update Delay:")) + parse_float_list(aicp->ai_turret_max_aim_update_delay, NUM_SKILL_LEVELS); - set_aic_flag(aicp, "$smart primary weapon selection:", AIPF_SMART_PRIMARY_WEAPON_SELECTION); + set_aic_flag(aicp, "$big ships can attack beam turrets on untargeted ships:", AIPF_BIG_SHIPS_CAN_ATTACK_BEAM_TURRETS_ON_UNTARGETED_SHIPS, AIP_FLAG); - set_aic_flag(aicp, "$smart secondary weapon selection:", AIPF_SMART_SECONDARY_WEAPON_SELECTION); + set_aic_flag(aicp, "$smart primary weapon selection:", AIPF_SMART_PRIMARY_WEAPON_SELECTION, AIP_FLAG); - set_aic_flag(aicp, "$smart shield management:", AIPF_SMART_SHIELD_MANAGEMENT); + set_aic_flag(aicp, "$smart secondary weapon selection:", AIPF_SMART_SECONDARY_WEAPON_SELECTION, AIP_FLAG); - set_aic_flag(aicp, "$smart afterburner management:", AIPF_SMART_AFTERBURNER_MANAGEMENT); + set_aic_flag(aicp, "$smart shield management:", AIPF_SMART_SHIELD_MANAGEMENT, AIP_FLAG); - set_aic_flag(aicp, "$allow rapid secondary dumbfire:", AIPF_ALLOW_RAPID_SECONDARY_DUMBFIRE); + set_aic_flag(aicp, "$smart afterburner management:", AIPF_SMART_AFTERBURNER_MANAGEMENT, AIP_FLAG); + + set_aic_flag(aicp, "$allow rapid secondary dumbfire:", AIPF_ALLOW_RAPID_SECONDARY_DUMBFIRE, AIP_FLAG); - set_aic_flag(aicp, "$huge turret weapons ignore bombs:", AIPF_HUGE_TURRET_WEAPONS_IGNORE_BOMBS); + set_aic_flag(aicp, "$huge turret weapons ignore bombs:", AIPF_HUGE_TURRET_WEAPONS_IGNORE_BOMBS, AIP_FLAG); - set_aic_flag(aicp, "$don't insert random turret fire delay:", AIPF_DONT_INSERT_RANDOM_TURRET_FIRE_DELAY); + set_aic_flag(aicp, "$don't insert random turret fire delay:", AIPF_DONT_INSERT_RANDOM_TURRET_FIRE_DELAY, AIP_FLAG); - set_aic_flag(aicp, "$prevent turrets targeting too distant bombs:", AIPF_PREVENT_TARGETING_BOMBS_BEYOND_RANGE); + set_aic_flag(aicp, "$prevent turrets targeting too distant bombs:", AIPF_PREVENT_TARGETING_BOMBS_BEYOND_RANGE, AIP_FLAG); - set_aic_flag(aicp, "$smart subsystem targeting for turrets:", AIPF_SMART_SUBSYSTEM_TARGETING_FOR_TURRETS); + set_aic_flag(aicp, "$smart subsystem targeting for turrets:", AIPF_SMART_SUBSYSTEM_TARGETING_FOR_TURRETS, AIP_FLAG); - set_aic_flag(aicp, "$allow turrets target weapons freely:", AIPF_ALLOW_TURRETS_TARGET_WEAPONS_FREELY); + set_aic_flag(aicp, "$allow turrets target weapons freely:", AIPF_ALLOW_TURRETS_TARGET_WEAPONS_FREELY, AIP_FLAG); - set_aic_flag(aicp, "$allow vertical dodge:", AIPF_ALLOW_VERTICAL_DODGE); + set_aic_flag(aicp, "$allow vertical dodge:", AIPF_ALLOW_VERTICAL_DODGE, AIP_FLAG); + + set_aic_flag(aicp, "$no extra collision avoidance vs player:", AIPF2_NO_SPECIAL_PLAYER_AVOID, AIP_FLAG2); } void reset_ai_class_names() @@ -2846,6 +2898,14 @@ void create_model_exit_path(object *pl_objp, object *mobjp, int path_num, int co model_path *mp; pnode *ppfp_start = Ppfp; + Assert(path_num >= 0); + + // Do garbage collection if necessary. + if (Ppfp-Path_points + 64 > MAX_PATH_POINTS) { + garbage_collect_path_points(); + ppfp_start = Ppfp; + } + aip->path_start = Ppfp - Path_points; Assert(path_num < pm->n_paths); @@ -4205,38 +4265,37 @@ void ai_fly_to_ship() // this needs to be done for ALL SHIPS not just capships STOP CHANGING THIS // ---------------------------------------------- - object *wing_leader = get_wing_leader(aip->wing); - vec3d perp, goal_point; bool carry_flag = ((shipp->flags2 & SF2_NAVPOINT_CARRY) || ((shipp->wingnum >= 0) && (Wings[shipp->wingnum].flags & WF_NAV_CARRY))); if (AutoPilotEngaged && timestamp_elapsed(LockAPConv) && carry_flag - && ((The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) || (Pl_objp != wing_leader)) ) + && ((The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) || (Pl_objp != Autopilot_flight_leader)) ) { + Assertion( Autopilot_flight_leader != NULL, "When under autopliot there must be a flight leader", Autopilot_flight_leader ); // snap wings into formation them into formation if (The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) { if (aip->wing != -1) { int wing_index = get_wing_index(Pl_objp, aip->wing); - if (wing_leader != Pl_objp) { + if (Autopilot_flight_leader != Pl_objp) { // not leader.. get our position relative to leader - get_absolute_wing_pos_autopilot(&goal_point, wing_leader, wing_index, aip->ai_flags & AIF_FORMATION_OBJECT); + get_absolute_wing_pos_autopilot(&goal_point, Autopilot_flight_leader, wing_index, aip->ai_flags & AIF_FORMATION_OBJECT); } else { j = 1+int( (float)floor(double(autopilot_wings[aip->wing]-1)/2.0) ); switch (autopilot_wings[aip->wing] % 2) { case 1: // back-left - vm_vec_copy_normalize(&perp, &Player_obj->orient.vec.rvec); + vm_vec_copy_normalize(&perp, &Autopilot_flight_leader->orient.vec.rvec); vm_vec_scale(&perp, -166.0f*j); // 166m is supposedly the optimal range according to tolwyn - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; default: //back-right case 0: - vm_vec_copy_normalize(&perp, &Player_obj->orient.vec.rvec); + vm_vec_copy_normalize(&perp, &Autopilot_flight_leader->orient.vec.rvec); vm_vec_scale(&perp, 166.0f*j); - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; } @@ -4248,7 +4307,7 @@ void ai_fly_to_ship() vm_vec_sub(&perp, Navs[CurrentNav].GetPosition(), &Player_obj->pos); vm_vector_2_matrix(&Pl_objp->orient, &perp, NULL, NULL); } else { - vm_vec_scale_add(&perp, &Pl_objp->pos, &wing_leader->phys_info.vel, 1000.0f); + vm_vec_scale_add(&perp, &Pl_objp->pos, &Autopilot_flight_leader->phys_info.vel, 1000.0f); ai_turn_towards_vector(&perp, Pl_objp, flFrametime, sip->srotation_time*3.0f*scale, slop_vec, NULL, 0.0f, 0); } } else { @@ -4455,38 +4514,36 @@ void ai_waypoints() // this needs to be done for ALL SHIPS not just capships STOP CHANGING THIS // ---------------------------------------------- - object *wing_leader = get_wing_leader(aip->wing); - vec3d perp, goal_point; bool carry_flag = ((shipp->flags2 & SF2_NAVPOINT_CARRY) || ((shipp->wingnum >= 0) && (Wings[shipp->wingnum].flags & WF_NAV_CARRY))); if (AutoPilotEngaged && timestamp_elapsed(LockAPConv) && carry_flag - && ((The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) || (Pl_objp != wing_leader)) ) + && ((The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) || (Pl_objp != Autopilot_flight_leader)) ) { // snap wings into formation them into formation if (The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) { if (aip->wing != -1) { int wing_index = get_wing_index(Pl_objp, aip->wing); - if (wing_leader != Pl_objp) { + if (Autopilot_flight_leader != Pl_objp) { // not leader.. get our position relative to leader - get_absolute_wing_pos_autopilot(&goal_point, wing_leader, wing_index, aip->ai_flags & AIF_FORMATION_OBJECT); + get_absolute_wing_pos_autopilot(&goal_point, Autopilot_flight_leader, wing_index, aip->ai_flags & AIF_FORMATION_OBJECT); } else { j = 1+int( (float)floor(double(autopilot_wings[aip->wing]-1)/2.0) ); switch (autopilot_wings[aip->wing] % 2) { case 1: // back-left - vm_vec_copy_normalize(&perp, &Player_obj->orient.vec.rvec); + vm_vec_copy_normalize(&perp, &Autopilot_flight_leader->orient.vec.rvec); vm_vec_scale(&perp, -166.0f*j); // 166m is supposedly the optimal range according to tolwyn - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; default: //back-right case 0: - vm_vec_copy_normalize(&perp, &Player_obj->orient.vec.rvec); + vm_vec_copy_normalize(&perp, &Autopilot_flight_leader->orient.vec.rvec); vm_vec_scale(&perp, 166.0f*j); - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; } @@ -4495,12 +4552,10 @@ void ai_waypoints() Pl_objp->pos = goal_point; } - vm_vec_sub(&perp, Navs[CurrentNav].GetPosition(), &Player_obj->pos); + vm_vec_sub(&perp, Navs[CurrentNav].GetPosition(), &Autopilot_flight_leader->pos); vm_vector_2_matrix(&Pl_objp->orient, &perp, NULL, NULL); } else { - if ( !wing_leader ) - wing_leader = Pl_objp; - vm_vec_scale_add(&perp, &Pl_objp->pos, &wing_leader->phys_info.vel, 1000.0f); + vm_vec_scale_add(&perp, &Pl_objp->pos, &Autopilot_flight_leader->phys_info.vel, 1000.0f); ai_turn_towards_vector(&perp, Pl_objp, flFrametime, sip->srotation_time*3.0f*scale, slop_vec, NULL, 0.0f, 0); } } else { @@ -5066,17 +5121,15 @@ void evade_ship() } else accelerate_ship(aip, (float) (Game_skill_level+2) / (NUM_SKILL_LEVELS+1)); - if (ai_maybe_fire_afterburner(Pl_objp, aip)){ - if ((Missiontime - aip->submode_start_time > F1_0/2) && (sip->afterburner_fuel_capacity > 0.0f)) { - float percent_left = 100.0f * shipp->afterburner_fuel / sip->afterburner_fuel_capacity; - if (percent_left > 30.0f + ((Pl_objp-Objects) & 0x0f)) { - afterburners_start(Pl_objp); - - if (aip->ai_profile_flags & AIPF_SMART_AFTERBURNER_MANAGEMENT) { - aip->afterburner_stop_time = (fix) (Missiontime + F1_0 + static_randf(Pl_objp-Objects) * F1_0 / 4); - } else { - aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4; - } + if ((Missiontime - aip->submode_start_time > F1_0/2) && (sip->afterburner_fuel_capacity > 0.0f)) { + float percent_left = 100.0f * shipp->afterburner_fuel / sip->afterburner_fuel_capacity; + if (percent_left > 30.0f + ((Pl_objp-Objects) & 0x0f)) { + afterburners_start(Pl_objp); + + if (aip->ai_profile_flags & AIPF_SMART_AFTERBURNER_MANAGEMENT) { + aip->afterburner_stop_time = (fix) (Missiontime + F1_0 + static_randf(Pl_objp-Objects) * F1_0 / 4); + } else { + aip->afterburner_stop_time = Missiontime + F1_0 + static_rand(Pl_objp-Objects)/4; } } } @@ -5849,7 +5902,7 @@ int num_nearby_fighters(int enemy_team_mask, vec3d *pos, float threshold) // Favor aspect seekers when attacking small ships faraway. // Favor rapid fire dumbfire when attacking a large ship. // Ignore heat seekers because we're not sure how they'll work. -void ai_select_secondary_weapon(object *objp, ship_weapon *swp, int priority1 = -1, int priority2 = -1) +void ai_select_secondary_weapon(object *objp, ship_weapon *swp, int priority1 = -1, int priority2 = -1, int wif2_priority1 = -1, int wif2_priority2 = -1) { int num_weapon_types; int weapon_id_list[MAX_WEAPON_TYPES], weapon_bank_list[MAX_WEAPON_TYPES]; @@ -5869,6 +5922,11 @@ void ai_select_secondary_weapon(object *objp, ship_weapon *swp, int priority1 = ignore_mask |= WIF_HUGE; } + // Ignore capital+ unless one of the priorities asks for it. + if (!(WIF2_CAPITAL_PLUS & (wif2_priority1 | wif2_priority2))) { + ignore_mask |= WIF2_CAPITAL_PLUS; + } + // Ignore bomber+ unless one of the priorities asks for them to be selected if (!(WIF_BOMBER_PLUS & (priority1 | priority2))) { ignore_mask |= WIF_BOMBER_PLUS; @@ -5895,6 +5953,7 @@ void ai_select_secondary_weapon(object *objp, ship_weapon *swp, int priority1 = for (i=0; isecondary_bank_weapons[weapon_bank_list[i]]].wi_flags; + int wi_flags2 = Weapon_info[swp->secondary_bank_weapons[weapon_bank_list[i]]].wi_flags2; int ignore_mask_to_use = ((aip->ai_profile_flags & AIPF_SMART_SECONDARY_WEAPON_SELECTION) && (wi_flags & WIF_BOMBER_PLUS)) ? ignore_mask_without_huge : ignore_mask; if (!(wi_flags & ignore_mask_to_use)) { // Maybe bombs are illegal. @@ -5904,6 +5963,13 @@ void ai_select_secondary_weapon(object *objp, ship_weapon *swp, int priority1 = } else if (wi_flags & priority2) priority2_index = weapon_bank_list[i]; // Found second priority, but might still find first priority. } + if (!(wi_flags2 & ignore_mask_to_use)) { // Maybe bombs are illegal. + if (wi_flags2 & wif2_priority1) { + swp->current_secondary_bank = weapon_bank_list[i]; // Found first priority, return it. + break; + } else if (wi_flags2 & wif2_priority2) + priority2_index = weapon_bank_list[i]; // Found second priority, but might still find first priority. + } } // Ignore homing weapons if we didn't specify a flag - for priority 2 @@ -6468,7 +6534,7 @@ void set_predicted_enemy_pos(vec3d *predicted_enemy_pos, object *pobjp, vec3d *e // Make it take longer for enemies to get player's allies in range based on skill level. // but don't bias team v. team missions - if ( !((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) ) + if ( !(MULTI_TEAM) ) { if (iff_x_attacks_y(shipp->team, Player_ship->team)) range_time += The_mission.ai_profile->in_range_time[Game_skill_level]; @@ -6648,9 +6714,28 @@ int ai_near_full_strength(object *objp) { return (get_hull_pct(objp) > 0.9f) || (get_shield_pct(objp) > 0.8f); } + +void do_random_sidethrust(ai_info *aip, ship_info *sip) +{ + //Sidethrust vector is initially based on the velocity vector representing the ship's current sideways motion. + vec2d side_vec; + //Length to hold circle strafe is random (1-3) + slide accel time, changes every 4 seconds + int strafeHoldDirAmount = (int)(sip->slide_accel) + static_rand_range((Missiontime + static_rand(aip->shipnum)) >> 18, 1, 3); + //Get a random float using some of the more significant chunks of the missiontime as a seed (>>16 means it changes every second) + //This means that we get the same random values for a little bit. + //Using static_rand(shipnum) as a crude hash function to make sure that the seed is different for each ship and direction + //The *2 ensures that y and x stay separate. + side_vec.x = static_randf_range((((Missiontime + static_rand(aip->shipnum)) >> 16) / strafeHoldDirAmount) , -1.0f, 1.0f); + side_vec.y = static_randf_range((((Missiontime + static_rand(aip->shipnum)) >> 16) / strafeHoldDirAmount) * 2, -1.0f, 1.0f); + //Scale it up so that the longest dimension is length 1.0. This ensures we are always getting as much use out of sidethrust as possible. + vm_vec_boxscale(&side_vec, 1.0f); + + AI_ci.sideways = side_vec.x; + AI_ci.vertical = side_vec.y; +} // Set acceleration while in attack mode. -void attack_set_accel(ai_info *aip, float dist_to_enemy, float dot_to_enemy, float dot_from_enemy) +void attack_set_accel(ai_info *aip, ship_info *sip, float dist_to_enemy, float dot_to_enemy, float dot_from_enemy) { float speed_ratio; @@ -6682,23 +6767,19 @@ void attack_set_accel(ai_info *aip, float dist_to_enemy, float dot_to_enemy, flo //Circle Strafe: We try to maintain a constant distance from the target while using sidethrust to move in a circle //around the target if (aip->submode == AIS_CHASE_CIRCLESTRAFE) { - accelerate_ship(aip, 0.0f); //Just maintain current distance + //If glide is available, use it (smooths things out a bit) + if (sip->can_glide == true) + Pl_objp->phys_info.flags |= PF_GLIDING; - //Sidethrust vector is initially based on the velocity vector representing the ship's current sideways motion. - vec2d side_vec; - //NOTE: Leaving this hardcoded for now, but it might be good to make it configurable at some point. - int strafeHoldDirAmount = 3; - //Get a random float using some of the more significant chunks of the missiontime as a seed (>>16 means it changes every second) - //This means that we get the same random values for a little bit. - //Using static_rand(shipnum) as a crude hash function to make sure that the seed is different for each ship and direction - //The *2 ensures that y and x stay separate. - side_vec.x = static_randf_range((((Missiontime + static_rand(aip->shipnum)) >> 16) / strafeHoldDirAmount) , -1.0f, 1.0f); - side_vec.y = static_randf_range((((Missiontime + static_rand(aip->shipnum)) >> 16) / strafeHoldDirAmount) * 2, -1.0f, 1.0f); - //Scale it up so that the longest dimension is length 1.0. This ensures we are always getting as much use out of sidethrust as possible. - vm_vec_boxscale(&side_vec, 1.0f); + //Try to maintain a distance between 50% and 75% of maximum circle strafe distance + if (dist_to_enemy <= CIRCLE_STRAFE_MAX_DIST * .5) + accelerate_ship(aip, -1.0f); + else if (dist_to_enemy >= CIRCLE_STRAFE_MAX_DIST * 0.75) + accelerate_ship(aip, 1.0f); + else + accelerate_ship(aip, 0.0f); - AI_ci.sideways = side_vec.x; - AI_ci.vertical = side_vec.y; + do_random_sidethrust(aip, sip); return; } @@ -7104,7 +7185,7 @@ void ai_stealth_find() dot_from_enemy = -vm_vec_dotprod(&vec_to_enemy, &En_objp->orient.vec.fvec); - attack_set_accel(aip, dist_to_enemy, dot_to_enemy, dot_from_enemy); + attack_set_accel(aip, sip, dist_to_enemy, dot_to_enemy, dot_from_enemy); } // ----------------------------------------------------------------------------- @@ -7245,7 +7326,7 @@ void ai_chase_attack(ai_info *aip, ship_info *sip, vec3d *predicted_enemy_pos, f float dot_to_enemy, dot_from_enemy; //, time_to_hit; float bank_override = 0.0f; - if (avoid_player(Pl_objp, predicted_enemy_pos)) + if (!(aip->ai_profile_flags2 & AIPF2_NO_SPECIAL_PLAYER_AVOID) && avoid_player(Pl_objp, predicted_enemy_pos)) return; compute_dots(Pl_objp, En_objp, &dot_to_enemy, &dot_from_enemy); @@ -7289,7 +7370,7 @@ void ai_chase_attack(ai_info *aip, ship_info *sip, vec3d *predicted_enemy_pos, f ai_turn_towards_vector(&new_pos, Pl_objp, flFrametime, sip->srotation_time, NULL, rel_pos, bank_override, 0); } - attack_set_accel(aip, dist_to_enemy, dot_to_enemy, dot_from_enemy); + attack_set_accel(aip, sip, dist_to_enemy, dot_to_enemy, dot_from_enemy); } // EVADE_SQUIGGLE submode handler for chase mode. @@ -7719,7 +7800,7 @@ int has_preferred_secondary(object *objp, object *en_objp, ship_weapon *swp) void ai_choose_secondary_weapon(object *objp, ai_info *aip, object *en_objp) { float subsystem_strength = 0.0f; - int is_big_ship, priority1, priority2; + int is_big_ship, wif_priority1, wif_priority2, wif2_priority1, wif2_priority2; ship_weapon *swp; ship_info *esip; @@ -7761,31 +7842,41 @@ void ai_choose_secondary_weapon(object *objp, ai_info *aip, object *en_objp) if (is_big_ship) { - priority1 = WIF_HUGE; - priority2 = (aip->ai_profile_flags & AIPF_SMART_SECONDARY_WEAPON_SELECTION) ? WIF_BOMBER_PLUS : WIF_HOMING; + wif_priority1 = WIF_HUGE; + wif_priority2 = (aip->ai_profile_flags & AIPF_SMART_SECONDARY_WEAPON_SELECTION) ? WIF_BOMBER_PLUS : WIF_HOMING; + wif2_priority1 = WIF2_CAPITAL_PLUS; + wif2_priority2 = 0; } else if ( (esip != NULL) && (esip->flags & SIF_BOMBER) ) { - priority1 = WIF_BOMBER_PLUS; - priority2 = WIF_HOMING; + wif_priority1 = WIF_BOMBER_PLUS; + wif_priority2 = WIF_HOMING; + wif2_priority1 = 0; + wif2_priority2 = 0; } else if (subsystem_strength > 100.0f) { - priority1 = WIF_PUNCTURE; - priority2 = WIF_HOMING; + wif_priority1 = WIF_PUNCTURE; + wif_priority2 = WIF_HOMING; + wif2_priority1 = 0; + wif2_priority2 = 0; } else if ((aip->ai_profile_flags & AIPF_SMART_SECONDARY_WEAPON_SELECTION) && (en_objp->type == OBJ_ASTEROID)) //prefer dumbfires if its an asteroid { - priority1 = 0; - priority2 = 0; + wif_priority1 = 0; + wif_priority2 = 0; + wif2_priority1 = 0; + wif2_priority2 = 0; } else { - priority1 = WIF_HOMING; - priority2 = 0; + wif_priority1 = WIF_HOMING; + wif_priority2 = 0; + wif2_priority1 = 0; + wif2_priority2 = 0; } - ai_select_secondary_weapon(objp, swp, priority1, priority2); + ai_select_secondary_weapon(objp, swp, wif_priority1, wif_priority2, wif2_priority1, wif2_priority2); } // nprintf(("AI", "Frame %i: Chose secondary %s\n", Framecount, Weapon_info[swp->secondary_bank_weapons[swp->current_secondary_bank]].name)); @@ -8397,6 +8488,21 @@ void ai_chase() aip->submode_start_time = Missiontime; } + //Maybe apply random sidethrust, depending on the current submode + //The following are valid targets for random sidethrust (circle strafe uses it too, but that is handled separately) + if (aip->submode == SM_ATTACK || + aip->submode == SM_SUPER_ATTACK || + aip->submode == SM_EVADE_SQUIGGLE || + aip->submode == SM_EVADE || + aip->submode == SM_GET_AWAY) + { + //Re-roll for random sidethrust every 2 seconds + if (static_randf((Missiontime + static_rand(aip->shipnum)) >> 17) < aip->ai_random_sidethrust_percent) + { + do_random_sidethrust(aip, sip); + } + } + // // Maybe choose a new submode. // @@ -8468,7 +8574,7 @@ void ai_chase() aip->submode = SM_STEALTH_FIND; aip->submode_start_time = Missiontime; aip->submode_parm0 = SM_SF_AHEAD; - } else if (dist_to_enemy < CIRCLE_STRAFE_DIST + En_objp->radius && + } else if (dist_to_enemy < CIRCLE_STRAFE_MAX_DIST + En_objp->radius && (En_objp->phys_info.speed < MAX(sip->max_vel.xyz.x, sip->max_vel.xyz.y) * 1.5f) && (static_randf((Missiontime + static_rand(aip->shipnum)) >> 19) < aip->ai_circle_strafe_percent)) { aip->submode = AIS_CHASE_CIRCLESTRAFE; @@ -8583,7 +8689,7 @@ void ai_chase() aip->submode = SM_STEALTH_FIND; aip->submode_start_time = Missiontime; aip->submode_parm0 = SM_SF_AHEAD; - } else if (dist_to_enemy < CIRCLE_STRAFE_DIST + En_objp->radius && + } else if (dist_to_enemy < CIRCLE_STRAFE_MAX_DIST + En_objp->radius && (En_objp->phys_info.speed < MAX(sip->max_vel.xyz.x, sip->max_vel.xyz.y) * 1.5f) && (static_randf((Missiontime + static_rand(aip->shipnum)) >> 19) < aip->ai_circle_strafe_percent)) { aip->submode = AIS_CHASE_CIRCLESTRAFE; @@ -8593,7 +8699,7 @@ void ai_chase() aip->ai_flags &= ~AIF_ATTACK_SLOWLY; // Just in case, clear here. float get_away_chance = (aip->ai_get_away_chance == FLT_MIN) - ? (aip->ai_class + Game_skill_level)/(Num_ai_classes + NUM_SKILL_LEVELS) + ? (float)(aip->ai_class + Game_skill_level)/(Num_ai_classes + NUM_SKILL_LEVELS) : aip->ai_get_away_chance; switch (myrand() % 5) { @@ -8735,7 +8841,10 @@ void ai_chase() break; case AIS_CHASE_CIRCLESTRAFE: - if ((dist_to_enemy > CIRCLE_STRAFE_DIST + En_objp->radius) || (Missiontime - aip->submode_start_time > i2f(4))) { + //Break out of circle strafe if the target is too far, moving too fast, or we've been doing this for a while + if ((dist_to_enemy > CIRCLE_STRAFE_MAX_DIST + En_objp->radius) || + (Missiontime - aip->submode_start_time > i2f(8)) || + (En_objp->phys_info.speed > MAX(sip->max_vel.xyz.x, sip->max_vel.xyz.y) * 1.5)) { aip->submode = SM_ATTACK; aip->submode_start_time = Missiontime; aip->last_attack_time = Missiontime; @@ -8806,6 +8915,9 @@ void ai_chase() // ship_stop_fire_primary(Pl_objp); } } + } + + if ( tswp->num_secondary_banks > 0) { // Don't fire secondaries at a protected ship. if (!(En_objp->flags & OF_PROTECTED)) { @@ -8831,7 +8943,7 @@ void ai_chase() else { float secondary_range_mult = (aip->ai_secondary_range_mult == FLT_MIN) - ? (Game_skill_level + 1 + (3 * aip->ai_class/(Num_ai_classes - 1)))/NUM_SKILL_LEVELS + ? (float)(Game_skill_level + 1 + (3 * aip->ai_class/(Num_ai_classes - 1)))/NUM_SKILL_LEVELS : aip->ai_secondary_range_mult; firing_range = MIN((swip->max_speed * swip->lifetime * secondary_range_mult), swip->weapon_range); @@ -8908,10 +9020,17 @@ void ai_chase() } } } else { - aip->time_enemy_in_range *= (1.0f - flFrametime); + if (flFrametime < 1.0f) + aip->time_enemy_in_range *= (1.0f - flFrametime); + else + aip->time_enemy_in_range = 0; } - } else - aip->time_enemy_in_range *= (1.0f - flFrametime); + } else { + if (flFrametime < 1.0f) + aip->time_enemy_in_range *= (1.0f - flFrametime); + else + aip->time_enemy_in_range = 0; + } if(has_fired == -1){ ship_stop_fire_primary(Pl_objp); @@ -12108,7 +12227,7 @@ void ai_maybe_launch_cmeasure(object *objp, ai_info *aip) // For ships on player's team, have constant, average chance to fire. // For enemies, increasing chance with higher skill level. if (shipp->team == Player_ship->team) - fire_chance = The_mission.ai_profile->cmeasure_fire_chance[NUM_SKILL_LEVELS/2] * Ai_classes[aip->ai_class].ai_cmeasure_fire_chance[NUM_SKILL_LEVELS/2]; + fire_chance = Ai_classes[aip->ai_class].ai_cmeasure_fire_chance[NUM_SKILL_LEVELS/2]; else fire_chance = aip->ai_cmeasure_fire_chance; @@ -12326,7 +12445,7 @@ void ai_manage_shield(object *objp, ai_info *aip) } else { - delay = The_mission.ai_profile->shield_manage_delay[NUM_SKILL_LEVELS/2] * Ai_classes[aip->ai_class].ai_shield_manage_delay[NUM_SKILL_LEVELS/2]; + delay = Ai_classes[aip->ai_class].ai_shield_manage_delay[NUM_SKILL_LEVELS/2]; } // Scale between 1x and 3x based on ai_class (SUSHI: only if autoscale is on) @@ -13816,7 +13935,7 @@ int ai_avoid_shockwave(object *objp, ai_info *aip) else { accelerate_ship(aip, 1.0f + dot_to_goal); if (dot_to_goal > 0.2f) { - if (ai_maybe_fire_afterburner(Pl_objp, aip) && !(objp->phys_info.flags & PF_AFTERBURNER_ON )) { + if (!(objp->phys_info.flags & PF_AFTERBURNER_ON )) { afterburners_start(objp); aip->afterburner_stop_time = Missiontime + 2*F1_0; } @@ -14584,6 +14703,28 @@ void init_ai_system() } +int combine_flags(int base_flags, int override_flags, int override_set) +{ + int result = 0; + //Scan through every bit in the flag int + for (int i = 0; i < 31; i++) + { + int flag = (1 << i); + //If this flag is marked in the override as set, copy it from the override + if (override_set & flag) + { + if (override_flags & flag) + result |= flag; + } + else //Otherwise, copy it from the base flag + { + if (base_flags & flag) + result |= flag; + } + } + return result; +} + //Sets the ai_info stuff based on what is in the ai class and the current ai profile //Stuff in the ai class will override what is in the ai profile, but only if it is set. //Unset per-difficulty-level values are marked with FLT_MIN or INT_MIN @@ -14639,6 +14780,8 @@ void init_aip_from_class_and_profile(ai_info *aip, ai_class *aicp, ai_profile_t profile->circle_strafe_percent[Game_skill_level] : aicp->ai_circle_strafe_percent[Game_skill_level]; aip->ai_glide_strafe_percent = (aicp->ai_glide_strafe_percent[Game_skill_level] == FLT_MIN) ? profile->glide_strafe_percent[Game_skill_level] : aicp->ai_glide_strafe_percent[Game_skill_level]; + aip->ai_random_sidethrust_percent = (aicp->ai_random_sidethrust_percent[Game_skill_level] == FLT_MIN) ? + profile->random_sidethrust_percent[Game_skill_level] : aicp->ai_random_sidethrust_percent[Game_skill_level]; aip->ai_stalemate_time_thresh = (aicp->ai_stalemate_time_thresh[Game_skill_level] == FLT_MIN) ? profile->stalemate_time_thresh[Game_skill_level] : aicp->ai_stalemate_time_thresh[Game_skill_level]; aip->ai_stalemate_dist_thresh = (aicp->ai_stalemate_dist_thresh[Game_skill_level] == FLT_MIN) ? @@ -14647,25 +14790,12 @@ void init_aip_from_class_and_profile(ai_info *aip, ai_class *aicp, ai_profile_t profile->chance_to_use_missiles_on_plr[Game_skill_level] : aicp->ai_chance_to_use_missiles_on_plr[Game_skill_level]; aip->ai_max_aim_update_delay = (aicp->ai_max_aim_update_delay[Game_skill_level] == FLT_MIN) ? profile->max_aim_update_delay[Game_skill_level] : aicp->ai_max_aim_update_delay[Game_skill_level]; + aip->ai_turret_max_aim_update_delay = (aicp->ai_turret_max_aim_update_delay[Game_skill_level] == FLT_MIN) ? + profile->turret_max_aim_update_delay[Game_skill_level] : aicp->ai_turret_max_aim_update_delay[Game_skill_level]; - //Set flags (these act as overrides if set) - aip->ai_profile_flags = 0; - //Scan through every bit in the flag int - for (int i = 0; i < 31; i++) - { - int flag = (1 << i); - //If this flag is marked in the AI class as set, copy it from the class - if (aicp->ai_profile_flags_set & flag) - { - if (aicp->ai_profile_flags & flag) - aip->ai_profile_flags |= flag; - } - else //Otherwise, copy it from the AI profile - { - if (profile->flags & flag) - aip->ai_profile_flags |= flag; - } - } + //Combine AI profile and AI class flags + aip->ai_profile_flags = combine_flags(profile->flags, aicp->ai_profile_flags, aicp->ai_profile_flags_set); + aip->ai_profile_flags2 = combine_flags(profile->flags2, aicp->ai_profile_flags2, aicp->ai_profile_flags2_set); } void ai_set_default_behavior(object *obj, int classnum) diff --git a/code/ai/aigoals.cpp b/code/ai/aigoals.cpp index 86decab7f0..b00b695e2d 100644 --- a/code/ai/aigoals.cpp +++ b/code/ai/aigoals.cpp @@ -474,7 +474,7 @@ void ai_goal_purge_invalid_goals( ai_goal *aigp, ai_goal *goal_list, ai_info *ai purge_goal->flags |= AIGF_PURGE; } } - } + } break; } } @@ -489,7 +489,7 @@ void ai_goal_purge_all_invalid_goals(ai_goal *aigp) // only purge goals if a new goal is one of the types in next statement if (!(aigp->ai_mode & PURGE_GOALS_ALL_SHIPS)) return; - + for (sop = GET_FIRST(&Ship_obj_list); sop != END_OF_LIST(&Ship_obj_list); sop = GET_NEXT(sop)) { ship *shipp = &Ships[Objects[sop->objnum].instance]; @@ -2197,6 +2197,7 @@ void ai_process_mission_orders( int objnum, ai_info *aip ) } else // Just in case this ship had been protected, unprotect it. if (aip->target_objnum != -1) Objects[aip->target_objnum].flags &= ~OF_PROTECTED; + break; } diff --git a/code/ai/aiturret.cpp b/code/ai/aiturret.cpp index fe0e45c7f6..5efbc8fc95 100644 --- a/code/ai/aiturret.cpp +++ b/code/ai/aiturret.cpp @@ -1008,9 +1008,28 @@ void ship_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos vm_vec_normalized_dir(gvec, targetp, gpos); } - ship_model_stop(objp); + ship_model_stop(objp); + + // per firingpoint based changes go here for turrets } +//Update turret aiming data based on max turret aim update delay +void turret_ai_update_aim(ai_info *aip, object *En_Objp, ship_subsys *ss) +{ + if (Missiontime >= ss->next_aim_pos_time) + { + ss->last_aim_enemy_pos = En_Objp->pos; + ss->last_aim_enemy_vel = En_Objp->phys_info.vel; + ss->next_aim_pos_time = Missiontime + fl2f(frand_range(0.0f, aip->ai_turret_max_aim_update_delay)); + } + else + { + //Update the position based on the velocity (assume no velocity vector change) + vm_vec_scale_add2(&ss->last_aim_enemy_pos, &ss->last_aim_enemy_vel, flFrametime); + } +} + + // Rotate a turret towards an enemy. // Return TRUE if caller should use angles in subsequent rotations. // Some obscure model thing only John Slagel knows about. @@ -1041,23 +1060,26 @@ int aifft_rotate_turret(ship *shipp, int parent_objnum, ship_subsys *ss, object ship_get_global_turret_info(&Objects[parent_objnum], tp, &gun_pos, &gun_vec); + //Update "known" position and velocity of target. Only matters if max_aim_update_delay is set. + turret_ai_update_aim(&Ai_info[shipp->ai_index], &Objects[ss->turret_enemy_objnum], ss); + //Figure out what point on the ship we want to point the gun at, and store the global location //in enemy_point. vec3d enemy_point; if ((ss->targeted_subsys != NULL) && !(ss->flags & SSF_NO_SS_TARGETING)) { if (ss->turret_enemy_objnum != -1) { vm_vec_unrotate(&enemy_point, &ss->targeted_subsys->system_info->pnt, &Objects[ss->turret_enemy_objnum].orient); - vm_vec_add2(&enemy_point, &Objects[ss->turret_enemy_objnum].pos); + vm_vec_add2(&enemy_point, &ss->last_aim_enemy_pos); } } else { if ((lep->type == OBJ_SHIP) && (Ship_info[Ships[lep->instance].ship_info_index].flags & (SIF_BIG_SHIP | SIF_HUGE_SHIP))) { ai_big_pick_attack_point_turret(lep, ss, &gun_pos, &gun_vec, &enemy_point, tp->turret_fov, MIN(wip->max_speed * wip->lifetime, wip->weapon_range)); } else { - enemy_point = lep->pos; + enemy_point = ss->last_aim_enemy_pos; } } - target_moving_direction = lep->phys_info.vel; + target_moving_direction = ss->last_aim_enemy_vel; //Try to guess where the enemy will be, and store that spot in predicted_enemy_pos if (The_mission.ai_profile->flags & AIPF_USE_ADDITIVE_WEAPON_VELOCITY) { @@ -1317,7 +1339,7 @@ void turret_set_next_fire_timestamp(int weapon_num, weapon_info *wip, ship_subsy { // make side even for team vs. team - if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) { + if (MULTI_TEAM) { // flak guns need to fire more rapidly if (wip->wi_flags & WIF_FLAK) { wait *= aip->ai_ship_fire_delay_scale_friendly * 0.5f; @@ -2119,6 +2141,12 @@ void ai_fire_from_turret(ship *shipp, ship_subsys *ss, int parent_objnum) turret_fire_weapon(valid_weapons[0], ss, parent_objnum, &gpos, &tv2e, &predicted_enemy_pos); else turret_fire_weapon(valid_weapons[i], ss, parent_objnum, &gpos, &tv2e, &predicted_enemy_pos); + } else { + // make sure salvo fire mode does not turn into autofire + if ((tp->flags & MSS_FLAG_TURRET_SALVO) && ((i + 1) == number_of_firings)) { + ai_info *parent_aip = &Ai_info[Ships[Objects[parent_objnum].instance].ai_index]; + turret_set_next_fire_timestamp(valid_weapons[0], wip, ss, parent_aip); + } } // moved this here so we increment the fire pos only after we have fired and not during it ss->turret_next_fire_pos++; @@ -2191,14 +2219,16 @@ bool turret_adv_fov_test(ship_subsys *ss, vec3d *gvec, vec3d *v2e, float size_mo if (((dot + size_mod) > tp->turret_fov) && ((dot - size_mod) <= tp->turret_max_fov)) { vec3d of_dst; vm_vec_rotate( &of_dst, v2e, &ss->world_to_turret_matrix ); - vm_vec_normalize(&of_dst); if ((of_dst.xyz.x == 0) && (of_dst.xyz.y == 0)) { return true; } else { of_dst.xyz.z = 0; - // now we have 2d vector with lenght of 1 that points at the targets direction after being rotated to turrets FOR - if ((-of_dst.xyz.y + size_mod) > tp->turret_y_fov) - return true; + if (!IS_VEC_NULL_SQ_SAFE(&of_dst)) { + vm_vec_normalize(&of_dst); + // now we have 2d vector with lenght of 1 that points at the targets direction after being rotated to turrets FOR + if ((-of_dst.xyz.y + size_mod) > tp->turret_y_fov) + return true; + } } } return false; diff --git a/code/asteroid/asteroid.cpp b/code/asteroid/asteroid.cpp index dbf1e22e09..6759cf3235 100644 --- a/code/asteroid/asteroid.cpp +++ b/code/asteroid/asteroid.cpp @@ -1584,7 +1584,7 @@ void asteroid_update_collide_flag(object *asteroid_objp) asp->collide_objsig = -1; // multiplayer dogfight - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)){ + if(MULTI_DOGFIGHT){ return; } diff --git a/code/autopilot/autopilot.cpp b/code/autopilot/autopilot.cpp index 09dac65132..b33ec2ccb0 100644 --- a/code/autopilot/autopilot.cpp +++ b/code/autopilot/autopilot.cpp @@ -255,6 +255,7 @@ bool CanAutopilotPos(vec3d targetPos) return true; } +extern object* Autopilot_flight_leader; // ******************************************************************************************** // Engages autopilot // This does: @@ -270,6 +271,18 @@ void StartAutopilot() AutoPilotEngaged = true; + // find the ship that is "leading" all of the ships when the player starts + // autopilot + // by default the ship that is leading the autopilot session the player's + // wing leader (if the player is the wing leader then it will be the + // player). + // TODO:implement a way to allow a FREDer to say a different ship is leader + Autopilot_flight_leader = get_wing_leader(Player_ship->wingnum); + if ( Autopilot_flight_leader == NULL ) { + // force player to be the leader if he doesn't have a wing + Autopilot_flight_leader = Player_obj; + } + if (The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS) LockAPConv = timestamp(); // lock convergence instantly else @@ -400,7 +413,7 @@ void StartAutopilot() // snap wings into formation them into formation if (The_mission.flags & MISSION_FLAG_USE_AP_CINEMATICS && // only if using cinematics (Ships[i].wingnum != -1 && Wings[Ships[i].wingnum].flags & WF_NAV_CARRY) // only if in a wing - && Player_obj != &Objects[Ships[i].objnum]) //only if not player object + && Autopilot_flight_leader != &Objects[Ships[i].objnum]) //only if not flight leader's object { ai_info *aip = &Ai_info[Ships[i].ai_index]; int wingnum = aip->wing, wing_index = get_wing_index(&Objects[Ships[i].objnum], wingnum); @@ -419,29 +432,29 @@ void StartAutopilot() switch (wcount % 2) { case 1: // back-left - vm_vec_add(&perp, &zero, &Player_obj->orient.vec.rvec); + vm_vec_add(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); //vm_vec_sub(&perp, &perp, &Player_obj->orient.vec.fvec); vm_vec_normalize(&perp); vm_vec_scale(&perp, -166.0f*j); // 166m is supposedly the optimal range according to tolwyn - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; default: //back-right case 0: - vm_vec_add(&perp, &zero, &Player_obj->orient.vec.rvec); + vm_vec_add(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); //vm_vec_sub(&perp, &perp, &Player_obj->orient.vec.fvec); vm_vec_normalize(&perp); vm_vec_scale(&perp, 166.0f*j); - vm_vec_add(&goal_point, &Player_obj->pos, &perp); + vm_vec_add(&goal_point, &Autopilot_flight_leader->pos, &perp); break; } autopilot_wings[wingnum] = wcount; wcount++; } Objects[Ships[i].objnum].pos = goal_point; - if (vm_vec_dist_quick(&Player_obj->pos, &Objects[Ships[i].objnum].pos) > distance) + if (vm_vec_dist_quick(&Autopilot_flight_leader->pos, &Objects[Ships[i].objnum].pos) > distance) { - distance = vm_vec_dist_quick(&Player_obj->pos, &Objects[Ships[i].objnum].pos); + distance = vm_vec_dist_quick(&Autopilot_flight_leader->pos, &Objects[Ships[i].objnum].pos); } } // lock primary and secondary weapons @@ -540,9 +553,9 @@ void StartAutopilot() vec3d right, front, up, offset; for (i = 0; i < (int)capIndexes.size(); i++) { - vm_vec_add(&right, &Player_obj->orient.vec.rvec, &zero); - vm_vec_add(&front, &Player_obj->orient.vec.fvec, &zero); - vm_vec_add(&up, &Player_obj->orient.vec.uvec, &zero); + vm_vec_add(&right, &Autopilot_flight_leader->orient.vec.rvec, &zero); + vm_vec_add(&front, &Autopilot_flight_leader->orient.vec.fvec, &zero); + vm_vec_add(&up, &Autopilot_flight_leader->orient.vec.uvec, &zero); vm_vec_add(&offset, &zero, &zero); if (Ship_info[Ships[capIndexes[i]].ship_info_index].flags & (SIF_CAPITAL | SIF_SUPERCAP)) { @@ -610,7 +623,7 @@ void StartAutopilot() vm_vec_scale(&up, (1+((float)floor((float)capship_placed[1]/3)))); // move ourselves up and out of the way of the smaller ships - vm_vec_add(&perp, &Player_obj->orient.vec.uvec, &zero); + vm_vec_add(&perp, &Autopilot_flight_leader->orient.vec.uvec, &zero); vm_vec_scale(&perp, capship_spreads[2]); vm_vec_add(&up, &up, &perp); @@ -665,7 +678,7 @@ void StartAutopilot() vm_vec_scale(&front, 2*(1+((float)floor((float)capship_placed[2]/3)))); // move "out" by 166*(wcount-1) so we don't bump into fighters - vm_vec_add(&perp, &Player_obj->orient.vec.rvec, &zero); + vm_vec_add(&perp, &Autopilot_flight_leader->orient.vec.rvec, &zero); vm_vec_scale(&perp, 166.0f*float(wcount-1)); if ( (capship_placed[2] % 2) == 0) vm_vec_add(&right, &right, &perp); @@ -687,16 +700,16 @@ void StartAutopilot() // global scale the position by 50% //vm_vec_scale(&offset, 1.5); - vm_vec_add(&Objects[Ships[capIndexes[i]].objnum].pos, &Player_obj->pos, &offset); + vm_vec_add(&Objects[Ships[capIndexes[i]].objnum].pos, &Autopilot_flight_leader->pos, &offset); - if (vm_vec_dist_quick(&Player_obj->pos, &Objects[Ships[i].objnum].pos) > distance) + if (vm_vec_dist_quick(&Autopilot_flight_leader->pos, &Objects[Ships[i].objnum].pos) > distance) { - distance = vm_vec_dist_quick(&Player_obj->pos, &Objects[Ships[i].objnum].pos); + distance = vm_vec_dist_quick(&Autopilot_flight_leader->pos, &Objects[Ships[i].objnum].pos); } } } - ftemp = floor(Player_obj->phys_info.max_vel.xyz.z/speed_cap); + ftemp = floor(Autopilot_flight_leader->phys_info.max_vel.xyz.z/speed_cap); if (ftemp >= 2.0f && ftemp < 4.0f) tc_factor = 2; else if (ftemp >= 4.0f && ftemp < 8.0f) @@ -723,74 +736,74 @@ void StartAutopilot() case 9: case 16: if (capship_placed[0] == 0) - vm_vec_sub(&perp, &zero, &Player_obj->orient.vec.uvec); + vm_vec_sub(&perp, &zero, &Autopilot_flight_leader->orient.vec.uvec); else { // become up-left - vm_vec_add(&perp, &zero, &Player_obj->orient.vec.uvec); - vm_vec_sub(&perp, &perp, &Player_obj->orient.vec.rvec); + vm_vec_add(&perp, &zero, &Autopilot_flight_leader->orient.vec.uvec); + vm_vec_sub(&perp, &perp, &Autopilot_flight_leader->orient.vec.rvec); } break; case 2: // up case 10: case 23: - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); if (capshipPresent) // become up-right - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.rvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.rvec); break; case 3: // left case 11: case 22: - vm_vec_sub(&perp, &zero, &Player_obj->orient.vec.rvec); + vm_vec_sub(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); break; case 4: // up-left case 12: case 21: - vm_vec_sub(&perp, &zero, &Player_obj->orient.vec.rvec); - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_sub(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); break; case 5: // up-right case 13: case 20: - vm_vec_add(&perp, &zero, &Player_obj->orient.vec.rvec); - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_add(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); break; case 6: // down-left case 14: case 19: - vm_vec_sub(&perp, &zero, &Player_obj->orient.vec.rvec); + vm_vec_sub(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); if (capship_placed[0] < 2) - vm_vec_sub(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_sub(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); else - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); break; case 7: // down-right case 15: case 18: - vm_vec_add(&perp, &zero, &Player_obj->orient.vec.rvec); + vm_vec_add(&perp, &zero, &Autopilot_flight_leader->orient.vec.rvec); if (capship_placed[0] < 1) - vm_vec_sub(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_sub(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); else - vm_vec_add(&perp, &perp, &Player_obj->orient.vec.uvec); + vm_vec_add(&perp, &perp, &Autopilot_flight_leader->orient.vec.uvec); break; default: case 0: // right case 8: case 17: - perp = Player_obj->orient.vec.rvec; + perp = Autopilot_flight_leader->orient.vec.rvec; break; } vm_vec_normalize(&perp); //vm_vec_scale(&perp, 2*radius+distance); - vm_vec_scale(&perp, Player_obj->radius+radius); + vm_vec_scale(&perp, Autopilot_flight_leader->radius+radius); // randomly scale up/down by up to 20% j = 20-myrand()%40; // [-20,20] @@ -852,6 +865,8 @@ void EndAutoPilot() { AutoPilotEngaged = false; + Autopilot_flight_leader = NULL; + set_time_compression(1); lock_time_compression(false); Player_use_ai = 0; @@ -975,25 +990,39 @@ camera* nav_get_set_camera() void nav_warp(bool prewarp=false) { - // ok... find our end distance - norm1 is still a unit vector in the direction from the player to the navpoint - vec3d targetPos, tpos=Player_obj->pos, pos; - - vm_vec_sub(&pos, Navs[CurrentNav].GetPosition(), &Player_obj->pos); + /* ok... find our end distance - norm1 is still a unit vector in the + direction from the flight leader to the navpoint */ + vec3d targetPos, tpos=Autopilot_flight_leader->pos, pos; + + /* calculate a vector that we can use to make a path from the flight + leader's location to the nav point */ + vm_vec_sub(&pos, Navs[CurrentNav].GetPosition(), &Autopilot_flight_leader->pos); vm_vec_normalize(&pos); vm_vec_scale(&pos, 250.0f); // we move by increments of 250 + /* using the vector of the flight leaders's path, simulate moving the + flight along this path by checking the autopilot conditions as specific + intervals along the path*/ while (CanAutopilotPos(tpos)) { vm_vec_add(&tpos, &tpos, &pos); } - vm_vec_sub(&targetPos, &tpos, &Player_obj->pos); //targetPos is actually a projection in a the direction toward the nav + vm_vec_sub(&targetPos, &tpos, &Autopilot_flight_leader->pos); + /* targetPos is actually a vector that describes the exact 3D movement that + the flgith leader needs to execute to reach the location that the auto + pilot is to shut off */ + // Check if we are actually just setting up for the cinimatic shot of the + // flight flying on autopilot. Only jump halfway. Also we also need to + // put the camera in the correct position to show the player this cinimatic if (prewarp) { vm_vec_scale(&targetPos, 0.5); vm_vec_add(&cameraPos, &cameraPos, &targetPos); } + // Find all ships that are supposed to autopilot with the player and move them + // to the cinimatic location or the final destination for (int i = 0; i < MAX_SHIPS; i++) { if (Ships[i].objnum != -1 && @@ -1060,7 +1089,7 @@ void NavSystem_Do() if(cam != NULL) { cam->set_position(&cameraPos); - cam->set_rotation_facing(&Player_obj->pos); + cam->set_rotation_facing(&Autopilot_flight_leader->pos); } CinematicStarted = true; @@ -1148,7 +1177,7 @@ void NavSystem_Do() { object *other_objp = &Objects[Ships[i].objnum]; - if (vm_vec_dist_quick(&Player_obj->pos, &other_objp->pos) < (NavLinkDistance + other_objp->radius)) + if (vm_vec_dist_quick(&Autopilot_flight_leader->pos, &other_objp->pos) < (NavLinkDistance + other_objp->radius)) { Ships[i].flags2 &= ~SF2_NAVPOINT_NEEDSLINK; Ships[i].flags2 |= SF2_NAVPOINT_CARRY; diff --git a/code/camera/camera.cpp b/code/camera/camera.cpp index 62f5c3869d..366c5b1fc7 100644 --- a/code/camera/camera.cpp +++ b/code/camera/camera.cpp @@ -9,6 +9,7 @@ #include "model/model.h" //polymodel, model_get #include "playerman/player.h" //player_get_padlock_orient #include "ship/ship.h" //compute_slew_matrix +#include "graphics/font.h" //*************************IMPORTANT GLOBALS************************* float VIEWER_ZOOM_DEFAULT = 0.75f; // Default viewer zoom, 0.625 as per multi-lateral agreement on 3/24/97 @@ -471,6 +472,8 @@ void camera::get_info(vec3d *position, matrix *orientation) mtxB.a1d[i] = pos; } vm_matrix_x_matrix(&c_ori, &mtxA, &mtxB); + + vm_orthogonalize_matrix(&c_ori); /* angles a; ori_p.get(&a.p, NULL); @@ -613,15 +616,25 @@ void warp_camera::get_info(vec3d *position, matrix *orientation) //*************************subtitle************************* #define MAX_SUBTITLE_LINES 64 -subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_time, char* in_imageanim, float in_fade_time, color *in_text_color, bool center_x, bool center_y, int in_width, bool in_post_shaded) +subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, char* in_imageanim, float in_display_time, float in_fade_time, color *in_text_color, int in_text_fontnum, bool center_x, bool center_y, int in_width, int in_height, bool in_post_shaded) { // basic init, this always has to be done memset( imageanim, 0, sizeof(imageanim) ); + memset( &text_pos, 0, 2*sizeof(int) ); + memset( &image_pos, 0, 4*sizeof(int) ); image_id = -1; if ( ((in_text != NULL) && (strlen(in_text) <= 0)) && ((in_imageanim != NULL) && (strlen(in_imageanim) <= 0)) ) return; + char text_buf[256]; + if (in_text != NULL && strlen(in_text) > 0) + { + strcpy(text_buf, in_text); + sexp_replace_variable_names_with_values(text_buf, 256); + in_text = text_buf; + } + int num_text_lines = 0; char *text_line_ptrs[MAX_SUBTITLE_LINES]; @@ -629,7 +642,9 @@ subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_t //Setup text if ( (in_text != NULL) && (strlen(in_text) > 0) ) { - num_text_lines = split_str(in_text, in_width, text_line_lens, text_line_ptrs, MAX_SUBTITLE_LINES); + int split_width = (in_width > 0) ? in_width : 200; + + num_text_lines = split_str(in_text, split_width, text_line_lens, text_line_ptrs, MAX_SUBTITLE_LINES); std::string temp_str; for(int i = 0; i < num_text_lines; i++) { @@ -639,10 +654,11 @@ subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_t } //Setup text color - if(in_text_color) + if(in_text_color != NULL) text_color = *in_text_color; else gr_init_alphacolor(&text_color, 255, 255, 255, 255); + text_fontnum = in_text_fontnum; //Setup display and fade time display_time = fl_abs(in_display_time); @@ -659,11 +675,20 @@ subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_t //Setup pos int w=0, h=0, tw=0, th=0; - float deltax, deltay; - image_pos[0] = 0; - image_pos[1] = 0; if(center_x || center_y) { + // switch font because we need to measure it + int old_fontnum; + if (text_fontnum >= 0) + { + old_fontnum = gr_get_current_fontnum(); + gr_set_font(text_fontnum); + } + else + { + old_fontnum = -1; + } + //Get text size for(int i = 0; i < num_text_lines; i++) { @@ -675,10 +700,21 @@ subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_t th += h; } + // restore old font + if (old_fontnum >= 0) + { + gr_set_font(old_fontnum); + } + //Get image size if(image_id != -1) { bm_get_info(image_id, &w, &h); + if (in_width > 0) + w = in_width; + if (in_height > 0) + h = in_height; + tw += w; if(h > th) th = h; @@ -686,44 +722,29 @@ subtitle::subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_t //Center it? if(center_x) - image_pos[0] = (gr_screen.max_w - tw)/2; + image_pos.x = (gr_screen.max_w - tw)/2; if(center_y) - image_pos[1] = (gr_screen.max_h - th)/2; + image_pos.y = (gr_screen.max_h - th)/2; } + if(in_x_pos < 0 && !center_x) - image_pos[0] += gr_screen.max_w + in_x_pos; + image_pos.x += gr_screen.max_w + in_x_pos; else if(!center_x) - image_pos[0] += in_x_pos; + image_pos.x += in_x_pos; if(in_y_pos < 0 && !center_y) - image_pos[1] += gr_screen.max_h + in_y_pos; + image_pos.y += gr_screen.max_h + in_y_pos; else if(!center_y) - image_pos[1] += in_y_pos; + image_pos.y += in_y_pos; + + image_pos.w = in_width; + image_pos.h = in_height; if(image_id != -1) - { - text_pos[0] = (float) (image_pos[0] + w); //Still set from bm_get_info call - if (!center_x) - { - deltax = text_pos[0] / 1024.0f; //MikeStar; - text_pos[0] = gr_screen.max_w * deltax; //MikeStar; - } - } + text_pos.x = image_pos.x + w; //Still set from bm_get_info call else - { - text_pos[0] = (float) image_pos[0]; - if (!center_x) - { - deltax = text_pos[0] / 1024.0f; //MikeStar; - text_pos[0] = gr_screen.max_w * deltax; //MikeStar; - } - } - text_pos[1] = (float) image_pos[1]; - if (!center_y) - { - deltay = text_pos[1] / 768.0f; //MikeStar; - text_pos[1] = gr_screen.max_h * deltay; //MikeStar; - } + text_pos.x = image_pos.x; + text_pos.y = image_pos.y; time_displayed = 0.0f; time_displayed_end = 2.0f*fade_time + display_time; @@ -754,9 +775,21 @@ void subtitle::do_frame(float frametime) gr_set_color_fast(&text_color); + // save old font and set new font + int old_fontnum; + if (text_fontnum >= 0) + { + old_fontnum = gr_get_current_fontnum(); + gr_set_font(text_fontnum); + } + else + { + old_fontnum = -1; + } + int font_height = gr_get_font_height(); - int x = fl2i(text_pos[0]); - int y = fl2i(text_pos[1]); + int x = text_pos.x; + int y = text_pos.y; for(unsigned int i = 0; i < text_lines.size(); i++) { @@ -764,10 +797,36 @@ void subtitle::do_frame(float frametime) y += font_height; } - if(image_id != -1) + // restore old font + if (old_fontnum >= 0) + { + gr_set_font(old_fontnum); + } + + if(image_id >= 0) { gr_set_bitmap(image_id, GR_ALPHABLEND_FILTER, GR_BITBLT_MODE_NORMAL, text_color.alpha/255.0f); - gr_bitmap(image_pos[0], image_pos[1], false); + + // scaling? + if (image_pos.w > 0 || image_pos.h > 0) + { + int orig_w, orig_h; + vec3d scale; + + bm_get_info(image_id, &orig_w, &orig_h); + scale.xyz.x = image_pos.w / (float) orig_w; + scale.xyz.y = image_pos.h / (float) orig_h; + scale.xyz.z = 1.0f; + + gr_push_scale_matrix(&scale); + gr_bitmap(image_pos.x, image_pos.y, false); + gr_pop_scale_matrix(); + } + // no scaling + else + { + gr_bitmap(image_pos.x, image_pos.y, false); + } } time_displayed += frametime; @@ -789,9 +848,11 @@ void subtitle::clone(const subtitle &sub) for (i = 0; i < sub.text_lines.size(); i++) { text_lines.push_back(sub.text_lines[i]); } + text_fontnum = sub.text_fontnum; - text_pos[0] = sub.text_pos[0]; - text_pos[1] = sub.text_pos[1]; + // copy the structs + text_pos = sub.text_pos; + image_pos = sub.image_pos; display_time = sub.display_time; fade_time = sub.fade_time; @@ -806,9 +867,6 @@ void subtitle::clone(const subtitle &sub) image_id = -1; } - image_pos[0] = sub.image_pos[0]; - image_pos[1] = sub.image_pos[1]; - time_displayed = sub.time_displayed; time_displayed_end = sub.time_displayed_end; diff --git a/code/camera/camera.h b/code/camera/camera.h index c47379d8c7..be826ab88b 100644 --- a/code/camera/camera.h +++ b/code/camera/camera.h @@ -125,16 +125,17 @@ private: void clone(const subtitle &sub); SCP_vector text_lines; - float text_pos[2]; + struct { int x; int y; } text_pos; float display_time; float fade_time; color text_color; + int text_fontnum; //Done with set char imageanim[MAX_FILENAME_LEN]; int image_id; - int image_pos[2]; + struct { int x; int y; int w; int h; } image_pos; //Time this has been displayed float time_displayed; @@ -144,9 +145,9 @@ private: bool post_shaded; public: - subtitle(int in_x_pos, int in_y_pos, char* in_text, float in_display_time, - char* in_imageanim = NULL, float in_fade_time = 0.0f, color *in_text_color = NULL, - bool center_x = false, bool center_y = false, int in_width = 200, bool post_shaded=false); + subtitle(int in_x_pos, int in_y_pos, char* in_text = NULL, char* in_imageanim = NULL, + float in_display_time = 0, float in_fade_time = 0.0f, color *in_text_color = NULL, int in_text_fontnum = -1, + bool center_x = false, bool center_y = false, int in_width = 0, int in_height = 0, bool post_shaded=false); ~subtitle(); subtitle(const subtitle &sub) { clone(sub); } diff --git a/code/cfile/cfilesystem.cpp b/code/cfile/cfilesystem.cpp index b97c4ce753..96d998d0d7 100644 --- a/code/cfile/cfilesystem.cpp +++ b/code/cfile/cfilesystem.cpp @@ -1168,7 +1168,7 @@ int cf_find_file_location_ext( char *filename, const int ext_num, const char **e int last_root_index = -1; int last_path_index = -1; - file_list_index.reserve(Num_files); + file_list_index.reserve( MIN(ext_num * 4, Num_files) ); // next, run though and pick out base matches for (i = 0; i < Num_files; i++) { diff --git a/code/cmdline/cmdline.cpp b/code/cmdline/cmdline.cpp index 6d1e48395f..4ab1a0378b 100644 --- a/code/cmdline/cmdline.cpp +++ b/code/cmdline/cmdline.cpp @@ -21,6 +21,7 @@ #include "globalincs/pstypes.h" #ifdef _WIN32 +#include #include #elif defined(APPLE_APP) #include @@ -49,6 +50,7 @@ public: int get_int(); float get_float(); char *str(); + bool check_if_args_is_valid(); }; static cmdline_parm Parm_list(NULL, NULL); @@ -109,16 +111,15 @@ typedef struct // Please group them by type, ie graphics, gameplay etc, maximum 20 different types Flag exe_params[] = { - { "-spec", "Enable specular", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-spec", }, + { "-spec", "Enable specular", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-spec", }, { "-glow", "Enable glowmaps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-glow", }, { "-env", "Enable environment maps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-env", }, - { "-mipmap", "Enable mipmapping", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-mipmap", }, + { "-mipmap", "Enable mipmapping", true, 0, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-mipmap", }, { "-nomotiondebris", "Disable motion debris", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomotiondebris",}, { "-noscalevid", "Disable scale-to-window for movies", true, 0, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noscalevid", }, { "-missile_lighting", "Apply Lighting to Missiles" , true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-missile_lighting", }, { "-normal", "Enable normal maps", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-normal" }, - { "-3dshockwave", "Enable 3D shockwaves", true, EASY_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-3dshockwave" }, - { "-post_process", "Enable post processing", true, EASY_MEM_ALL_ON, EASY_DEFAULT, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-post_process" }, + { "-3dshockwave", "Enable 3D shockwaves", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Graphics", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-3dshockwave" }, { "-img2dds", "Compress non-compressed images", true, 0, EASY_DEFAULT, "Game Speed", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-img2dds", }, { "-no_vsync", "Disable vertical sync", true, 0, EASY_DEFAULT, "Game Speed", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_vsync", }, @@ -127,18 +128,16 @@ Flag exe_params[] = { "-dualscanlines", "Another pair of scanning lines", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dualscanlines", }, { "-targetinfo", "Enable info next to target", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-targetinfo", }, { "-orbradar", "Enables 3d radar", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-orbradar", }, - { "-rearm_timer", "Enable Rearm/Repair Completion Timer", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-rearm_timer", }, + { "-rearm_timer", "Enable Rearm/Repair Completion Timer", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-rearm_timer", }, { "-ballistic_gauge", "Enable the analog ballistic ammo gauge", true, 0, EASY_DEFAULT, "HUD", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ballistic_gauge", }, { "-ship_choice_3d", "Use models for ship selection", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ship_choice_3d", }, - { "-weapon_choice_3d", "Use models for weapon selection", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-weapon_choice_3d", }, + { "-weapon_choice_3d", "Use models for weapon selection", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-weapon_choice_3d", }, { "-3dwarp", "Enable 3d warp", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-3dwarp", }, { "-warp_flash", "Enable flash upon warp", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-warp_flash", }, { "-no_ap_interrupt", "Disable interrupting autopilot", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_ap_interrupt", }, - { "-tbp", "Toggle features for The Babylon Project", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-tbp", }, // TBP warp effects -Et1 - { "-wcsaga", "Toggle features for Wing Commander Saga", true, 0, EASY_DEFAULT, "Gameplay", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-wcsaga", }, - { "-snd_preload", "Preload mission game sounds", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-snd_preload", }, + { "-snd_preload", "Preload mission game sounds", true, EASY_MEM_ALL_ON, EASY_DEFAULT_MEM, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-snd_preload", }, { "-nosound", "Disable sound and music", false, 0, EASY_DEFAULT, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nosound", }, { "-nomusic", "Disable music", false, 0, EASY_DEFAULT, "Audio", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomusic", }, @@ -152,41 +151,41 @@ Flag exe_params[] = { "-oldfire", "", false, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-oldfire", }, { "-nohtl", "Software mode (very slow)", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nohtl", }, - { "-no_set_gamma", "Disable setting of gamma", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_set_gamma", }, + { "-no_set_gamma", "Disable setting of gamma", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-no_set_gamma", }, { "-nomovies", "Disable video playback", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nomovies", }, { "-noparseerrors", "Disable parsing errors", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noparseerrors", }, { "-safeloading", "", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-safeloading", }, - { "-query_speech", "Does this build have speech?", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-query_speech", }, + { "-query_speech", "Does this build have speech?", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-query_speech", }, { "-d3d_bad_tsys", "Enable inefficient textures", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-d3d_bad_tsys", }, { "-novbo", "Disable OpenGL VBO", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-novbo", }, - { "-noibx", "Don't use cached index buffers (IBX)", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noibx", }, + { "-noibx", "Don't use cached index buffers (IBX)", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-noibx", }, { "-loadallweps", "Load all weapons, even those not used", true, 0, EASY_DEFAULT, "Troubleshoot", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-loadallweps", }, - { "-disable_fbo", "Disable OpenGL RenderTargets", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, + { "-disable_fbo", "Disable OpenGL RenderTargets", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, { "-no_glsl", "Disable GLSL (shader) support", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, { "-ati_swap", "Fix Color issues on some ATI cards", true, 0, EASY_DEFAULT, "Troubleshoot", "http://scp.indiegames.us/mantis/view.php?id=1669", }, - { "-no_3d_sound", "Use only 2D/stereo for sound effects", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, + { "-no_3d_sound", "Use only 2D/stereo for sound effects", true, 0, EASY_DEFAULT, "Troubleshoot", "", }, { "-ingame_join", "Allows ingame joining", true, 0, EASY_DEFAULT, "Experimental", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-ingame_join", }, { "-voicer", "Voice recognition", true, 0, EASY_DEFAULT, "Experimental", "", }, + { "-post_process", "Enable post processing", true, 0, EASY_DEFAULT, "Experimental", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-post_process" }, { "-fps", "Show frames per second on HUD", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-fps", }, { "-pos", "Show position of camera", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-pos", }, { "-window", "Run in window", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-window", }, - { "-fullscreen_window", "Run in fullscreen window", false, 0, 0, "Dev Tool", "", }, - { "-res", "Run at specified resolution", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-res", }, + { "-fullscreen_window", "Run in fullscreen window", false, 0, EASY_DEFAULT, "Dev Tool", "", }, { "-timerbar", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-timerbar", }, { "-stats", "Show statistics", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-stats", }, - { "-coords", "Show coordinates", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-coords", }, + { "-coords", "Show coordinates", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-coords", }, { "-show_mem_usage", "Show memory usage", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-show_mem_usage", }, { "-pofspew", "", false, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-pofspew", }, { "-tablecrcs", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-tablecrcs", }, { "-missioncrcs", "", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-missioncrcs", }, { "-dis_collisions", "Disable collisions", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dis_collisions", }, - { "-dis_weapons", "Disable weapon rendering", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dis_weapons", }, + { "-dis_weapons", "Disable weapon rendering", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-dis_weapons", }, { "-output_sexps", "Outputs SEXPs to sexps.html", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-output_sexps", }, { "-output_scripting", "Outputs scripting to scripting.html", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-output_scripting", }, { "-save_render_target", "Save render targets to file", true, 0, EASY_DEFAULT, "Dev Tool", "", }, - { "-debug_window", "Display debug window", true, 0, EASY_DEFAULT, "Dev Tool", "", }, + { "-debug_window", "Display debug window", true, 0, EASY_DEFAULT, "Dev Tool", "", }, { "-verify_vps", "Spew VP crcs to vp_crcs.txt", true, 0, EASY_DEFAULT, "Dev Tool", "", }, #ifdef SCP_UNIX { "-nograb", "Don't grab mouse/keyboard in a window", true, 0, EASY_DEFAULT, "Dev Tool", "http://www.hard-light.net/wiki/index.php/Command-Line_Reference#-nograb", }, @@ -334,12 +333,8 @@ int Cmdline_voice_recognition = 0; // MOD related cmdline_parm mod_arg("-mod", NULL, true); // Cmdline_mod -- DTP modsupport -cmdline_parm tbp("-tbp", NULL); // Cmdline_tbp -- TBP warp effects -Et1 -cmdline_parm wcsaga("-wcsaga", NULL); // Cmdline_wcsaga char *Cmdline_mod = NULL; //DTP for mod arguement -int Cmdline_tbp = 0; -int Cmdline_wcsaga = 0; // Multiplayer/Network related cmdline_parm almission_arg("-almission", NULL); // Cmdline_almission -- DTP for autoload Multi mission @@ -369,6 +364,7 @@ cmdline_parm no_fbo_arg("-disable_fbo", NULL); // Cmdline_no_fbo cmdline_parm noglsl_arg("-no_glsl", NULL); // Cmdline_noglsl -- disable GLSL support in OpenGL cmdline_parm atiswap_arg("-ati_swap", NULL); // Cmdline_atiswap - Fix ATI color swap issue for screenshots. cmdline_parm no3dsound_arg("-no_3d_sound", NULL); // Cmdline_no_3d_sound - Disable use of full 3D sounds +cmdline_parm no3dsound_arg("-no_3d_sound", NULL); // Cmdline_no_3d_sound - Disable use of full 3D sounds int Cmdline_d3d_lesstmem = 0; int Cmdline_load_all_weapons = 0; @@ -389,6 +385,7 @@ cmdline_parm dis_collisions("-dis_collisions", NULL); // Cmdline_dis_collisions cmdline_parm dis_weapons("-dis_weapons", NULL); // Cmdline_dis_weapons cmdline_parm noparseerrors_arg("-noparseerrors", NULL); // Cmdline_noparseerrors -- turns off parsing errors -C cmdline_parm nowarn_arg("-no_warn", NULL); // Cmdline_nowarn +cmdline_parm extra_warn_arg("-extra_warn", NULL); // Cmdline_extra_warn cmdline_parm fps_arg("-fps", NULL); // Cmdline_show_fps cmdline_parm show_mem_usage_arg("-show_mem_usage", NULL); // Cmdline_show_mem_usage cmdline_parm pos_arg("-pos", NULL); // Cmdline_show_pos @@ -409,6 +406,7 @@ int Cmdline_dis_collisions = 0; int Cmdline_dis_weapons = 0; int Cmdline_noparseerrors = 0; int Cmdline_nowarn = 0; // turn warnings off in FRED +int Cmdline_extra_warn = 0; int Cmdline_show_mem_usage = 0; int Cmdline_show_pos = 0; int Cmdline_show_stats = 0; @@ -506,7 +504,7 @@ void parm_stuff_args(cmdline_parm *parm, char *cmdline) cmdline += strlen(parm->name); - while ((*cmdline != '\0') && strncmp(cmdline, " -", 2)) { + while ((*cmdline != '\0') && strncmp(cmdline, " -", 2) && ((size_t)(dest-buffer) < sizeof(buffer))) { *dest++ = *cmdline++; } @@ -525,12 +523,15 @@ void parm_stuff_args(cmdline_parm *parm, char *cmdline) parm->args = NULL; } - int size = strlen(buffer) + 1; - - if (saved_args != NULL) - size += (strlen(saved_args) + 1); // an ',' is used as a separator when combining, so be sure to account for it + int size = strlen(buffer); if (size > 0) { + size++; // nul char + + if (saved_args != NULL) { + size += (strlen(saved_args) + 1); // an ',' is used as a separator when combining, so be sure to account for it + } + parm->args = new char[size]; memset(parm->args, 0, size); @@ -541,13 +542,14 @@ void parm_stuff_args(cmdline_parm *parm, char *cmdline) strcat_s(parm->args, size, ","); // now the new arg strcat_s(parm->args, size, buffer); + + delete [] saved_args; } else { strcpy_s(parm->args, size, buffer); } + } else { + parm->args = saved_args; } - - if (saved_args != NULL) - delete[] saved_args; } @@ -702,9 +704,12 @@ void os_init_cmdline(char *cmdline) // if the file exists, get a single line, and deal with it if ( fp ) { - char buf[1024], *p; + char *buf, *p; - fgets(buf, 1024, fp); + size_t len = filelength( fileno(fp) ) + 2; + buf = new char [len]; + + fgets(buf, len-1, fp); // replace the newline character with a NULL if ( (p = strrchr(buf, '\n')) != NULL ) { @@ -713,11 +718,12 @@ void os_init_cmdline(char *cmdline) #ifdef SCP_UNIX // append a space for the os_parse_parms() check - strcat_s(buf, " "); + strcat_s(buf, len, " "); #endif os_parse_parms(buf); os_validate_parms(buf); + delete [] buf; fclose(fp); } @@ -736,9 +742,12 @@ void os_init_cmdline(char *cmdline) // if the file exists, get a single line, and deal with it if ( fp ) { - char buf[1024], *p; + char *buf, *p; - fgets(buf, 1024, fp); + size_t len = filelength( fileno(fp) ) + 2; + buf = new char [len]; + + fgets(buf, len-1, fp); // replace the newline character with a NULL if ( (p = strrchr(buf, '\n')) != NULL ) { @@ -746,10 +755,11 @@ void os_init_cmdline(char *cmdline) } // append a space for the os_parse_parms() check - strcat_s(buf, " "); + strcat_s(buf, len, " "); os_parse_parms(buf); os_validate_parms(buf); + delete [] buf; fclose(fp); } #endif @@ -792,6 +802,21 @@ cmdline_parm::~cmdline_parm() #endif } +// checks if the objects args variable is valid +// returns true if it is, shows an error box and returns false if not valid. +bool cmdline_parm::check_if_args_is_valid() { + if ( args == NULL ) { + Error(__FILE__, __LINE__, + "Command line flag passed that requires an argument, but the argument is missing!\r\n" + "The flag is '%s', make sure that you have an argument that follows it.\r\n" + "You may need to close your launcher and remove the flag manually from %s/data/cmdline_fso.cfg\r\n", + name, ""); + return false; + } else { + return true; + } +} + // returns - true if the parameter exists on the command line, otherwise false int cmdline_parm::found() @@ -802,7 +827,8 @@ int cmdline_parm::found() // returns - the interger representation for the parameter arguement int cmdline_parm::get_int() { - Assert(args); + check_if_args_is_valid(); + int offset = 0; if (stacks) { @@ -825,7 +851,8 @@ int cmdline_parm::get_int() // returns - the float representation for the parameter arguement float cmdline_parm::get_float() { - Assert(args!=NULL); + check_if_args_is_valid(); + int offset = 0; if (stacks) { @@ -848,7 +875,8 @@ float cmdline_parm::get_float() // returns - the string value for the parameter arguement char *cmdline_parm::str() { - Assert(args); + check_if_args_is_valid(); + return args; } @@ -883,6 +911,11 @@ bool SetCmdlineParams() Cmdline_FRED2_htl = 1; }*/ + if (extra_warn_arg.found()) + { + Cmdline_extra_warn = 1; + } + if (timerbar_arg.found()) { Cmdline_timerbar = 1; } @@ -1129,7 +1162,12 @@ bool SetCmdlineParams() } if ( fov_arg.found() ) { - VIEWER_ZOOM_DEFAULT = Cmdline_fov = fov_arg.get_float(); + Cmdline_fov = fov_arg.get_float(); + if (Cmdline_fov > 0.1) { + VIEWER_ZOOM_DEFAULT = Cmdline_fov; + } else { + VIEWER_ZOOM_DEFAULT = Cmdline_fov = 0.75f; + } } if( clip_dist_arg.found() ) { @@ -1141,16 +1179,6 @@ bool SetCmdlineParams() Cmdline_orb_radar = 1; } - // TBP warp effects -Et1 - // Chief1983 - Add 3d shockwave, ship choice 3d and weapon choice 3d if TBP is checked - if( tbp.found() ) - { - Cmdline_tbp = 1; - Cmdline_enable_3d_shockwave = 1; - Cmdline_ship_choice_3d = 1; - Cmdline_weapon_choice_3d = 1; - } - if ( use_3dwarp.found() ) { Cmdline_3dwarp = 1; } @@ -1282,11 +1310,11 @@ bool SetCmdlineParams() ubyte build_caps = 0; /* portej05 defined this always */ - build_caps |= BUILD_CAP_NO_D3D; build_caps |= BUILD_CAP_OPENAL; build_caps |= BUILD_CAP_NO_D3D; build_caps |= BUILD_CAP_NEW_SND; + fwrite(&build_caps, 1, 1, fp); } @@ -1330,11 +1358,6 @@ bool SetCmdlineParams() Cmdline_ballistic_gauge = 1; } - if (wcsaga.found()) - { - Cmdline_wcsaga = 1; - } - if ( cache_bitmaps_arg.found() ) { Cmdline_cache_bitmaps = 1; } @@ -1450,4 +1473,4 @@ int parse_cmdline(char *cmdline) // If you're looking for the list of if (someparam.found()) { cmdline_someparam = something; } look above at this function // I did this because of fred2_parse_cmdline() return SetCmdlineParams(); -} \ No newline at end of file +} diff --git a/code/cmdline/cmdline.h b/code/cmdline/cmdline.h index 71a14ffd0d..084d0af6cb 100644 --- a/code/cmdline/cmdline.h +++ b/code/cmdline/cmdline.h @@ -104,9 +104,6 @@ extern int Cmdline_voice_recognition; // MOD related extern char *Cmdline_mod; // DTP for mod support -extern int Cmdline_tbp; -extern int Cmdline_wcsaga; - // Multiplayer/Network related extern char *Cmdline_almission; // DTP for autoload mission (for multi only) extern int Cmdline_ingamejoin; @@ -135,6 +132,7 @@ extern int Cmdline_dis_collisions; extern int Cmdline_dis_weapons; extern int Cmdline_noparseerrors; extern int Cmdline_nowarn; +extern int Cmdline_extra_warn; extern int Cmdline_show_mem_usage; extern int Cmdline_show_pos; extern int Cmdline_show_stats; diff --git a/code/cutscene/cutscenes.cpp b/code/cutscene/cutscenes.cpp index 996d7246b4..fac61e3fe0 100644 --- a/code/cutscene/cutscenes.cpp +++ b/code/cutscene/cutscenes.cpp @@ -35,7 +35,6 @@ char *Cutscene_mask_name[GR_NUM_RESOLUTIONS] = { "2_ViewFootage-m" }; -size_t Num_cutscenes; int Cutscenes_viewable; int Description_index; SCP_vector Cutscenes; @@ -43,7 +42,7 @@ SCP_vector Cutscenes; //extern int All_movies_enabled; // If set, all movies may be viewed. Keyed off cheat code. void cutscene_close() { - for(size_t i = 0; i < Num_cutscenes; i++) + for(size_t i = 0; i < Cutscenes.size(); i++) { if(Cutscenes[i].description) { @@ -73,7 +72,7 @@ void cutscene_init() reset_parse(); // parse in all the cutscenes - Num_cutscenes = 0; + Cutscenes.clear(); skip_to_string("#Cutscenes"); ignore_white_space(); @@ -97,7 +96,6 @@ void cutscene_init() stuff_int( &cutinfo.cd ); Cutscenes.push_back(cutinfo); - Num_cutscenes++; } required_string("#End"); @@ -115,9 +113,8 @@ int cutscenes_get_cd_num( char *filename ) #if defined(OEM_BUILD) return 0; // only 1 cd for OEM #else - size_t i; - for (i = 0; i < Num_cutscenes; i++ ) { + for (size_t i = 0; i < Cutscenes.size(); i++ ) { if ( !stricmp(Cutscenes[i].filename, filename) ) { return (Cutscenes[i].cd - 1); } @@ -130,7 +127,6 @@ int cutscenes_get_cd_num( char *filename ) // marks a cutscene as viewable void cutscene_mark_viewable(char *filename) { - size_t i; char cut_file[MAX_FILENAME_LEN]; char file[MAX_FILENAME_LEN]; @@ -146,7 +142,7 @@ void cutscene_mark_viewable(char *filename) // change to lower case strlwr(file); - for (i = 0; i < Num_cutscenes; i++ ) { + for (size_t i = 0; i < Cutscenes.size(); i++ ) { // change the cutscene file name to lower case strcpy_s(cut_file, Cutscenes[i].filename); strlwr(cut_file); @@ -468,7 +464,6 @@ int cutscenes_screen_button_pressed(int n) void cutscenes_screen_init() { int i; - size_t j; ui_button_info *b; Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); @@ -514,7 +509,7 @@ void cutscenes_screen_init() Num_files = 0; Cutscene_list.clear(); - for ( j = 0; j < Num_cutscenes; j++ ) { + for (size_t j = 0; j < Cutscenes.size(); j++ ) { if ( Cutscenes_viewable & (1< Cutscenes; -extern size_t Num_cutscenes; extern int Cutscenes_viewable; // initializa table data diff --git a/code/fireball/fireballs.h b/code/fireball/fireballs.h index 3ef8e5002d..d2967f7627 100644 --- a/code/fireball/fireballs.h +++ b/code/fireball/fireballs.h @@ -36,6 +36,7 @@ struct ship_info; #define FIREBALL_NUM_LARGE_EXPLOSIONS 2 extern int fireball_used[MAX_FIREBALL_TYPES]; +extern int Num_fireball_types; // all this moved here by Goober5000 because it makes more sense in the H file typedef struct fireball_lod { diff --git a/code/fred2/AltShipClassDlg.cpp b/code/fred2/AltShipClassDlg.cpp index 85a5daafae..0dd3fd4c6b 100644 --- a/code/fred2/AltShipClassDlg.cpp +++ b/code/fred2/AltShipClassDlg.cpp @@ -87,7 +87,6 @@ BOOL AltShipClassDlg::OnInitDialog() while (objp != END_OF_LIST(&obj_used_list)) { if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) { if (objp->flags & OF_MARKED) { - m_selected_ships[num_selected_ships++] = objp->instance; } } @@ -96,6 +95,7 @@ BOOL AltShipClassDlg::OnInitDialog() Assert (num_selected_ships > 0); Assert (Objects[cur_object_index].flags & OF_MARKED); + if (num_selected_ships > 1) { multi_edit = true; diff --git a/code/fred2/fred.cpp b/code/fred2/fred.cpp index 2b7979e445..9c848b88c4 100644 --- a/code/fred2/fred.cpp +++ b/code/fred2/fred.cpp @@ -28,6 +28,8 @@ #include "debugconsole/dbugfile.h" #include "globalincs/mspdb_callstack.h" +#include "AFXADV.H" + #ifdef NDEBUG #ifndef FRED #error macro FRED is not defined when trying to build release Fred. Please define FRED macro in build settings in all Fred projects @@ -80,12 +82,12 @@ window_data Mission_notes_wnd_data; BEGIN_MESSAGE_MAP(CFREDApp, CWinApp) //{{AFX_MSG_MAP(CFREDApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) + ON_COMMAND(ID_FILE_OPEN, OnFileOpen) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) - ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() @@ -236,9 +238,23 @@ BOOL CFREDApp::InitInstance() *str_end = '\0'; + // Goober5000 - figure out where the FRED file dialog should go + if ((m_pRecentFileList != NULL) && (m_pRecentFileList->GetSize() > 0)) + { + // use the most recently opened file to supply the default folder + m_sInitialDir = m_pRecentFileList->operator[](0); // lol syntax + } + else + { + // use FRED's own directory to search for missions + m_sInitialDir = Fred_base_dir; + m_sInitialDir += "\\data\\missions"; + } + + // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; - ParseCommandLine(cmdInfo); + ParseCommandLine(cmdInfo); m_nCmdShow = Main_wnd_data.p.showCmd; @@ -309,6 +325,25 @@ void CFREDApp::OnAppAbout() aboutDlg.DoModal(); } +// G5K - from http://www.experts-exchange.com/Programming/System/Windows__Programming/MFC/Q_20155824.html +void CFREDApp::OnFileOpen() +{ + // use the initial dir the first time we prompt for a file + // name. after a successful open, the file name will be + // changed to be the empty string and the default dir + // will be supplied by the CFileDialog internal memory + if(!DoPromptFileName(m_sInitialDir, AFX_IDS_OPENFILE, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL)) + { + // open cancelled + return; + } + AfxGetApp()->OpenDocumentFile(m_sInitialDir); + // if returns NULL, the user has already been alerted + + // now erase the initial dir since we only want to use it once + m_sInitialDir.Empty(); +} + ///////////////////////////////////////////////////////////////////////////// // CFREDApp commands @@ -668,3 +703,7 @@ int CFREDApp::ExitInstance() return CWinApp::ExitInstance(); } + +// Empty functions to make fred link with the sexp_mission_set_subspace +void game_start_subspace_ambient_sound() {} +void game_stop_subspace_ambient_sound() {} diff --git a/code/fred2/fred.h b/code/fred2/fred.h index de2bb2fa78..971c881723 100644 --- a/code/fred2/fred.h +++ b/code/fred2/fred.h @@ -52,6 +52,7 @@ typedef struct window_data { class CFREDApp : public CWinApp { int app_init; + CString m_sInitialDir; public: void record_window_data(window_data *wndd, CWnd *wnd); @@ -75,6 +76,7 @@ public: //{{AFX_MSG(CFREDApp) afx_msg void OnAppAbout(); + afx_msg void OnFileOpen(); // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG diff --git a/code/fred2/fred.rc b/code/fred2/fred.rc index 6549505d12..aaf8c89b81 100644 --- a/code/fred2/fred.rc +++ b/code/fred2/fred.rc @@ -878,10 +878,10 @@ BEGIN IDC_STATIC,60,183,307,11 END -IDD_MISSION_NOTES DIALOGEX 0, 0, 479, 349 +IDD_MISSION_NOTES DIALOG DISCARDABLE 0, 0, 479, 349 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Mission Specs" -FONT 8, "MS Sans Serif", 0, 0, 0x1 +FONT 8, "MS Sans Serif" BEGIN RTEXT "Title",IDC_STATIC,7,10,29,8 EDITTEXT IDC_MISSION_TITLE,41,7,109,14,ES_AUTOHSCROLL @@ -1003,6 +1003,8 @@ BEGIN CONTROL "",IDC_MAX_RESPAWN_DELAY_SPIN,"msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,136,112,11,14 + PUSHBUTTON "Sound Environment",IDC_SOUND_ENVIRONMENT_BUTTON,158,244, + 140,15 END IDD_PREFERENCES DIALOG DISCARDABLE 0, 0, 333, 81 @@ -1552,8 +1554,8 @@ BEGIN EDITTEXT IDC_CHAIN_DELAY,210,255,45,14,ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_OBJ_TEXT,86,246,117,14,ES_AUTOHSCROLL EDITTEXT IDC_OBJ_KEY_TEXT,86,262,117,14,ES_AUTOHSCROLL - EDITTEXT IDC_HELP_BOX,7,298,423,126,ES_MULTILINE | ES_READONLY, - WS_EX_TRANSPARENT + EDITTEXT IDC_HELP_BOX,7,298,423,126,ES_MULTILINE | ES_AUTOVSCROLL | + ES_READONLY | WS_VSCROLL,WS_EX_TRANSPARENT PUSHBUTTON "New Msg",IDC_NEW_MSG,229,59,50,14,0,WS_EX_STATICEDGE PUSHBUTTON "Delete Msg",IDC_DELETE_MSG,229,77,50,14,0, WS_EX_STATICEDGE @@ -2270,8 +2272,8 @@ BEGIN BS_3STATE | WS_TABSTOP,165,17,85,10 CONTROL "Affected By Gravity",IDC_AFFECTED_BY_GRAVITY,"Button", BS_3STATE | WS_TABSTOP,165,27,77,10 - CONTROL "Special Warpin",IDC_SPECIAL_WARPIN,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,165,37,59,10 + CONTROL "Special Warpin",IDC_SPECIAL_WARPIN,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,165,37,59,10 CONTROL "Targetable as Bomb",IDC_TARGETABLE_AS_BOMB,"Button", BS_3STATE | WS_TABSTOP,165,47,79,10 CONTROL "Disable Built-in Messages",IDC_DISABLE_BUILTIN_SHIP, @@ -2398,19 +2400,21 @@ BEGIN CBS_SORT | WS_VSCROLL | WS_TABSTOP END -IDD_SPECIAL_HITPOINTS DIALOG DISCARDABLE 0, 0, 234, 57 +IDD_SPECIAL_HITPOINTS DIALOG DISCARDABLE 0, 0, 234, 85 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Special Hitpoints" FONT 8, "MS Sans Serif" BEGIN CONTROL "Enable Special Hitpoints",IDC_ENABLE_SPECIAL_HITPOINTS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,93,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,37,93,10 EDITTEXT IDC_SPECIAL_SHIELDS,91,19,62,12,ES_AUTOHSCROLL - LTEXT "Shields:",-1,61,23,26,8 - EDITTEXT IDC_SPECIAL_HULL,91,33,62,12,ES_AUTOHSCROLL - LTEXT "Hull:",-1,72,36,15,8 + LTEXT "Shields:",-1,62,23,26,8 + EDITTEXT IDC_SPECIAL_HULL,91,52,62,12,ES_AUTOHSCROLL + LTEXT "Hull:",-1,73,55,15,8 DEFPUSHBUTTON "OK",ID_OK,177,7,50,14 PUSHBUTTON "Cancel",ID_CANCEL,177,24,50,14 + CONTROL "Enable Special Shield Points",IDC_ENABLE_SPECIAL_SHIELD, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,106,10 END IDD_SET_GLOBAL_SHIP_FLAGS DIALOG DISCARDABLE 0, 0, 114, 79 @@ -2552,6 +2556,32 @@ BEGIN WS_VSCROLL | WS_TABSTOP END +IDD_SOUND_ENVIRONMENT DIALOGEX 0, 0, 315, 89 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sound Environment" +FONT 8, "MS Sans Serif" +BEGIN + COMBOBOX IDC_SOUND_ENVIRONMENT,75,9,117,30,CBS_DROPDOWN | + WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_SOUND_ENVIRONMENT_VOLUME,75,31,76,12,ES_AUTOHSCROLL + EDITTEXT IDC_SOUND_ENVIRONMENT_DAMPING,75,48,76,12,ES_AUTOHSCROLL + EDITTEXT IDC_SOUND_ENVIRONMENT_DECAY,75,64,76,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,258,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,258,24,50,14 + LTEXT "Environment:",IDC_SOUND_ENVIRONMENT_LABEL,28,13,42,8 + LTEXT "Volume:",IDC_SOUND_ENVIRONMENT_VOLUME_LABEL,42,35,26,8 + LTEXT "Damping:",IDC_SOUND_ENVIRONENT_DAMPING_LABEL,37,52,31,8 + LTEXT "Decay Time:",IDC_SOUND_ENVIRONMENT_DECAY_LABEL,27,68,41, + 8 + LTEXT "range: 0.0 .. 1.0",IDC_STATIC,157,32,55,8,WS_DISABLED + LTEXT "range: 0.1 .. 2.0",IDC_STATIC,157,50,55,8,WS_DISABLED + LTEXT "range: 0.1 .. 20.0",IDC_STATIC,157,66,62,11,WS_DISABLED + GROUPBOX "Preview",IDC_SOUND_ENVIRONMENT_TEST,229,50,79,32 + PUSHBUTTON "Browse",IDC_BROWSE_WAVE,258,62,44,15 + PUSHBUTTON "IDB_PLAY",IDC_PLAY,235,62,17,15,BS_BITMAP, + WS_EX_TRANSPARENT +END + #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// @@ -2973,6 +3003,17 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 59 END + + IDD_SOUND_ENVIRONMENT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 308 + VERTGUIDE, 70 + VERTGUIDE, 151 + VERTGUIDE, 157 + TOPMARGIN, 7 + BOTTOMMARGIN, 82 + END END #endif // APSTUDIO_INVOKED diff --git a/code/fred2/management.cpp b/code/fred2/management.cpp index 915ec86338..5bd0f0311c 100644 --- a/code/fred2/management.cpp +++ b/code/fred2/management.cpp @@ -324,8 +324,10 @@ bool fred_init() timer_init(); - Assert(strlen(Fred_exe_dir) > 0); + Assert(strlen(Fred_base_dir) > 0); + // sigh... this should enable proper reading of cmdline_fso.cfg - Goober5000 + cfile_chdir(Fred_base_dir); // this should enable mods - Kazan fred2_parse_cmdline(__argc, __argv); @@ -379,7 +381,7 @@ bool fred_init() } */ - snd_init(0, 44100); + snd_init(); // Not ready for this yet // Cmdline_nospec = 1; @@ -563,6 +565,7 @@ int create_ship(matrix *orient, vec3d *pos, int ship_type) resolve_parse_flags(&Objects[obj], Iff_info[shipp->team].default_parse_flags, Iff_info[shipp->team].default_parse_flags2); // default shield setting + shipp->special_shield = -1; z1 = Shield_sys_teams[shipp->team]; z2 = Shield_sys_types[ship_type]; if (((z1 == 1) && z2) || (z2 == 1)) @@ -601,9 +604,9 @@ int create_ship(matrix *orient, vec3d *pos, int ship_type) } // calc kamikaze stuff - if (shipp->special_hitpoint_index != -1) + if (shipp->use_special_explosion) { - temp_max_hull_strength = (float) atoi(Sexp_variables[shipp->special_hitpoint_index+HULL_STRENGTH].text); + temp_max_hull_strength = (float)shipp->special_exp_blast; } else { @@ -1089,6 +1092,9 @@ void clear_mission() strcpy_s(The_mission.skybox_model, ""); strcpy_s(The_mission.envmap_name, ""); + // no sound environment + The_mission.sound_environment.id = -1; + ENVMAP = -1; set_modified(FALSE); @@ -2518,7 +2524,7 @@ void generate_weaponry_usage_list(int *arr, int wing) j = swp->num_secondary_banks; while (j--) { if (swp->secondary_bank_weapons[j] >=0 && swp->secondary_bank_weapons[j] < MAX_WEAPON_TYPES) { - arr[swp->secondary_bank_weapons[j]] += int(ceil(swp->secondary_bank_ammo[j] * swp->secondary_bank_capacity[j] / 100 / (Weapon_info[swp->secondary_bank_weapons[j]].cargo_size + 0.5f))); + arr[swp->secondary_bank_weapons[j]] += (int) floor((swp->secondary_bank_ammo[j] * swp->secondary_bank_capacity[j] / 100.0f / Weapon_info[swp->secondary_bank_weapons[j]].cargo_size) + 0.5f); } } } diff --git a/code/fred2/missionnotesdlg.cpp b/code/fred2/missionnotesdlg.cpp index 7553ad1daa..1418cb6a40 100644 --- a/code/fred2/missionnotesdlg.cpp +++ b/code/fred2/missionnotesdlg.cpp @@ -14,6 +14,7 @@ #include "FREDDoc.h" #include "MissionNotesDlg.h" #include "CustomWingNames.h" +#include "soundenvironmentdlg.h" #include "Management.h" #include "gamesnd/eventmusic.h" #include "cfile/cfile.h" @@ -143,6 +144,7 @@ BEGIN_MESSAGE_MAP(CMissionNotesDlg, CDialog) ON_BN_CLICKED(IDC_LOADING_SCREEN_BUTTON1024, OnLoad1024) ON_BN_CLICKED(IDC_CONTRAIL_THRESHOLD_CHECK, OnToggleContrailThreshold) ON_BN_CLICKED(IDC_CUSTOM_WING_NAMES, OnCustomWingNames) + ON_BN_CLICKED(IDC_SOUND_ENVIRONMENT_BUTTON, OnSoundEnvironment) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -725,3 +727,13 @@ void CMissionNotesDlg::OnCustomWingNames() UpdateData(FALSE); } + +void CMissionNotesDlg::OnSoundEnvironment() +{ + UpdateData(TRUE); + + SoundEnvironment dlg; + dlg.DoModal(); + + UpdateData(FALSE); +} diff --git a/code/fred2/missionnotesdlg.h b/code/fred2/missionnotesdlg.h index 368c419f24..ababf42780 100644 --- a/code/fred2/missionnotesdlg.h +++ b/code/fred2/missionnotesdlg.h @@ -98,6 +98,7 @@ protected: afx_msg void OnLoad1024(); afx_msg void OnToggleContrailThreshold(); afx_msg void OnCustomWingNames(); + afx_msg void OnSoundEnvironment(); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: diff --git a/code/fred2/missionsave.cpp b/code/fred2/missionsave.cpp index f84cf4a857..9d09f3c323 100644 --- a/code/fred2/missionsave.cpp +++ b/code/fred2/missionsave.cpp @@ -44,6 +44,8 @@ #include "iff_defs/iff_defs.h" #include "missionui/fictionviewer.h" #include "globalincs/version.h" +#include "sound/sound.h" +#include "sound/ds.h" void CFred_mission_save::convert_special_tags_to_retail(char *text, int max_len) @@ -589,6 +591,30 @@ int CFred_mission_save::save_mission_info() fso_comment_pop(); } + // sound environment (EFX/EAX) - taylor + sound_env *m_env = &The_mission.sound_environment; + if ( (m_env->id >= 0) && (m_env->id < (int)EFX_presets.size()) ) { + EFXREVERBPROPERTIES *prop = &EFX_presets[m_env->id]; + + fso_comment_push(";;FSO 3.6.12;;"); + + fout_version("\n\n$Sound Environment: %s", prop->name.c_str()); + + if (m_env->volume != prop->flGain) { + fout_version("\n+Volume: %f", m_env->volume); + } + + if (m_env->damping != prop->flDecayHFRatio) { + fout_version("\n+Damping: %f", m_env->damping); + } + + if (m_env->decay != prop->flDecayTime) { + fout_version("\n+Decay Time: %f", m_env->decay); + } + + fso_comment_pop(); + } + return err; } @@ -1035,13 +1061,18 @@ int CFred_mission_save::save_variables() char string[] = "string"; char block[] = "block"; int i; + int num_block_vars = 0; // sort sexp_variables sexp_variable_sort(); // get count int num_variables = sexp_variable_count(); - int num_block_vars = sexp_variable_block_count(); + + if (Format_fs2_open == FSO_FORMAT_RETAIL) { + generate_special_explosion_block_variables(); + num_block_vars = num_block_variables(); + } int total_variables = num_variables + num_block_vars; if (total_variables > 0) { @@ -1087,7 +1118,7 @@ int CFred_mission_save::save_variables() for (i=MAX_SEXP_VARIABLES-num_block_vars; i 0)) { + optional_string_fred("+Special Exp Shockwave Speed:"); + parse_comments(); + fout(" %d", Ships[i].special_exp_shockwave_speed); + } + else { + bypass_comment(";;FSO 3.6.13;; +Special Exp Shockwave Speed:"); + } + } + else { + fso_comment_push(";;FSO 3.6.13;;"); + fout_version("\n$Special Explosion:"); + + fout_version("\n+Special Exp Damage:"); + fout(" %d", Ships[i].special_exp_damage); + + fout_version("\n+Special Exp Blast:"); + fout(" %d", Ships[i].special_exp_blast); + + fout_version("\n+Special Exp Inner Radius:"); + fout(" %d", Ships[i].special_exp_inner); + + fout_version("\n+Special Exp Outer Radius:"); + fout(" %d", Ships[i].special_exp_outer); + + if (Ships[i].use_shockwave && (Ships[i].special_exp_shockwave_speed > 0)) { + fout_version("\n+Special Exp Shockwave Speed:"); + fout(" %d", Ships[i].special_exp_shockwave_speed); + } + + fso_comment_pop(); + } + } + else { + bypass_comment(";;FSO 3.6.13;; +Special Exp Shockwave Speed:"); + } + } + // retail format special explosions + else { + if (Ships[i].use_special_explosion) { + int special_exp_index; + + if (has_special_explosion_block_index(&Ships[i], &special_exp_index)) { + fout("\n+Special Exp index:"); + fout(" %d", special_exp_index); + } + else { + CString text = "You are saving in the retail mission format, but "; + text += "the mission has too many special explosions defined. \""; + text += Ships[i].ship_name; + text += "\" has therefore lost any special explosion data that was defined for it. "; + text += "\" Either remove special explosions or SEXP variables if you need it to have one "; + MessageBox(NULL, text, "Too many variables!", MB_OK); + + } + } } // Goober5000 ------------------------------------------------ if (Format_fs2_open != FSO_FORMAT_RETAIL) { - if (Ships[i].special_hitpoint_index != -1) { - if (optional_string_fred("+Special Hitpoint index:", "$Name:")) { + if (Ships[i].special_hitpoints) { + if (optional_string_fred("+Special Hitpoints:", "$Name:")) { parse_comments(); } else { - fout("\n+Special Hitpoint index:"); + fso_comment_push(";;FSO 3.6.13;;"); + fout_version("\n+Special Hitpoints:"); + fso_comment_pop(); } - fout(" %d", Ships[i].special_hitpoint_index); + fout(" %d", Ships[i].special_hitpoints); + } + else { + bypass_comment(";;FSO 3.6.13;; +Special Hitpoints:"); + } + + if (Ships[i].special_shield >= 0) { + if (optional_string_fred("+Special Shield Points:", "$Name:")) { + parse_comments(); + } else { + fso_comment_push(";;FSO 3.6.13;;"); + fout_version("\n+Special Shield Points:"); + fso_comment_pop(); + } + + fout(" %d", Ships[i].special_shield); + } + else { + bypass_comment(";;FSO 3.6.13;; +Special Shield Points:"); } } // ----------------------------------------------------------- @@ -1864,9 +1985,9 @@ int CFred_mission_save::save_common_object_data(object *objp, ship *shipp) } // Goober5000 - if (Format_fs2_open != FSO_FORMAT_RETAIL && (shipp->special_hitpoint_index != -1)) + if (Format_fs2_open != FSO_FORMAT_RETAIL && (shipp->special_hitpoints)) { - temp_max_hull_strength = (float) atoi(Sexp_variables[shipp->special_hitpoint_index+HULL_STRENGTH].text); + temp_max_hull_strength = (float)shipp->special_hitpoints; } else { diff --git a/code/fred2/resource.h b/code/fred2/resource.h index 2139b1a68c..e7c95e812c 100644 --- a/code/fred2/resource.h +++ b/code/fred2/resource.h @@ -123,6 +123,7 @@ #define IDB_DATA_90 314 #define IDB_DATA_95 315 #define IDD_FICTION_VIEWER 318 +#define IDD_SOUND_ENVIRONMENT 319 #define IDC_SHIP_CLASS 1003 #define IDC_SHIP_WING 1004 #define IDC_SOUND_CLIP_NAME 1007 @@ -531,6 +532,7 @@ #define IDC_ASCT1_CLASS_COMBO1 1188 #define IDC_SHIP_VARIABLES_COMBO 1188 #define IDC_SUFFIX 1188 +#define IDC_SOUND_ENVIRONMENT 1188 #define IDC_CREATED 1189 #define IDC_DEPARTURE_TARGET 1189 #define IDC_SBITMAP 1189 @@ -777,6 +779,7 @@ #define IDC_SPECIAL_INNER_RAD 1343 #define IDC_SQUAD_LOGO 1343 #define IDC_SQUADRON_WING_NAME_1 1343 +#define IDC_SOUND_ENVIRONMENT_DAMPING 1343 #define IDC_EDIT3 1344 #define IDC_AMMO3 1344 #define IDC_TIME 1344 @@ -790,6 +793,7 @@ #define IDC_ABBREV_CAMPAIGN 1344 #define IDC_TVT_WING_NAME_1 1344 #define IDC_ASSIST_SCORE 1344 +#define IDC_SOUND_ENVIRONMENT_VOLUME 1344 #define IDC_EDIT4 1345 #define IDC_AMMO4 1345 #define IDC_VOICE 1345 @@ -1048,6 +1052,7 @@ #define IDC_SPECIAL_SHIELDS 1555 #define IDC_SPECIAL_HULL 1556 #define IDC_LOADING_SCREEN_BUTTON1024 1557 +#define IDC_ENABLE_SPECIAL_SHIELD 1557 #define IDC_LOADING_SCREEN640 1558 #define IDC_TYPE_CAMPAIGN_PERSISTENT 1559 #define IDC_MAX_HULL_REPAIR_VAL 1559 @@ -1127,6 +1132,13 @@ #define IDC_STORY_FILE 1618 #define IDC_FONT_FILE 1619 #define IDC_FICTION_MUSIC 1620 +#define IDC_SOUND_ENVIRONMENT_LABEL 1621 +#define IDC_SOUND_ENVIRONMENT_VOLUME_LABEL 1622 +#define IDC_SOUND_ENVIRONENT_DAMPING_LABEL 1623 +#define IDC_SOUND_ENVIRONMENT_DECAY_LABEL 1624 +#define IDC_SOUND_ENVIRONMENT_DECAY 1625 +#define IDC_SOUND_ENVIRONMENT_BUTTON 1626 +#define IDC_SOUND_ENVIRONMENT_TEST 1627 #define ID_FILE_MISSIONNOTES 32771 #define ID_DUPLICATE 32774 #define ID_VIEW_ROTATE 32775 @@ -1418,9 +1430,9 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 319 +#define _APS_NEXT_RESOURCE_VALUE 320 #define _APS_NEXT_COMMAND_VALUE 33098 -#define _APS_NEXT_CONTROL_VALUE 1621 +#define _APS_NEXT_CONTROL_VALUE 1628 #define _APS_NEXT_SYMED_VALUE 105 #endif #endif diff --git a/code/fred2/sexp_tree.cpp b/code/fred2/sexp_tree.cpp index 7027f2dd8b..ece1dc752a 100644 --- a/code/fred2/sexp_tree.cpp +++ b/code/fred2/sexp_tree.cpp @@ -43,6 +43,7 @@ #include "iff_defs/iff_defs.h" #include "mission/missionmessage.h" #include "graphics/gropenglshader.h" +#include "sound/ds.h" #define TREE_NODE_INCREMENT 100 @@ -867,8 +868,9 @@ void sexp_tree::right_clicked(int mode) case OP_TECH_ADD_INTEL: case OP_TECH_RESET_TO_DEFAULT: #endif*/ - // unlike the above operators, this one is deprecated + // unlike the above operators, these are deprecated case OP_HITS_LEFT_SUBSYSTEM: + case OP_CUTSCENES_SHOW_SUBTITLE: j = Num_op_menus; // don't allow these operators to be visible break; } @@ -904,8 +906,9 @@ void sexp_tree::right_clicked(int mode) case OP_TECH_ADD_INTEL: case OP_TECH_RESET_TO_DEFAULT: #endif*/ - // unlike the above operators, this one is deprecated + // unlike the above operators, these are deprecated case OP_HITS_LEFT_SUBSYSTEM: + case OP_CUTSCENES_SHOW_SUBTITLE: j = Num_submenus; // don't allow these operators to be visible break; } @@ -1145,7 +1148,7 @@ void sexp_tree::right_clicked(int mode) } // modify string or number if (modify_variable) - if ( Operators[op].value == OP_MODIFY_VARIABLE || Operators[op].value == OP_SET_VARIABLE_BY_INDEX ) { + if ( Operators[op].value == OP_MODIFY_VARIABLE ) { int modify_type = get_modify_variable_type(parent); if (modify_type == OPF_NUMBER) { @@ -1154,6 +1157,24 @@ void sexp_tree::right_clicked(int mode) } // no change for string type } + else if ( Operators[op].value == OP_SET_VARIABLE_BY_INDEX ) { + // it depends on which argument we are modifying + // first argument is always a number + if (Replace_count == 0) { + menu.EnableMenuItem(ID_REPLACE_NUMBER, MF_ENABLED); + menu.EnableMenuItem(ID_REPLACE_STRING, MF_GRAYED); + } + // second argument could be anything + else { + int modify_type = get_modify_variable_type(parent); + + if (modify_type == OPF_NUMBER) { + menu.EnableMenuItem(ID_REPLACE_NUMBER, MF_ENABLED); + menu.EnableMenuItem(ID_REPLACE_STRING, MF_GRAYED); + } + // no change for string type + } + } list->destroy(); @@ -2553,6 +2574,9 @@ int sexp_tree::get_default_value(sexp_list_item *item, int op, int i) str = ""; break; + case OPF_FONT: + str = Fonts[0].filename; + default: str = ""; break; @@ -2632,6 +2656,11 @@ int sexp_tree::query_default_argument_available(int op, int i) case OPF_POST_EFFECT: case OPF_TARGET_PRIORITIES: case OPF_ARMOR_TYPES: + case OPF_FONT: + case OPF_HUD_ELEMENT: + case OPF_SOUND_ENVIRONMENT: + case OPF_SOUND_ENVIRONMENT_OPTION: + case OPF_EXPLOSION_OPTION: return 1; case OPF_SHIP: @@ -3136,20 +3165,27 @@ void get_variable_name_from_sexp_tree_node_text(const char *text, char *var_name int sexp_tree::get_modify_variable_type(int parent) { - Assert(parent >= 0); int sexp_var_index = -1; + + Assert(parent >= 0); int op_const = get_operator_const(tree_nodes[parent].text); + Assert(tree_nodes[parent].child >= 0); + char *node_text = tree_nodes[tree_nodes[parent].child].text; + if ( op_const == OP_MODIFY_VARIABLE ) { - Assert(tree_nodes[parent].child >= 0); - sexp_var_index = get_tree_name_to_sexp_variable_index(tree_nodes[tree_nodes[parent].child].text); + sexp_var_index = get_tree_name_to_sexp_variable_index(node_text); Assert(sexp_var_index >= 0); - } else if ( op_const == OP_SET_VARIABLE_BY_INDEX ) { - Assert(tree_nodes[parent].child != -1); - if (can_construe_as_integer(tree_nodes[tree_nodes[parent].child].text)) { - sexp_var_index = atoi(tree_nodes[tree_nodes[parent].child].text); + } + else if ( op_const == OP_SET_VARIABLE_BY_INDEX ) { + if (can_construe_as_integer(node_text)) { + sexp_var_index = atoi(node_text); Assert(sexp_var_index >= 0); } + else if (strchr(node_text, '(') && strchr(node_text, ')')) { + // the variable index is itself a variable! + return OPF_AMBIGUOUS; + } } else { Int3(); // should not be called otherwise } @@ -4318,6 +4354,26 @@ sexp_list_item *sexp_tree::get_listing_opf(int opf, int parent_node, int arg_ind list = get_listing_opf_post_effect(); break; + case OPF_FONT: + list = get_listing_opf_font(); + break; + + case OPF_HUD_ELEMENT: + list = get_listing_opf_hud_elements(); + break; + + case OPF_SOUND_ENVIRONMENT: + list = get_listing_opf_sound_environment(); + break; + + case OPF_SOUND_ENVIRONMENT_OPTION: + list = get_listing_opf_sound_environment_option(); + break; + + case OPF_EXPLOSION_OPTION: + list = get_listing_opf_explosion_option(); + break; + default: Int3(); // unknown OPF code list = NULL; @@ -5116,6 +5172,18 @@ sexp_list_item *sexp_tree::get_listing_opf_persona() return head.next; } +sexp_list_item *sexp_tree::get_listing_opf_font() +{ + int i; + sexp_list_item head; + + for (i = 0; i < Num_fonts; i++) { + head.add_data(Fonts[i].filename); + } + + return head.next; +} + sexp_list_item *sexp_tree::get_listing_opf_who_from() { object *ptr; @@ -5147,6 +5215,40 @@ sexp_list_item *sexp_tree::get_listing_opf_priority() return head.next; } +sexp_list_item *sexp_tree::get_listing_opf_sound_environment() +{ + sexp_list_item head; + + head.add_data(SEXP_NONE_STRING); + for (int i = 0; i < EFX_presets.size(); i++) { + // ugh + char *text = const_cast(EFX_presets[i].name.c_str()); + head.add_data(text); + } + + return head.next; +} + +sexp_list_item *sexp_tree::get_listing_opf_sound_environment_option() +{ + sexp_list_item head; + + for (int i = 0; i < Num_sound_environment_options; i++) + head.add_data(Sound_environment_option[i]); + + return head.next; +} + +sexp_list_item *sexp_tree::get_listing_opf_explosion_option() +{ + sexp_list_item head; + + for (int i = 0; i < Num_explosion_options; i++) + head.add_data(Explosion_option[i]); + + return head.next; +} + sexp_list_item *sexp_tree::get_listing_opf_waypoint_path() { int i; @@ -5567,7 +5669,7 @@ sexp_list_item *sexp_tree::get_listing_opf_nebula_storm_type() sexp_list_item head; int i; - head.add_data("none"); + head.add_data(SEXP_NONE_STRING); for (i=0; i < Num_storm_types; i++) { @@ -5636,6 +5738,14 @@ sexp_list_item *sexp_tree::get_listing_opf_armor_types() return head.next; } +sexp_list_item *sexp_tree::get_listing_opf_hud_elements() +{ + sexp_list_item head; + head.add_data("warpout"); + + return head.next; +} + // Deletes sexp_variable from sexp_tree. // resets tree to not include given variable, and resets text and type void sexp_tree::delete_sexp_tree_variable(const char *var_name) diff --git a/code/fred2/sexp_tree.h b/code/fred2/sexp_tree.h index 04d20f1df9..f94c3821e6 100644 --- a/code/fred2/sexp_tree.h +++ b/code/fred2/sexp_tree.h @@ -236,7 +236,6 @@ public: sexp_list_item *get_listing_opf_sun_bitmap(); sexp_list_item *get_listing_opf_nebula_storm_type(); sexp_list_item *get_listing_opf_nebula_poof(); - // Goober5000 ---------------------------------------------- sexp_list_item *get_listing_opf_cargo(); sexp_list_item *get_listing_opf_ai_class(); sexp_list_item *get_listing_opf_support_ship_class(); @@ -256,8 +255,12 @@ public: sexp_list_item *get_listing_opf_armor_types(); sexp_list_item *get_listing_opf_turret_target_priorities(); sexp_list_item *get_listing_opf_persona(); - // --------------------------------------------------------- + sexp_list_item *get_listing_opf_font(); sexp_list_item *get_listing_opf_post_effect(); + sexp_list_item *get_listing_opf_hud_elements(); + sexp_list_item *get_listing_opf_sound_environment(); + sexp_list_item *get_listing_opf_sound_environment_option(); + sexp_list_item *get_listing_opf_explosion_option(); int m_mode; int item_index; diff --git a/code/fred2/shipeditordlg.cpp b/code/fred2/shipeditordlg.cpp index 429d0b39b8..6304c7cd22 100644 --- a/code/fred2/shipeditordlg.cpp +++ b/code/fred2/shipeditordlg.cpp @@ -1253,9 +1253,16 @@ int CShipEditorDlg::update_ship(int ship) if (strlen(m_cargo1)) { z = string_lookup(m_cargo1, Cargo_names, Num_cargo); if (z == -1) { - Assert(Num_cargo < MAX_CARGO); - z = Num_cargo++; - strcpy(Cargo_names[z], m_cargo1); + if (Num_cargo < MAX_CARGO) { + z = Num_cargo++; + strcpy(Cargo_names[z], m_cargo1); + } + else { + str.Format("Maximum number of cargo names (%d) reached.\nIgnoring new name.\n", MAX_CARGO); + MessageBox(str, "Error", MB_ICONEXCLAMATION); + z = 0; + m_cargo1 = Cargo_names[z]; + } } MODIFY(Ships[ship].cargo1, (char)z); @@ -1314,7 +1321,7 @@ int CShipEditorDlg::update_ship(int ship) m_arrival_delay.save(&Ships[ship].arrival_delay); m_departure_delay.save(&Ships[ship].departure_delay); if (m_arrival_target >= 0) { - z = ((CComboBox *) GetDlgItem(IDC_ARRIVAL_TARGET)) -> GetItemData(m_arrival_target); + z = ((CComboBox *) GetDlgItem(IDC_ARRIVAL_TARGET))->GetItemData(m_arrival_target); MODIFY(Ships[ship].arrival_anchor, z); // if the arrival is not hyperspace or docking bay -- force arrival distance to be @@ -1324,7 +1331,7 @@ int CShipEditorDlg::update_ship(int ship) if ((Ships[ship].arrival_distance < d) && (Ships[ship].arrival_distance > -d)) { str.Format("Ship must arrive at least %d meters away from target.\n" "Value has been reset to this. Use with caution!\r\n" - "Reccomended distance is %d meters.\r\n", d, (int)(2.0f * Objects[Ships[ship].objnum].radius) ); + "Recommended distance is %d meters.\r\n", d, (int)(2.0f * Objects[Ships[ship].objnum].radius) ); MessageBox(str); if (Ships[ship].arrival_distance < 0) @@ -1336,8 +1343,10 @@ int CShipEditorDlg::update_ship(int ship) } } } - z = ((CComboBox *)GetDlgItem(IDC_DEPARTURE_TARGET))->GetItemData(m_departure_target); - MODIFY(Ships[ship].departure_anchor, z ); + if (m_departure_target >= 0) { + z = ((CComboBox *) GetDlgItem(IDC_DEPARTURE_TARGET))->GetItemData(m_departure_target); + MODIFY(Ships[ship].departure_anchor, z ); + } } if (m_hotkey != -1) diff --git a/code/fred2/shipspecialdamage.cpp b/code/fred2/shipspecialdamage.cpp index 4d6d27d64b..78ab71a9f7 100644 --- a/code/fred2/shipspecialdamage.cpp +++ b/code/fred2/shipspecialdamage.cpp @@ -42,15 +42,15 @@ void ShipSpecialDamage::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_ENABLE_SHOCKWAVE, m_shock_enabled); DDX_Check(pDX, IDC_ENABLE_SPECIAL_EXP, m_special_exp_enabled); DDX_Text(pDX, IDC_SPECIAL_INNER_RAD, m_inner_rad); - DDV_MinMaxInt(pDX, m_inner_rad, 10, 10000); + DDV_MinMaxInt(pDX, m_inner_rad, 1, INT_MAX); DDX_Text(pDX, IDC_SPECIAL_OUTER_RAD, m_outer_rad); - DDV_MinMaxInt(pDX, m_outer_rad, 11, 10000); + DDV_MinMaxInt(pDX, m_outer_rad, 2, INT_MAX); DDX_Text(pDX, IDC_SPECIAL_DAMAGE, m_damage); - DDV_MinMaxInt(pDX, m_damage, 0, 100000); + DDV_MinMaxInt(pDX, m_damage, 0, INT_MAX); DDX_Text(pDX, IDC_SPECIAL_SHOCK_SPEED, m_shock_speed); - DDV_MinMaxInt(pDX, m_shock_speed, 10, 10000); + DDV_MinMaxInt(pDX, m_shock_speed, 0, INT_MAX); DDX_Text(pDX, IDC_SPECIAL_BLAST, m_blast); - DDV_MinMaxInt(pDX, m_blast, 0, 100000); + DDV_MinMaxInt(pDX, m_blast, 0, INT_MAX); //}}AFX_DATA_MAP } @@ -71,7 +71,8 @@ void ShipSpecialDamage::OnEnableShockwave() UpdateData(TRUE); // enable/disable shock speed - DoGray();} + DoGray(); +} void ShipSpecialDamage::OnEnableSpecialExp() { @@ -89,21 +90,23 @@ BOOL ShipSpecialDamage::OnInitDialog() // get ship num object *objp; - m_ship_num = -1; + num_selected_ships = 0; objp = GET_FIRST(&obj_used_list); while (objp != END_OF_LIST(&obj_used_list)) { if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) { if (objp->flags & OF_MARKED) { - - m_ship_num = objp->instance; - break; + m_selected_ships[num_selected_ships] = objp->instance; + num_selected_ships++; } } objp = GET_NEXT(objp); } - if (Ships[m_ship_num].special_exp_index == -1) { + Assert (Objects[cur_object_index].flags & OF_MARKED); + m_ship_num = Objects[cur_object_index].instance; + + if (!(Ships[m_ship_num].use_special_explosion)) { // get default_table_values ship_info *sip; sip = &Ship_info[Ships[m_ship_num].ship_info_index]; @@ -116,19 +119,23 @@ BOOL ShipSpecialDamage::OnInitDialog() m_shock_speed = (int) sip->shockwave.speed; m_special_exp_enabled = FALSE; - if (m_inner_rad < 10) m_inner_rad = 10; - if (m_outer_rad < 11) m_outer_rad = 11; - if (m_shock_speed < 10) m_shock_speed = 10; - } else { - int index = Ships[m_ship_num].special_exp_index; - Assert( (index > 0) && (index < MAX_SEXP_VARIABLES-(BLOCK_EXP_SIZE-1)) ); - - m_inner_rad = atoi(Sexp_variables[index++].text); - m_outer_rad = atoi(Sexp_variables[index++].text); - m_damage = atoi(Sexp_variables[index++].text); - m_blast = atoi(Sexp_variables[index++].text); - m_shock_enabled = atoi(Sexp_variables[index++].text); - m_shock_speed = atoi(Sexp_variables[index++].text); + if (m_inner_rad < 1) { + m_inner_rad = 1; + } + if (m_outer_rad < 2) { + m_outer_rad = 2; + } + if (m_shock_speed < 1) { + m_shock_speed = 1; + } + } + else { + m_inner_rad = Ships[m_ship_num].special_exp_inner; + m_outer_rad = Ships[m_ship_num].special_exp_outer; + m_damage = Ships[m_ship_num].special_exp_damage; + m_blast = Ships[m_ship_num].special_exp_blast; + m_shock_enabled = Ships[m_ship_num].use_shockwave; + m_shock_speed = Ships[m_ship_num].special_exp_shockwave_speed; m_special_exp_enabled = TRUE; } @@ -164,16 +171,15 @@ void ShipSpecialDamage::OnOK() { UpdateData(TRUE); - object *objp; + int i; - objp = GET_FIRST(&obj_used_list); - while (objp != END_OF_LIST(&obj_used_list)) { - if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) { - if (objp->flags & OF_MARKED) - update_ship(objp->instance); - } + if (m_inner_rad > m_outer_rad) { + MessageBox("Inner radius must be less than outer radius"); + return; + } - objp = GET_NEXT(objp); + for ( i = 0; i < num_selected_ships; i++ ) { + update_ship(m_selected_ships[i]); } CDialog::OnOK(); @@ -182,51 +188,33 @@ void ShipSpecialDamage::OnOK() void ShipSpecialDamage::update_ship(int shipnum) { ship *shipp = &Ships[shipnum]; + + // set to update + set_modified(); - // TODO: Add extra validation here if (m_special_exp_enabled) { - - int start; - - if (m_inner_rad > m_outer_rad) { - MessageBox("Inner radius must be less than outer radius"); - return; - } - - if (shipp->special_exp_index == -1) { - // get free sexp_variables - start = sexp_variable_allocate_block(shipp->ship_name, SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_BLOCK_EXP); - if (start == -1) { - MessageBox("Unable to allocate storage, try deleting Sexp variables"); - return; - } else { - shipp->special_exp_index = start; - } - } else { - start = shipp->special_exp_index; - } - // set to update - set_modified(); - // set em - sprintf(Sexp_variables[start+INNER_RAD].text, "%d", m_inner_rad); - sprintf(Sexp_variables[start+OUTER_RAD].text, "%d", m_outer_rad); - sprintf(Sexp_variables[start+DAMAGE].text, "%d", m_damage); - sprintf(Sexp_variables[start+BLAST].text, "%d", m_blast); - sprintf(Sexp_variables[start+PROPAGATE].text, "%d", m_shock_enabled); - sprintf(Sexp_variables[start+SHOCK_SPEED].text, "%d", m_shock_speed); - - } else { - if (shipp->special_exp_index != -1) { - // set to update - set_modified(); - - // free block - sexp_variable_block_free(shipp->ship_name, Ships[m_ship_num].special_exp_index, SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_BLOCK_EXP); - - // set index to no exp block - shipp->special_exp_index = -1; + shipp->use_special_explosion = true; + shipp->special_exp_inner = m_inner_rad; + shipp->special_exp_outer = m_outer_rad; + shipp->special_exp_damage = m_damage; + shipp->special_exp_blast = m_blast; + shipp->use_shockwave = (m_shock_enabled ? 1:0) ; + if (m_shock_speed) { + if (m_shock_speed < 1) { + m_shock_speed = 1; + MessageBox("Shockwave speed must be defined! Setting this to 1 now"); + } + shipp->special_exp_shockwave_speed = m_shock_speed; } + } else { + shipp->use_special_explosion = false; + shipp->special_exp_inner = -1; + shipp->special_exp_outer = -1; + shipp->special_exp_damage = -1; + shipp->special_exp_blast = -1; + shipp->use_shockwave = false; + shipp->special_exp_shockwave_speed = -1; } } diff --git a/code/fred2/shipspecialdamage.h b/code/fred2/shipspecialdamage.h index dd2d4c6d2c..af76d34a70 100644 --- a/code/fred2/shipspecialdamage.h +++ b/code/fred2/shipspecialdamage.h @@ -30,13 +30,19 @@ public: //{{AFX_DATA(ShipSpecialDamage) enum { IDD = IDD_SPECIAL_DAMAGE }; int m_shock_enabled; - BOOL m_special_exp_enabled; + BOOL m_special_exp_enabled; int m_inner_rad; int m_outer_rad; int m_damage; int m_shock_speed; int m_blast; int m_ship_num; + +private: + // variables to handle selection of multiple ships + int m_selected_ships[MAX_SHIPS]; + int num_selected_ships; + //}}AFX_DATA diff --git a/code/fred2/shipspecialhitpoints.cpp b/code/fred2/shipspecialhitpoints.cpp index 27a4724168..91fda91e12 100644 --- a/code/fred2/shipspecialhitpoints.cpp +++ b/code/fred2/shipspecialhitpoints.cpp @@ -31,10 +31,11 @@ void ShipSpecialHitpoints::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(ShipSpecialHitpoints) DDX_Check(pDX, IDC_ENABLE_SPECIAL_HITPOINTS, m_special_hitpoints_enabled); + DDX_Check(pDX, IDC_ENABLE_SPECIAL_SHIELD, m_special_shield_enabled); DDX_Text(pDX, IDC_SPECIAL_SHIELDS, m_shields); - DDV_MinMaxInt(pDX, m_shields, 0, INT_MAX); + DDV_MinMaxInt(pDX, m_shields, -1, INT_MAX); DDX_Text(pDX, IDC_SPECIAL_HULL, m_hull); - DDV_MinMaxInt(pDX, m_hull, 10, INT_MAX); + DDV_MinMaxInt(pDX, m_hull, 1, INT_MAX); //}}AFX_DATA_MAP } @@ -42,6 +43,7 @@ void ShipSpecialHitpoints::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(ShipSpecialHitpoints, CDialog) //{{AFX_MSG_MAP(ShipSpecialHitpoints) ON_BN_CLICKED(IDC_ENABLE_SPECIAL_HITPOINTS, OnEnableSpecialHitpoints) + ON_BN_CLICKED(IDC_ENABLE_SPECIAL_SHIELD, OnEnableSpecialShieldpoints) ON_BN_CLICKED(ID_OK, OnOk) ON_BN_CLICKED(ID_CANCEL, OnCancel) //}}AFX_MSG_MAP @@ -58,46 +60,70 @@ void ShipSpecialHitpoints::OnEnableSpecialHitpoints() DoGray(); } +void ShipSpecialHitpoints::OnEnableSpecialShieldpoints() +{ + // TODO: Add your control notification handler code here + UpdateData(TRUE); + + DoGray(); +} + BOOL ShipSpecialHitpoints::OnInitDialog() { // get ship num object *objp; - m_ship_num = -1; + num_selected_ships = 0; objp = GET_FIRST(&obj_used_list); while (objp != END_OF_LIST(&obj_used_list)) { if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) { if (objp->flags & OF_MARKED) { - - m_ship_num = objp->instance; - break; + m_selected_ships[num_selected_ships] = objp->instance; + num_selected_ships++; } } objp = GET_NEXT(objp); } - if (Ships[m_ship_num].special_hitpoint_index == -1) - { + Assert(num_selected_ships); + Assert (Objects[cur_object_index].flags & OF_MARKED); + m_ship_num = Objects[cur_object_index].instance; + + // get the details from the first ship + //hull + if (Ships[m_ship_num].special_hitpoints) { + m_hull = Ships[m_ship_num].special_hitpoints; + m_special_hitpoints_enabled = TRUE; + } + else { + // get default_table_values + ship_info *sip; + sip = &Ship_info[Ships[m_ship_num].ship_info_index]; + + m_hull = (int)sip->max_hull_strength; + m_special_hitpoints_enabled = FALSE; + + if (m_hull < 1) m_hull = 10; + } + + //shields + if (Ships[m_ship_num].special_shield > 0){ + m_shields = Ships[m_ship_num].special_shield; + m_special_shield_enabled = TRUE; + } + else { // get default_table_values ship_info *sip; sip = &Ship_info[Ships[m_ship_num].ship_info_index]; m_shields = (int)sip->max_shield_strength; - m_hull = (int)sip->max_hull_strength; - m_special_hitpoints_enabled = FALSE; + m_special_shield_enabled = FALSE; - if (m_shields < 0) m_shields = 0; - if (m_hull < 10) m_hull = 10; - } else { - int index = Ships[m_ship_num].special_hitpoint_index; -// Assert( (index > 0) && (index < MAX_SEXP_VARIABLES-(BLOCK_HITPOINT_SIZE-1)) ); - - m_shields = atoi(Sexp_variables[index++].text); - m_hull = atoi(Sexp_variables[index++].text); - - m_special_hitpoints_enabled = TRUE; - } + if (m_shields < 0) { + m_shields = 0; + } + } CDialog::OnInitDialog(); @@ -110,7 +136,7 @@ BOOL ShipSpecialHitpoints::OnInitDialog() void ShipSpecialHitpoints::DoGray() { - GetDlgItem(IDC_SPECIAL_SHIELDS)->EnableWindow(m_special_hitpoints_enabled); + GetDlgItem(IDC_SPECIAL_SHIELDS)->EnableWindow(m_special_shield_enabled); GetDlgItem(IDC_SPECIAL_HULL)->EnableWindow(m_special_hitpoints_enabled); } @@ -124,6 +150,8 @@ void ShipSpecialHitpoints::OnCancel() void ShipSpecialHitpoints::OnOk() { float temp_max_hull_strength; + int new_shield_strength, new_hull_strength; + int i; UpdateData(TRUE); @@ -131,58 +159,65 @@ void ShipSpecialHitpoints::OnOk() if (m_special_hitpoints_enabled) { // Don't update anything if the hull strength is invalid - if (m_hull < 10) - { + if (m_hull < 1) { return; } - int start; - - if (Ships[m_ship_num].special_hitpoint_index == -1) { - - // get free sexp_variables - start = sexp_variable_allocate_block(Ships[m_ship_num].ship_name, SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_BLOCK_HIT); - if (start == -1) { - MessageBox("Unable to allocate storage, try deleting Sexp variables"); - return; - } else { - Ships[m_ship_num].special_hitpoint_index = start; - } - } else { - start = Ships[m_ship_num].special_hitpoint_index; - } // set to update set_modified(); - // set em - sprintf(Sexp_variables[start+SHIELD_STRENGTH].text, "%d", m_shields); - sprintf(Sexp_variables[start+HULL_STRENGTH].text, "%d", m_hull); + new_hull_strength = m_hull; + //Ships[m_ship_num].special_hitpoints = m_hull; - } else { - if (Ships[m_ship_num].special_hitpoint_index != -1) { - // set to update - set_modified(); + } + else { + // set to update + set_modified(); - // free block - sexp_variable_block_free(Ships[m_ship_num].ship_name, Ships[m_ship_num].special_hitpoint_index, SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_BLOCK_HIT); + new_hull_strength = 0; + } - // set index to no hit block - Ships[m_ship_num].special_hitpoint_index = -1; + if (m_special_shield_enabled) { + + // Don't update anything if the hull strength is invalid + if (m_shields < 0) { + return; } + + // set to update + set_modified(); + + new_shield_strength = m_shields; + //Ships[m_ship_num].special_shield = m_shields; + + } + else { + // set to update + set_modified(); + + new_shield_strength = -1; } - // calc kamikaze stuff - if (Ships[m_ship_num].special_hitpoint_index != -1) - { - temp_max_hull_strength = (float) atoi(Sexp_variables[Ships[m_ship_num].special_hitpoint_index+HULL_STRENGTH].text); - } - else - { - temp_max_hull_strength = Ship_info[Ships[m_ship_num].ship_info_index].max_hull_strength; + for ( i=0; i SetBitmap(m_play_bm); + + // fill environment list ... + + CComboBox *box = (CComboBox *) GetDlgItem(IDC_SOUND_ENVIRONMENT); + + // add empty default string (for no environment set) + box->AddString(""); + + for (size_t i = 0; i < EFX_presets.size(); i++) { + box->AddString(EFX_presets[i].name.c_str()); + } + + // set values ... + + sound_env *m_env = &The_mission.sound_environment; + + // make sure we are set by default to mission values + if (m_env->id >= 0) { + m_environment = m_env->id + 1; + + m_volume = m_env->volume; + m_damping = m_env->damping; + m_decay_time = m_env->decay; + + // make it active + sound_env_set(m_env); + } else { + m_environment = 0; + + m_volume = 0.0f; + m_damping = 0.1f; + m_decay_time = 0.1f; + + sound_env_disable(); + } + + CDialog::OnInitDialog(); + UpdateData(FALSE); + return TRUE; +} + +void SoundEnvironment::OnOK() +{ + UpdateData(TRUE); + + sound_env *m_env = &The_mission.sound_environment; + + int env_id = m_environment - 1; + + // save anything if we need to + if (env_id >= 0) { + m_env->id = env_id; + m_env->volume = m_volume; + m_env->damping = m_damping; + m_env->decay = m_decay_time; + } else { + m_env->id = -1; + } + + CDialog::OnOK(); +} + +void SoundEnvironment::OnCancel() +{ + CDialog::OnCancel(); +} + +void SoundEnvironment::OnClose() +{ + int z; + + UpdateData(TRUE); + + if (query_modified()) { + z = MessageBox("Do you want to keep your changes?", "Close", MB_ICONQUESTION | MB_YESNOCANCEL); + if (z == IDCANCEL) { + return; + } + + if (z == IDYES) { + OnOK(); + return; + } + } + + CDialog::OnClose(); +} + +int SoundEnvironment::query_modified() +{ + int env_id = m_environment - 1; + sound_env *m_env = &The_mission.sound_environment; + + return ( (env_id != m_env->id) || (m_volume != m_env->volume) || (m_damping != m_env->damping) + || (m_decay_time != m_env->decay) ); +} + +void SoundEnvironment::OnSelChangeSoundEnvironment() +{ + UpdateData(TRUE); + + int index = m_environment - 1; + + if (index >= 0) { + m_volume = EFX_presets[index].flGain; + m_damping = EFX_presets[index].flDecayHFRatio; + m_decay_time = EFX_presets[index].flDecayTime; + } else { + m_volume = 0.0f; + m_damping = 0.1f; + m_decay_time = 0.1f; + } + + UpdateData(FALSE); +} + +BOOL SoundEnvironment::DestroyWindow() +{ + sound_env_disable(); + + audiostream_close_file(m_wave_id, 0); + m_wave_id = -1; + + m_play_bm.DeleteObject(); + return CDialog::DestroyWindow(); +} + +void SoundEnvironment::OnPlay() +{ + sound_env m_env; + + if ( !sound_env_supported() ) { + MessageBox("Sound environment effects are not available! Unable to preview!", "Error", MB_OK | MB_ICONEXCLAMATION); + return; + } + + if (m_wave_id < 0) { + OnBrowseWave(); + return; + } + + UpdateData(TRUE); + + if (m_environment > 0) { + m_env.id = m_environment - 1; + m_env.volume = m_volume; + m_env.damping = m_damping; + m_env.decay = m_decay_time; + + sound_env_set(&m_env); + } + + audiostream_play(m_wave_id, 1.0f, 0); +} + +void SoundEnvironment::OnBrowseWave() +{ + int z; + + if (m_wave_id >= 0) { + audiostream_close_file(m_wave_id, 0); + m_wave_id = -1; + } + + UpdateData(TRUE); + + m_wave_filename = _T(""); + + z = cfile_push_chdir(CF_TYPE_DATA); + + CFileDialog dlg(TRUE, "wav", m_wave_filename, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR, + "Voice Files (*.ogg, *.wav)|*.ogg;*.wav|Ogg Vorbis Files (*.ogg)|*.ogg|Wave Files (*.wav)|*.wav||"); + + if (dlg.DoModal() == IDOK) { + m_wave_filename = dlg.GetFileName(); + m_wave_id = audiostream_open((char *)(LPCSTR) m_wave_filename, ASF_SOUNDFX); + } + + if ( !z ) { + cfile_pop_dir(); + } +} diff --git a/code/fred2/soundenvironmentdlg.h b/code/fred2/soundenvironmentdlg.h new file mode 100644 index 0000000000..89147fe7f4 --- /dev/null +++ b/code/fred2/soundenvironmentdlg.h @@ -0,0 +1,63 @@ +#if !defined(AFX_SOUNDENVIRONMENTDLG_H__C27DA258_9C66_4987_8D20_AEEB260644A8__INCLUDED_) +#define AFX_SOUNDENVIRONMENTDLG_H__C27DA258_9C66_4987_8D20_AEEB260644A8__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +// soundenvironmentdlg.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// SoundEnvironment dialog + +class SoundEnvironment : public CDialog +{ +// Construction +public: + SoundEnvironment(CWnd* pParent = NULL); // standard constructor + int query_modified(); + void OnOK(); + void OnCancel(); + +// Dialog Data + //{{AFX_DATA(SoundEnvironment) + enum { IDD = IDD_SOUND_ENVIRONMENT }; + int m_environment; + float m_damping; + float m_decay_time; + float m_volume; + CString m_wave_filename; + //}}AFX_DATA + + CBitmap m_play_bm; + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(SoundEnvironment) + public: + virtual BOOL DestroyWindow(); + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + //}}AFX_VIRTUAL + +// Implementation +protected: + + // Generated message map functions + //{{AFX_MSG(SoundEnvironment) + virtual BOOL OnInitDialog(); + afx_msg void OnClose(); + afx_msg void OnSelChangeSoundEnvironment(); + afx_msg void OnBrowseWave(); + afx_msg void OnPlay(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() + +private: + int m_wave_id; +}; + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_SOUNDENVIRONMENT_H__C27DA258_9C66_4987_8D20_AEEB260644A8__INCLUDED_) diff --git a/code/fred2/wing_editor.cpp b/code/fred2/wing_editor.cpp index 38523d9337..88410969a7 100644 --- a/code/fred2/wing_editor.cpp +++ b/code/fred2/wing_editor.cpp @@ -778,7 +778,7 @@ void wing_editor::update_data_safe() MODIFY(Wings[cur_wing].wave_delay_max, m_arrival_delay_max); MODIFY(Wings[cur_wing].arrival_distance, m_arrival_dist); if (m_arrival_target >= 0) { - i = ((CComboBox *) GetDlgItem(IDC_ARRIVAL_TARGET)) -> GetItemData(m_arrival_target); + i = ((CComboBox *) GetDlgItem(IDC_ARRIVAL_TARGET))->GetItemData(m_arrival_target); MODIFY(Wings[cur_wing].arrival_anchor, i); // when arriving near or in front of a ship, be sure that we are far enough away from it!!! @@ -788,7 +788,7 @@ void wing_editor::update_data_safe() if (!bypass_errors) { sprintf(buf, "Ship must arrive at least %d meters away from target.\n" "Value has been reset to this. Use with caution!\r\n" - "Reccomended distance is %d meters.\r\n", d, (int)(2.0f * Objects[Ships[i].objnum].radius) ); + "Recommended distance is %d meters.\r\n", d, (int)(2.0f * Objects[Ships[i].objnum].radius) ); MessageBox(buf); } @@ -802,9 +802,10 @@ void wing_editor::update_data_safe() } } } - - i = ((CComboBox*)GetDlgItem(IDC_DEPARTURE_TARGET))->GetItemData(m_departure_target); - MODIFY(Wings[cur_wing].departure_anchor, i); + if (m_departure_target >= 0) { + i = ((CComboBox *) GetDlgItem(IDC_DEPARTURE_TARGET))->GetItemData(m_departure_target); + MODIFY(Wings[cur_wing].departure_anchor, i); + } MODIFY(Wings[cur_wing].departure_delay, m_departure_delay); hotkey = m_hotkey - 1; diff --git a/code/freespace2/freespace.cpp b/code/freespace2/freespace.cpp index 0ca73d0d5a..096b516431 100644 --- a/code/freespace2/freespace.cpp +++ b/code/freespace2/freespace.cpp @@ -143,6 +143,7 @@ #include "ship/shipfx.h" #include "ship/shiphit.h" #include "sound/audiostr.h" +#include "sound/ds.h" #include "sound/fsspeech.h" #include "sound/sound.h" #include "sound/voicerec.h" @@ -601,7 +602,7 @@ float Game_shudder_intensity = 0.0f; // should be between 0.0 and 100.0 // EAX stuff sound_env Game_sound_env; -sound_env Game_default_sound_env = {SND_ENV_BATHROOM, 0.2F,0.2F,1.0F}; +sound_env Game_default_sound_env = { EAX_ENVIRONMENT_BATHROOM, 0.2f, 0.2f, 1.0f }; int Game_sound_env_update_timestamp; @@ -823,6 +824,7 @@ void game_sunspot_process(float frametime) Sun_drew = 0; } else { + Sun_spot_goal = 0.0f; if ( Sun_drew ) { // check sunspots for all suns n_lights = light_get_global_count(); @@ -845,14 +847,10 @@ void game_sunspot_process(float frametime) // draw the glow for this sun stars_draw_sun_glow(idx); - } else { - Sun_spot_goal = 0.0f; } } Sun_drew = 0; - } else { - Sun_spot_goal = 0.0f; } } @@ -997,6 +995,10 @@ void game_level_close() subtitles_close(); trail_level_close(); + // be sure to not only reset the time but the lock as well + set_time_compression(1.0f, 0.0f); + lock_time_compression(false); + audiostream_unpause_all(); Game_paused = 0; @@ -1449,7 +1451,14 @@ void game_assign_sound_environment() } */ - Game_sound_env = Game_default_sound_env; + if (The_mission.sound_environment.id >= 0) { + Game_sound_env = The_mission.sound_environment; + } else if (SND_ENV_DEFAULT > 0) { + sound_env_get(&Game_sound_env, SND_ENV_DEFAULT); + } else { + Game_sound_env = Game_default_sound_env; + } + Game_sound_env_update_timestamp = timestamp(1); } @@ -2028,21 +2037,8 @@ void game_init() // SOUND INIT START ///////////////////////////// - ptr = os_config_read_string(NULL, NOX("SoundDeviceOAL"), NULL); - if (ptr) { - if ( !stricmp(ptr, NOX("no sound")) ) { - mprintf(("Sound is disabled!\n")); - - Cmdline_freespace_no_sound = 1; - Cmdline_freespace_no_music = 1; - } - } - if ( !Is_standalone ) { - int use_eax = os_config_read_uint("Sound", NOX("EnableEFX"), 0); - unsigned int sample_rate = os_config_read_uint("Sound", "SampleRate", 44100); - - snd_init(use_eax, sample_rate); + snd_init(); } if(fsspeech_init() == false) { @@ -3025,7 +3021,7 @@ extern void render_shields(); void player_repair_frame(float frametime) { - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if(MULTIPLAYER_MASTER){ int idx; for(idx=0;idxflags & NETINFO_FLAG_AM_MASTER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (f2fl(Missiontime) >= 2.0f) && !dogfight_blown){ + if( MULTIPLAYER_MASTER && (Net_player != NULL) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (f2fl(Missiontime) >= 2.0f) && !dogfight_blown){ // blow up all non-player ships ship_obj *moveup = GET_FIRST(&Ship_obj_list); ship *shipp; @@ -4251,7 +4246,7 @@ void game_simulation_frame() } // evaluate mission departures and arrivals before we process all objects. - if ( !(Game_mode & GM_MULTIPLAYER) || ((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && !multi_endgame_ending()) ) { + if ( !(Game_mode & GM_MULTIPLAYER) || (MULTIPLAYER_MASTER && !multi_endgame_ending()) ) { // we don't want to evaluate mission stuff when any ingame joiner in multiplayer is receiving // ships/wing packets. @@ -4281,7 +4276,7 @@ void game_simulation_frame() } // do all interpolation now - if ( (Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) && !multi_endgame_ending() && !(Netgame.flags & NG_FLAG_SERVER_LOST)) { + if ( MULTIPLAYER_CLIENT && !multi_endgame_ending() && !(Netgame.flags & NG_FLAG_SERVER_LOST)) { // client side processing of warping in effect stages multi_do_client_warp(flFrametime); @@ -4321,9 +4316,6 @@ void game_simulation_frame() // Move missile trails trail_move_all(flFrametime); - // process muzzle flashes - mflash_process_all(); - // Flash the gun flashes shipfx_flash_do_frame(flFrametime); @@ -4694,7 +4686,7 @@ void game_frame(int paused) } // if we're not the master, we may have to send the server-critical ship status button_info bits - if ((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) && !(Net_player->flags & NETINFO_FLAG_OBSERVER)){ + if (MULTIPLAYER_CLIENT && !(Net_player->flags & NETINFO_FLAG_OBSERVER)){ multi_maybe_send_ship_status(); } } @@ -6105,7 +6097,6 @@ void game_leave_state( int old_state, int new_state ) } freespace_stop_mission(); - set_time_compression(1.0f); } break; @@ -6181,11 +6172,17 @@ void game_leave_state( int old_state, int new_state ) case GS_STATE_DEATH_DIED: Game_mode &= ~GM_DEAD_DIED; - - // early end while respawning or blowing up in a multiplayer game - if((Game_mode & GM_MULTIPLAYER) && ((new_state == GS_STATE_DEBRIEF) || (new_state == GS_STATE_MULTI_DOGFIGHT_DEBRIEF)) ){ - game_stop_time(); - freespace_stop_mission(); + + if ( !(Game_mode & GM_MULTIPLAYER) ) { + if ( end_mission && (new_state == GS_STATE_DEBRIEF) ) { + freespace_stop_mission(); + } + } else { + // early end while respawning or blowing up in a multiplayer game + if ( (new_state == GS_STATE_DEBRIEF) || (new_state == GS_STATE_MULTI_DOGFIGHT_DEBRIEF) ) { + game_stop_time(); + freespace_stop_mission(); + } } break; @@ -6343,8 +6340,6 @@ void game_enter_state( int old_state, int new_state ) Net_player->flags &= ~NETINFO_FLAG_DO_NETWORKING; } - set_time_compression(1.0f); - // remove any multiplayer flags from the game mode Game_mode &= ~(GM_MULTIPLAYER); @@ -6391,8 +6386,6 @@ void game_enter_state( int old_state, int new_state ) break; } - set_time_compression(1.0f); - // maybe play a movie before the mission mission_campaign_maybe_play_movie(CAMPAIGN_MOVIE_PRE_MISSION); @@ -6506,6 +6499,19 @@ void game_enter_state( int old_state, int new_state ) //Game_time_compression = F1_0; } + /* game could be comming from a restart (rather than first start) + so make sure that we zero the hud gauge overrides (Sexp_hud_*) + \sa sexp_hud_display_gauge*/ + if ( (old_state == GS_STATE_GAME_PLAY) + || (old_state == GS_STATE_BRIEFING) + || (old_state == GS_STATE_DEBRIEF) + || (old_state == GS_STATE_SHIP_SELECT) + || (old_state == GS_STATE_WEAPON_SELECT) + || (old_state == GS_STATE_RED_ALERT) ) + { + Sexp_hud_display_warpout = 0; + } + // coming from the gameplay state or the main menu, we might need to load the mission if ( (Game_mode & GM_NORMAL) && ((old_state == GS_STATE_MAIN_MENU) || (old_state == GS_STATE_GAME_PLAY) || (old_state == GS_STATE_DEATH_BLEW_UP)) ) { if ( !game_start_mission() ) // this should put us into a new state. @@ -6583,15 +6589,14 @@ void mouse_force_pos(int x, int y); } // under certain circumstances, the server should reset the object update rate limiting stuff - if( ((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)) && - ((old_state == GS_STATE_MULTI_PAUSED) || (old_state == GS_STATE_MULTI_MISSION_SYNC)) ){ + if( MULTIPLAYER_MASTER && ((old_state == GS_STATE_MULTI_PAUSED) || (old_state == GS_STATE_MULTI_MISSION_SYNC)) ){ // reinitialize the rate limiting system for all clients multi_oo_rate_init_all(); } // multiplayer clients should always re-initialize their control info rate limiting system - if((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if(MULTIPLAYER_CLIENT){ multi_oo_rate_init_all(); } @@ -6743,9 +6748,7 @@ void mouse_force_pos(int x, int y); // JAS: Used to do all paging here!!!! Net_player->state = NETPLAYER_STATE_WAITING; - send_netplayer_update_packet(); - Missiontime = 0; - set_time_compression(1.0f); + send_netplayer_update_packet(); break; case MULTI_SYNC_INGAME: multi_sync_init(); diff --git a/code/gamesnd/eventmusic.cpp b/code/gamesnd/eventmusic.cpp index 7efa3851fd..22ace60517 100644 --- a/code/gamesnd/eventmusic.cpp +++ b/code/gamesnd/eventmusic.cpp @@ -1371,7 +1371,8 @@ void parse_menumusic() if ( cf_exists_full_ext(Spooled_music[idx].filename, CF_TYPE_MUSIC, NUM_EXT, exts) ) Spooled_music[idx].flags |= SMF_VALID; - Num_music_files++; + if (!nocreate) + Num_music_files++; } // ------------------------------------------------------------------------------------------------- diff --git a/code/gamesnd/gamesnd.cpp b/code/gamesnd/gamesnd.cpp index 69a7cfdff1..85c2a325b2 100644 --- a/code/gamesnd/gamesnd.cpp +++ b/code/gamesnd/gamesnd.cpp @@ -13,6 +13,7 @@ #include "localization/localize.h" #include "species_defs/species_defs.h" #include "parse/parselo.h" +#include "sound/ds.h" int Num_game_sounds = 0; @@ -316,6 +317,146 @@ void gamesnd_parse_soundstbl() required_string("#Flyby Sounds End"); + if ( optional_string("#Sound Environments Start") ) { + char name[65] = { '\0' }; + char template_name[65] = { '\0' }; + EFXREVERBPROPERTIES *props; + + while ( required_string_either("#Sound Environments End", "$Name:") ) { + required_string("$Name:"); + stuff_string(name, F_NAME, sizeof(name)-1); + + if ( optional_string("$Template:") ) { + stuff_string(template_name, F_NAME, sizeof(template_name)-1); + } else { + template_name[0] = '\0'; + } + + ds_eax_get_prop(&props, name, template_name); + + if ( optional_string("+Density:") ) { + stuff_float(&props->flDensity); + CLAMP(props->flDensity, 0.0f, 1.0f); + } + + if ( optional_string("+Diffusion:") ) { + stuff_float(&props->flDiffusion); + CLAMP(props->flDiffusion, 0.0f, 1.0f); + } + + if ( optional_string("+Gain:") ) { + stuff_float(&props->flGain); + CLAMP(props->flGain, 0.0f, 1.0f); + } + + if ( optional_string("+Gain HF:") ) { + stuff_float(&props->flGainHF); + CLAMP(props->flGainHF, 0.0f, 1.0f); + } + + if ( optional_string("+Gain LF:") ) { + stuff_float(&props->flGainLF); + CLAMP(props->flGainLF, 0.0f, 1.0f); + } + + if ( optional_string("+Decay Time:") ) { + stuff_float(&props->flDecayTime); + CLAMP(props->flDecayTime, 0.01f, 20.0f); + } + + if ( optional_string("+Decay HF Ratio:") ) { + stuff_float(&props->flDecayHFRatio); + CLAMP(props->flDecayHFRatio, 0.1f, 20.0f); + } + + if ( optional_string("+Decay LF Ratio:") ) { + stuff_float(&props->flDecayLFRatio); + CLAMP(props->flDecayLFRatio, 0.1f, 20.0f); + } + + if ( optional_string("+Reflections Gain:") ) { + stuff_float(&props->flReflectionsGain); + CLAMP(props->flReflectionsGain, 0.0f, 3.16f); + } + + if ( optional_string("+Reflections Delay:") ) { + stuff_float(&props->flReflectionsDelay); + CLAMP(props->flReflectionsDelay, 0.0f, 0.3f); + } + + if ( optional_string("+Reflections Pan:") ) { + stuff_float_list(props->flReflectionsPan, 3); + CLAMP(props->flReflectionsPan[0], 0.0f, 1.0f); + CLAMP(props->flReflectionsPan[1], 0.0f, 1.0f); + CLAMP(props->flReflectionsPan[2], 0.0f, 1.0f); + } + + if ( optional_string("+Late Reverb Gain:") ) { + stuff_float(&props->flLateReverbGain); + CLAMP(props->flLateReverbGain, 0.0f, 10.0f); + } + + if ( optional_string("+Late Reverb Delay:") ) { + stuff_float(&props->flLateReverbDelay); + CLAMP(props->flLateReverbDelay, 0.0f, 0.1f); + } + + if ( optional_string("+Late Reverb Pan:") ) { + stuff_float_list(props->flLateReverbPan, 3); + CLAMP(props->flLateReverbPan[0], 0.0f, 1.0f); + CLAMP(props->flLateReverbPan[1], 0.0f, 1.0f); + CLAMP(props->flLateReverbPan[2], 0.0f, 1.0f); + } + + if ( optional_string("+Echo Time:") ) { + stuff_float(&props->flEchoTime); + CLAMP(props->flEchoTime, 0.075f, 0.25f); + } + + if ( optional_string("+Echo Depth:") ) { + stuff_float(&props->flEchoDepth); + CLAMP(props->flEchoDepth, 0.0f, 1.0f); + } + + if ( optional_string("+Modulation Time:") ) { + stuff_float(&props->flModulationTime); + CLAMP(props->flModulationTime, 0.004f, 4.0f); + } + + if ( optional_string("+Modulation Depth:") ) { + stuff_float(&props->flModulationDepth); + CLAMP(props->flModulationDepth, 0.0f, 1.0f); + } + + if ( optional_string("+HF Reference:") ) { + stuff_float(&props->flHFReference); + CLAMP(props->flHFReference, 1000.0f, 20000.0f); + } + + if ( optional_string("+LF Reference:") ) { + stuff_float(&props->flLFReference); + CLAMP(props->flLFReference, 20.0f, 1000.0f); + } + + if ( optional_string("+Room Rolloff Factor:") ) { + stuff_float(&props->flRoomRolloffFactor); + CLAMP(props->flRoomRolloffFactor, 0.0f, 10.0f); + } + + if ( optional_string("+Air Absorption Gain HF:") ) { + stuff_float(&props->flAirAbsorptionGainHF); + CLAMP(props->flAirAbsorptionGainHF, 0.892f, 1.0f); + } + + if ( optional_string("+Decay HF Limit:") ) { + stuff_int(&props->iDecayHFLimit); + CLAMP(props->iDecayHFLimit, 0, 1); + } + } + + required_string("#Sound Environments End"); + } + // close localization lcl_ext_close(); } diff --git a/code/globalincs/alphacolors.cpp b/code/globalincs/alphacolors.cpp index 5ba55e7efa..63aa755de6 100644 --- a/code/globalincs/alphacolors.cpp +++ b/code/globalincs/alphacolors.cpp @@ -30,7 +30,7 @@ color *Color_netplayer[20] = { &Color_bright_blue, &Color_green, &Color_bright_green, - &Color_black, + &Color_pink, &Color_grey, &Color_silver, &Color_white, diff --git a/code/globalincs/def_files.cpp b/code/globalincs/def_files.cpp index fcf79f0ba1..26d2168122 100644 --- a/code/globalincs/def_files.cpp +++ b/code/globalincs/def_files.cpp @@ -571,7 +571,7 @@ $AI: \n\ +Turrets attack this: YES \n\ +Can Form Wing: YES \n\ +Passive docks: ( \"support\" ) \n\ - +Ignored on cripple by: ( \"navbuoy\" \"sentry gun\" \"escape pod\" \"cargo\" \"support\" \"stealth\" \"fighter\" \"bomber\" \"fighter/bomber\" \"transport\" \"freighter\" \"awacs\" \"gas miner\" \"cruiser\" \"corvette\" \"capital\" \"super cap\" \"drydock\" \"knossos device\" ) \n\ + +Ignored on cripple by: ( \"navbuoy\" \"sentry gun\" \"escape pod\" \"cargo\" \"support\" \"stealth\" \"fighter\" \"bomber\" \"fighter/bomber\" \"transport\" \"freighter\" \"awacs\" \"gas miner\" \"cruiser\" \"corvette\" \"capital\" \"super cap\" \"drydock\" \"knossos device\" ) \n\ $Vaporize Percent Chance: 0.0 \n\ ""\ $Name: Capital \n\ @@ -798,6 +798,10 @@ $Circle Strafe Percent: 0, 0, 0, 0, 0 \n\ ;; capital ships when it is an option. \n""\ $Glide Strafe Percent: 0, 0, 0, 0, 0 \n\ \n\ +;; Percentage of the time where AI ships will randomly sidethrust in a \n\ +;; dogfight. \n\ +$Random Sidethrust Percent: 0, 0, 0, 0, 0 \n\ + \n\ ;; The amount of time required for the AI to detect \n\ ;; (and try to break) dogfight stalemate. \n\ $Stalemate Time Threshold: 0, 0, 0, 0, 0 \n\ @@ -848,6 +852,10 @@ $Chance AI Has to Fire Missiles at Player: 0, 1, 2, 3, 4 \n\ ;; aim. Applies for small ships vs small ships \n\ $Max Aim Update Delay: 0, 0, 0, 0, 0 \n\ \n\ +;; The maximum amount of delay allowed before turret AI will update its \n\ +;; aim. Applies for turrets vs small ships \n\ +$Turret Max Aim Update Delay: 0, 0, 0, 0, 0 \n\ + \n\ ;; General AI-related flags. These were previously all lumped together \n\ ;; under the New AI mission flag. \n\ \n\ @@ -964,11 +972,19 @@ $use only single fov for turrets: NO \n\ \n\ ;; allow AI ships to dodge weapons vertically as well as horizontally \n\ $allow vertical dodge: NO \n\ - \n\ + \n""\ ;; Fixes a bug where AI class is not properly set if set in the mission \n\ ;; This should be YES if you want anything in AI.tbl to mean anything \n\ $fix AI class bug: NO \n\ \n\ +;; If set, the AI will NOT make extra effort to avoid ramming the player\n\ +;; during dogfights. This results in more aggressive AI. \n\ +$no extra collision avoidance vs player: NO \n\ + \n\ +;; If set, the game will check if the dying ship is a player's wingman, \n\ +;; before making it give a death scream \n\ +$perform less checks for death screams: NO \n\ + \n\ #End \n\ "; diff --git a/code/globalincs/globals.h b/code/globalincs/globals.h index bd53803fec..9a34558dc6 100644 --- a/code/globalincs/globals.h +++ b/code/globalincs/globals.h @@ -123,5 +123,7 @@ extern int Num_medals; // from lighting.cpp #define MAX_LIGHTS 256 +// from weapon.h (and beam.h) +#define MAX_BEAM_SECTIONS 5 #endif // _GLOBALS_H diff --git a/code/globalincs/pstypes.h b/code/globalincs/pstypes.h index 4a21872ea8..2aa408a3b0 100644 --- a/code/globalincs/pstypes.h +++ b/code/globalincs/pstypes.h @@ -180,6 +180,7 @@ void _cdecl WinAssert(char * text, char * filename, int linenum, const char * fo extern void LuaError(struct lua_State *L, char *format=NULL, ...); extern void _cdecl Error( const char * filename, int line, const char * format, ... ); extern void _cdecl Warning( char * filename, int line, const char * format, ... ); +extern void _cdecl WarningEx( char *filename, int line, const char *format, ... ); extern int Global_warning_count; extern int Global_error_count; diff --git a/code/globalincs/windebug.cpp b/code/globalincs/windebug.cpp index 30bbb7aa8e..ca7115b9bd 100644 --- a/code/globalincs/windebug.cpp +++ b/code/globalincs/windebug.cpp @@ -1164,6 +1164,20 @@ void _cdecl Error( const char * filename, int line, const char * format, ... ) Messagebox_active = false; } +void _cdecl WarningEx( char *filename, int line, const char *format, ... ) +{ +#ifndef NDEBUG + if (Cmdline_extra_warn) { + char msg[sizeof(AssertText1)]; + va_list args; + va_start(args, format); + vsprintf(msg, format, args); + va_end(args); + Warning(filename, line, msg); + } +#endif +} + void _cdecl Warning( char *filename, int line, const char *format, ... ) { Global_warning_count++; diff --git a/code/graphics/generic.cpp b/code/graphics/generic.cpp index 34b8713919..facb698af1 100644 --- a/code/graphics/generic.cpp +++ b/code/graphics/generic.cpp @@ -1,4 +1,5 @@ #include "globalincs/pstypes.h" +#include "globalincs/globals.h" #include "bmpman/bmpman.h" #include "graphics/generic.h" #include "graphics/2d.h" @@ -19,6 +20,54 @@ //we check background type to avoid messed up colours for ANI #define ANI_BPP_CHECK (ga->ani.bg_type == BM_TYPE_PCX) ? 16 : 32 +// Goober5000 +int generic_anim_init_and_stream(generic_anim *anim, char *anim_filename, ubyte bg_type, bool attempt_hi_res) +{ + int stream_result = -1; + char filename[NAME_LENGTH]; + char *p; + + Assert(anim != NULL); + Assert(anim_filename != NULL); + + // hi-res support + if (attempt_hi_res && (gr_screen.res == GR_1024)) { + // attempt to load a hi-res animation + memset(filename, 0, NAME_LENGTH); + strcpy_s(filename, "2_"); + strncat(filename, anim_filename, NAME_LENGTH - 3); + + // remove extension + p = strchr(filename, '.'); + if(p) { + *p = '\0'; + } + + // attempt to stream the hi-res ani + generic_anim_init(anim, filename); + anim->ani.bg_type = bg_type; + stream_result = generic_anim_stream(anim); + } + + // we failed to stream hi-res, or we aren't running in hi-res, so try low-res + if (stream_result < 0) { + strcpy_s(filename, anim_filename); + + // remove extension + p = strchr(filename, '.'); + if(p) { + *p = '\0'; + } + + // attempt to stream the low-res ani + generic_anim_init(anim, filename); + anim->ani.bg_type = bg_type; + stream_result = generic_anim_stream(anim); + } + + return stream_result; +} + // Goober5000 void generic_anim_init(generic_anim *ga, char *filename) { @@ -317,7 +366,7 @@ void generic_anim_render(generic_anim *ga, float frametime, int x, int y) if((ga->direction & GENERIC_ANIM_DIRECTION_PAUSED) == 0) { if(ga->direction & GENERIC_ANIM_DIRECTION_BACKWARDS) { //keep going forwards if we're in a keyframe loop - if(ga->keyframe && (ga->anim_time > keytime)) { + if(ga->keyframe && (ga->anim_time >= keytime)) { ga->anim_time += frametime; if(ga->anim_time >= ga->total_time) { ga->anim_time = keytime - 0.001f; @@ -327,11 +376,11 @@ void generic_anim_render(generic_anim *ga, float frametime, int x, int y) else { //playing backwards ga->anim_time -= frametime; - if((ga->direction & GENERIC_ANIM_DIRECTION_NOLOOP) && ga->anim_time < 0.0) { + if((ga->direction & GENERIC_ANIM_DIRECTION_NOLOOP) && ga->anim_time <= 0.0) { ga->anim_time = 0; //stop on first frame when playing in reverse } else { - while(ga->anim_time < 0.0) + while(ga->anim_time <= 0.0) ga->anim_time += ga->total_time; //make sure we're always positive, so we can go back to the end } } diff --git a/code/graphics/generic.h b/code/graphics/generic.h index d7eb157428..d04ec7922e 100644 --- a/code/graphics/generic.h +++ b/code/graphics/generic.h @@ -52,7 +52,7 @@ typedef struct generic_bitmap { int bitmap_id; } generic_bitmap; - +int generic_anim_init_and_stream(generic_anim *anim, char *anim_filename, ubyte bg_type, bool attempt_hi_res); void generic_anim_init(generic_anim *ga, char *filename = NULL); void generic_bitmap_init(generic_bitmap *gb, char *filename = NULL); int generic_anim_load(generic_anim *ga); diff --git a/code/graphics/gropengl.cpp b/code/graphics/gropengl.cpp index dbb68494d3..9016b64f9d 100644 --- a/code/graphics/gropengl.cpp +++ b/code/graphics/gropengl.cpp @@ -453,7 +453,11 @@ void gr_opengl_set_clip(int x, int y, int w, int h, bool resize) } GL_state.ScissorTest(GL_TRUE); - glScissor(x, gr_screen.max_h-y-h, w, h); + if(GL_rendering_to_framebuffer) { + glScissor(x, y, w, h); + } else { + glScissor(x, gr_screen.max_h-y-h, w, h); + } } void gr_opengl_reset_clip() diff --git a/code/graphics/gropenglpostprocessing.cpp b/code/graphics/gropenglpostprocessing.cpp index 0956727b28..cde1b1f6ab 100644 --- a/code/graphics/gropenglpostprocessing.cpp +++ b/code/graphics/gropenglpostprocessing.cpp @@ -10,9 +10,19 @@ using namespace opengl; bool post_effect::changed = true; texture *bloom::high_pass(texture *image, int size) { - Assert(image); Assert(size != 0); + if ( !image ) { + return NULL; + } + + // Get bright pass filter + special_shader *bright_sdr = shader_manager::get()->get_special_shader(special_shader::bright_pass); + + if ( !bright_sdr ) { + return NULL; + } + // Acquire render target opengl::render_target *target; @@ -28,11 +38,13 @@ texture *bloom::high_pass(texture *image, int size) { target->apply(); target->attach_texture(tex); target->clear(render_target::clr_color); - // Apply bright pass filter - special_shader *bright_sdr = shader_manager::get()->apply_special_shader(special_shader::bright_pass); - if (!bright_sdr) + // Apply bright pass filter + if ( !bright_sdr->start_pass(0) ) { + render_target::release(target); + texture_pool::release(tex); return NULL; + } bright_sdr->set_texture(b_texture, image); @@ -43,9 +55,19 @@ texture *bloom::high_pass(texture *image, int size) { } texture *bloom::blur(texture *image, int size) { - Assert(image); Assert(size != 0); + if ( !image ) { + return NULL; + } + + // Blur + special_shader *blur_sdr = shader_manager::get()->get_special_shader(special_shader::blur); + + if ( !blur_sdr ) { + return NULL; + } + // Acquire render target opengl::render_target *target; @@ -63,9 +85,12 @@ texture *bloom::blur(texture *image, int size) { target->apply(); // Blur - special_shader *blur_sdr = shader_manager::get()->apply_special_shader(special_shader::blur); - if (!blur_sdr) + if ( !blur_sdr->start_pass(0) ) { + render_target::release(target); + texture_pool::release(texture0); + texture_pool::release(texture1); return NULL; + } for (int pass = 0; pass < 2; pass++) { target->attach_texture(!pass ? texture0 : texture1); @@ -101,7 +126,6 @@ bool bloom::begin(texture *pp_img) { void bloom::end() { if (config::get_integer(config::bloom_int)) { - Assert(blurred); texture_pool::release(blurred); } } @@ -126,6 +150,12 @@ void bloom::set_uniforms(post_shader *sdr) { bool depth_of_field::begin(texture *pp_img) { Assert(pp_img); + special_shader *blur_sdr = shader_manager::get()->apply_special_shader(special_shader::blur); + + if ( !blur_sdr ) { + return false; + } + render_target *target; target = render_target::acquire(gr_screen.max_w / 4, gr_screen.max_h / 4); @@ -140,10 +170,12 @@ bool depth_of_field::begin(texture *pp_img) { Assert(texture0); Assert(texture1); - special_shader *blur_sdr = shader_manager::get()->apply_special_shader(special_shader::blur); - - if (!blur_sdr) + if ( !blur_sdr->start_pass(0) ) { + render_target::release(target); + texture_pool::release(texture0); + texture_pool::release(texture1); return false; + } for (int pass = 0; pass < 2; pass++) { target->attach_texture(!pass ? texture0 : texture1); @@ -201,19 +233,19 @@ void simple_effects::read_list() { required_string("#Effects"); while (required_string_either("#End", "$Name:")) { post_effect eff; - char buf[NAME_LENGTH]; + char buf[NAME_LENGTH+1] = { 0 }; required_string("$Name:"); stuff_string(buf, F_NAME, NAME_LENGTH); - eff.name = vm_strdup(buf); + eff.name = buf; required_string("$Uniform:"); stuff_string(buf, F_NAME, NAME_LENGTH); - eff.uniform_name = vm_strdup(buf); + eff.uniform_name = buf; required_string("$Define:"); stuff_string(buf, F_NAME, NAME_LENGTH); - eff.define_name = vm_strdup(buf); + eff.define_name = buf; required_string("$AlwaysOn:"); stuff_boolean(&eff.always_on); @@ -272,8 +304,18 @@ post_processing *post_processing::instance = NULL; void post_processing::create() { Assert(instance == NULL); - if (config::is_enabled(config::post_process)) - instance = new post_processing; + if (config::is_enabled(config::post_process)) { + instance = new(std::nothrow) post_processing; + + if ( instance && !config::is_enabled(config::post_process) ) { + delete instance; + instance = NULL; + } + } + + if ( !instance ) { + config::disable(config::post_process); + } } void post_processing::remove() { @@ -295,14 +337,26 @@ post_processing::post_processing() { image = texture_pool::acquire(target->get_width(), target->get_height()); target->attach_texture(image); + bloom_eff = NULL; + simple_eff = NULL; +#ifdef DEPTH_OF_FIELD + dof_eff = NULL; +#endif + if (!target->check_status()) { mprintf(("FBO error. Could not initialize post-processing.\n")); config::disable(config::post_process); } else { - bloom_eff = new bloom; - simple_eff = new simple_effects; + bloom_eff = new(std::nothrow) bloom; + simple_eff = new(std::nothrow) simple_effects; + + if ( !(bloom_eff && simple_eff) ) { + mprintf(("Memory error. Could not initialize post-processing.\n")); + config::disable(config::post_process); + } + #ifdef DEPTH_OF_FIELD - dof_eff = new depth_of_field; + dof_eff = new(std::nothrow) depth_of_field; depth = texture::create(target->get_width(), target->get_height(), texture::fmt_depth); #endif @@ -473,6 +527,12 @@ void gr_opengl_post_process_init() { return; } + if (!resources::text_file::file_exist("post_processing.tbl", resources::text_file::table_file)) { + mprintf(("Post-processing table not found. Disabling...\n")); + Cmdline_postprocess = 0; + return; + } + opengl::post_processing::create(); opengl::simple_effects::restore_defaults(); diff --git a/code/graphics/gropenglshader.cpp b/code/graphics/gropenglshader.cpp index eb3999a8d7..fbf939482c 100644 --- a/code/graphics/gropenglshader.cpp +++ b/code/graphics/gropenglshader.cpp @@ -204,13 +204,13 @@ static const int Num_shader_files = sizeof(GL_shader_file) / sizeof(opengl_shade // Resources system - move it to more appropiate file as soon as we get working resource manager using namespace resources; -text_file::text_file(const char *filename, txt_file_type ftype) { +bool text_file::open(const char *filename, txt_file_type ftype) { // open file CFILE *fp = cfopen(const_cast(filename), "rt", CFILE_NORMAL, get_cfile_type(ftype)); if (!fp) { - mprintf(("Could not open text file \'%s\'.\n", filename)); - return; + // nprintf(("SHADER_DEBUG", "Could not open text file \'%s\'.\n", filename)); + return false; } // load file @@ -225,6 +225,8 @@ text_file::text_file(const char *filename, txt_file_type ftype) { // clean vm_free(bytes); + + return true; } const SCP_string &text_file::read() const { @@ -273,13 +275,13 @@ bool opengl::shader::compile_link() { do { vert = compile_object((const GLcharARB*)vert_src, GL_VERTEX_SHADER_ARB); if (!vert) { - mprintf(("ERROR! Unable to create vertex shader!\n")); + mprintf((" ERROR! Unable to create vertex shader!\n")); break; } frag = compile_object((const GLcharARB*)frag_src, GL_FRAGMENT_SHADER_ARB); if (!frag) { - mprintf(("ERROR! Unable to create fragment shader!\n")); + mprintf((" ERROR! Unable to create fragment shader!\n")); break; } } while (false); @@ -288,7 +290,7 @@ bool opengl::shader::compile_link() { if (vert && frag) { shader_program = link_objects(vert, frag); if (!shader_program) - mprintf(("ERROR! Unable to create shader program!\n")); + mprintf((" ERROR! Unable to create shader program!\n")); } // clean @@ -331,7 +333,7 @@ GLhandleARB opengl::shader::compile_object(const GLcharARB *shader_source, GLenu // we failed, bail out now... if (status == 0) { // basic error check - mprintf(("%s shader failed to compile:\n%s\n", (shader_type == GL_VERTEX_SHADER_ARB) ? "Vertex" : "Fragment", info_log.c_str())); + mprintf((" %s shader failed to compile:\n%s\n", (shader_type == GL_VERTEX_SHADER_ARB) ? "Vertex" : "Fragment", info_log.c_str())); if (shader_object) { vglDeleteObjectARB(shader_object); shader_object = 0; @@ -367,7 +369,7 @@ GLhandleARB opengl::shader::link_objects(GLhandleARB vertex_object, GLhandleARB // we failed, bail out now... if (status == 0) { - mprintf(("Shader failed to link:\n%s\n", info_log.c_str())); + mprintf((" Shader failed to link:\n%s\n", info_log.c_str())); if (shader_object) { vglDeleteObjectARB(shader_object); shader_object = 0; @@ -686,7 +688,7 @@ void shader_manager::apply_main_shader(int flags) { current_main->apply(); } else { current_main = NULL; - mprintf(("Requested main shader not found: 0x%x.\n", flags)); + mprintf((" Requested main shader not found: 0x%x.\n", flags)); } } } @@ -713,26 +715,28 @@ opengl::post_shader *shader_manager::apply_post_shader(int flags) { return current_post; } -opengl::special_shader *shader_manager::apply_special_shader(int flags) { +opengl::special_shader *shader_manager::get_special_shader(int flags) { special_shader *sshader; SCP_map::iterator itr = special_shaders.find(flags); if (itr == special_shaders.end()) { mprintf((" Compiling special shader -> %s / %s ... \n", special_shader::get_vert_name(flags).c_str(), special_shader::get_frag_name(flags).c_str())); - resources::text_file *vert = new resources::text_file(special_shader::get_vert_name(flags).c_str(), resources::text_file::shader_source); - resources::text_file *frag = new resources::text_file(special_shader::get_frag_name(flags).c_str(), resources::text_file::shader_source); - sshader = new opengl::special_shader(flags, vert, frag); - special_shaders[flags] = sshader; + resources::text_file vert; + resources::text_file frag; - delete vert; - delete frag; + bool r_vert = vert.open(special_shader::get_vert_name(flags).c_str(), resources::text_file::shader_source); + bool r_frag = frag.open(special_shader::get_frag_name(flags).c_str(), resources::text_file::shader_source); + + if ( !(r_vert && r_frag) ) { + return NULL; + } + + sshader = new opengl::special_shader(flags, &vert, &frag); + special_shaders[flags] = sshader; } else sshader = (*itr).second; - if (!sshader->start_pass(0)) - return NULL; - return sshader; } @@ -741,10 +745,10 @@ void shader_manager::apply_fixed_pipeline() { } shader_manager::shader_manager() : current_main(NULL), current_post(NULL) { - mprintf(("\nInitializing Shaders Manager...\n")); + mprintf((" Initializing Shaders Manager...\n")); load_main_shaders(); // load_post_shaders(); //we load post-processing shaders on demand - mprintf(("Shaders Manager initialized.\n\n")); + mprintf((" Shaders Manager initialized.\n\n")); } shader_manager::~shader_manager() { @@ -766,7 +770,7 @@ shader_manager::~shader_manager() { opengl::shader_manager *opengl::shader_manager::instance = NULL; void shader_manager::load_main_shaders() { - mprintf(("Loading and compiling main shaders...\n")); + mprintf((" Loading and compiling main shaders...\n")); // check if we can use new main shaders bool main_vert = resources::text_file::file_exist("main-v.sdr", resources::text_file::shader_source) != 0; @@ -805,55 +809,54 @@ void shader_manager::load_main_shaders() { else frag_name = shader_file->frag; - mprintf((" Compiling main shader -> %s (%s) / %s (%s) ... \n", vert_name, shader_file->vert, frag_name, shader_file->frag)); + mprintf((" Compiling main shader -> %s (%s) / %s (%s) ... \n", vert_name, shader_file->vert, frag_name, shader_file->frag)); // create new shader program - resources::text_file *vert = new resources::text_file(vert_name, resources::text_file::shader_source); - resources::text_file *frag = new resources::text_file(frag_name, resources::text_file::shader_source); - opengl::main_shader *sdr = new opengl::main_shader(vert, frag); + resources::text_file vert, frag; + opengl::main_shader *sdr = NULL; - // configure shader - sdr->configure(shader_file->flags); + bool r_vert = vert.open(vert_name, resources::text_file::shader_source); + bool r_frag = frag.open(frag_name, resources::text_file::shader_source); + + if (r_vert && r_frag) { + sdr = new(std::nothrow) opengl::main_shader(&vert, &frag); + Verify( sdr ); + + // configure shader + sdr->configure(shader_file->flags); + } else { + mprintf((" Shader file(s) (%s / %s) not found!\n", vert_name, frag_name)); + } // compile shader and add it to shaders list - if (sdr->compile_link()) + if (sdr && sdr->compile_link()) main_shaders[shader_file->flags] = sdr; else { // if problem caused by height map - disable if (shader_file->flags & main_shader::flag_height_map) { - mprintf((" Shader in_error! Disabling height maps!\n")); + mprintf((" Shader in_error! Disabling height maps!\n")); config::disable(config::height_map); } // if problem caused by normal map - disable if (shader_file->flags & main_shader::flag_normal_map) { - mprintf((" Shader in_error! Disabling normal maps and height maps!\n")); + mprintf((" Shader in_error! Disabling normal maps and height maps!\n")); config::disable(config::height_map); config::disable(config::normal_map); } // there is no way to use glsl if (i == 0) { - mprintf((" Shader in_error! Disabling GLSL!\n")); + mprintf((" Shader in_error! Disabling GLSL!\n")); config::disable(config::glsl); config::disable(config::height_map); config::disable(config::normal_map); - delete sdr; - delete vert; - delete frag; - destroy(); return; } - - delete sdr; } - - // clean - delete vert; - delete frag; } } @@ -863,27 +866,27 @@ opengl::post_shader *shader_manager::load_post_shader(int flags) { mprintf((" Compiling post shader (0x%x) -> %s / %s ... \n", flags, vert_name, frag_name)); // create new shader program - resources::text_file *vert = new resources::text_file(vert_name, resources::text_file::shader_source); - resources::text_file *frag = new resources::text_file(frag_name, resources::text_file::shader_source); - opengl::post_shader *sdr = new opengl::post_shader(vert, frag); + resources::text_file vert, frag; + opengl::post_shader *sdr = NULL; - // configure shader - sdr->configure(flags); + bool r_vert = vert.open(vert_name, resources::text_file::shader_source); + bool r_frag = frag.open(frag_name, resources::text_file::shader_source); + + if (r_vert && r_frag) { + sdr = new(std::nothrow) opengl::post_shader(&vert, &frag); + Verify( sdr ); + + // configure shader + sdr->configure(flags); + } // compile shader and add it to shaders list - if (sdr->compile_link()) + if (sdr && sdr->compile_link()) post_shaders[flags] = sdr; else { mprintf((" Post-processing shader in_error!\n")); - - delete sdr; - sdr = NULL; } - // clean - delete vert; - delete frag; - return sdr; } diff --git a/code/graphics/gropenglshader.h b/code/graphics/gropenglshader.h index a7883a8246..5245d98e31 100644 --- a/code/graphics/gropenglshader.h +++ b/code/graphics/gropenglshader.h @@ -41,7 +41,9 @@ namespace resources { table_file }; - text_file(const char *, txt_file_type ftype); + text_file() { } + + bool open(const char *, txt_file_type ftype); const SCP_string &read() const; @@ -470,10 +472,10 @@ namespace opengl { */ post_shader *apply_post_shader(int flags); - /** Applies specific special %shader. + /** Get specific special %shader. * @param flags special %shader index */ - special_shader *apply_special_shader(int flags); + special_shader *get_special_shader(int flags); /** Turns main %shader off. */ void apply_fixed_pipeline(); diff --git a/code/graphics/gropengltexture.cpp b/code/graphics/gropengltexture.cpp index 4e4dac5eca..e862b98a39 100644 --- a/code/graphics/gropengltexture.cpp +++ b/code/graphics/gropengltexture.cpp @@ -914,7 +914,7 @@ int opengl_create_texture(int bitmap_handle, int bitmap_type, tcache_slot_opengl } if ( (Detail.hardware_textures < 4) && (bitmap_type != TCACHE_TYPE_AABITMAP) && (bitmap_type != TCACHE_TYPE_INTERFACE) - && ((bitmap_type != TCACHE_TYPE_COMPRESSED) || (bitmap_type == TCACHE_TYPE_COMPRESSED) && (max_levels > 1)) ) + && ((bitmap_type != TCACHE_TYPE_COMPRESSED) || ((bitmap_type == TCACHE_TYPE_COMPRESSED) && (max_levels > 1))) ) { if (max_levels == 1) { // if we are going to cull the size then we need to force a resize @@ -1923,7 +1923,7 @@ namespace opengl { SCP_multimap , render_target*> render_target::pool; - render_target::render_target(int w, int h) : width(w), height(h), depth_t(NULL), depth_rb(NULL), use_rb(false) { + render_target::render_target(int w, int h) : depth_rb(NULL), depth_t(NULL), use_rb(false), target(0), width(w), height(h) { Assert(w > 0 && h > 0); // Create frame buffer diff --git a/code/graphics/gropengltexture.h b/code/graphics/gropengltexture.h index 9715cb87e3..1a26340103 100644 --- a/code/graphics/gropengltexture.h +++ b/code/graphics/gropengltexture.h @@ -167,8 +167,9 @@ namespace opengl { * @param tex released texture */ static void release(texture *tex) { - Assert(tex); - pool.insert(std::pair, texture*>(std::pair(tex->get_width(), tex->get_height()), tex)); + if (tex) { + pool.insert(std::pair, texture*>(std::pair(tex->get_width(), tex->get_height()), tex)); + } } }; diff --git a/code/graphics/gropengltnl.cpp b/code/graphics/gropengltnl.cpp index ea0185cb33..fcc4b6a097 100644 --- a/code/graphics/gropengltnl.cpp +++ b/code/graphics/gropengltnl.cpp @@ -953,8 +953,13 @@ void gr_opengl_set_projection_matrix(float fov, float aspect, float z_near, floa } GL_CHECK_FOR_ERRORS("start of set_projection_matrix()()"); - - glViewport(gr_screen.offset_x, (gr_screen.max_h - gr_screen.offset_y - gr_screen.clip_height), gr_screen.clip_width, gr_screen.clip_height); + + if (GL_rendering_to_framebuffer) { + glViewport(gr_screen.offset_x, gr_screen.offset_y, gr_screen.clip_width, gr_screen.clip_height); + } else { + glViewport(gr_screen.offset_x, (gr_screen.max_h - gr_screen.offset_y - gr_screen.clip_height), gr_screen.clip_width, gr_screen.clip_height); + } + glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -964,7 +969,11 @@ void gr_opengl_set_projection_matrix(float fov, float aspect, float z_near, floa clip_height = tan( (double)fov * 0.5 ) * z_near; clip_width = clip_height * (GLdouble)aspect; - glFrustum( -clip_width, clip_width, -clip_height, clip_height, z_near, z_far ); + if (GL_rendering_to_framebuffer) { + glFrustum( -clip_width, clip_width, clip_height, -clip_height, z_near, z_far ); + } else { + glFrustum( -clip_width, clip_width, -clip_height, clip_height, z_near, z_far ); + } glMatrixMode(GL_MODELVIEW); diff --git a/code/hud/hud.cpp b/code/hud/hud.cpp index cb498d0273..1209ce1e26 100644 --- a/code/hud/hud.cpp +++ b/code/hud/hud.cpp @@ -1200,7 +1200,7 @@ void hud_render_multi_ping() } // if we're in multiplayer mode, display our ping time to the server - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_CLIENT && (Net_player != NULL)){ char ping_str[50]; memset(ping_str,0,50); @@ -1788,7 +1788,10 @@ void hud_show_damage_popup() n_firstline++; gr_string(sx, sy, n_firstline); } else { - gr_string(sx, sy, hud_targetbox_truncate_subsys_name(hud_subsys_list[best_index].name)); + char temp_name[NAME_LENGTH]; + strcpy(temp_name, hud_subsys_list[best_index].name); + hud_targetbox_truncate_subsys_name(temp_name); + gr_string(sx, sy, temp_name); } sprintf(buf, XSTR( "%d%%", 219), best_str); @@ -2686,7 +2689,7 @@ void hud_add_objective_messsage(int type, int status) Objective_display.goal_status=status; // if this is a multiplayer tvt game - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM) && (Net_player != NULL)){ + if(MULTI_TEAM && (Net_player != NULL)){ mission_goal_fetch_num_resolved(type, &Objective_display.goal_nresolved, &Objective_display.goal_ntotal, Net_player->p_info.team); } else { mission_goal_fetch_num_resolved(type, &Objective_display.goal_nresolved, &Objective_display.goal_ntotal); @@ -2700,7 +2703,12 @@ void hud_maybe_display_subspace_notify() { int warp_aborted = 0; // maybe make gauge active - if ( (Player->control_mode == PCM_WARPOUT_STAGE1) || (Player->control_mode == PCM_WARPOUT_STAGE2) || (Player->control_mode == PCM_WARPOUT_STAGE3) ) { + if ( (Player->control_mode == PCM_WARPOUT_STAGE1) + || (Player->control_mode == PCM_WARPOUT_STAGE2) + || (Player->control_mode == PCM_WARPOUT_STAGE3) + || (Sexp_hud_display_warpout > 0) + ) + { if (!hud_subspace_notify_active()) { // keep sound from being played 1e06 times hud_start_subspace_notify(); @@ -2717,6 +2725,13 @@ void hud_maybe_display_subspace_notify() return; } + if ( Sexp_hud_display_warpout > 1 ) { + if ( Sexp_hud_display_warpout < timestamp()) { + Sexp_hud_display_warpout = 0; + return; + } + } + if ( Objective_display_gauge.first_frame < 0 ) { return; } diff --git a/code/hud/hudescort.cpp b/code/hud/hudescort.cpp index ac0dc09487..46826a23eb 100644 --- a/code/hud/hudescort.cpp +++ b/code/hud/hudescort.cpp @@ -199,7 +199,7 @@ int escort_compare_func(const void *e1, const void *e2) escort2 = (escort_info*) e2; // multiplayer dogfight - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)){ + if(MULTI_DOGFIGHT){ int n1, n2; n1 = find_player_id(escort1->np_id); @@ -246,7 +246,7 @@ void hud_create_complete_escort_list(escort_info *escorts, int *num_escorts) int idx; // multiplayer dogfight - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)){ + if(MULTI_DOGFIGHT){ for(idx=0; idxteam == target_team) && (!iff_x_attacks_y(Player_ship->team, target_team))) { // if we're in multiplayer dogfight, ignore this - if(!((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT))) { + if(!MULTI_DOGFIGHT) { return 1; } } diff --git a/code/hud/hudparse.cpp b/code/hud/hudparse.cpp index 403fc14e0a..4f0773a800 100644 --- a/code/hud/hudparse.cpp +++ b/code/hud/hudparse.cpp @@ -12,6 +12,7 @@ #include "graphics/2d.h" #include "localization/localize.h" #include "hud/hud.h" +#include "mission/missiontraining.h" //for Max_directives #include "hud/hudescort.h" //#include "weapon/emp.h" #include "hud/hudparse.h" //Duh. @@ -29,6 +30,7 @@ extern int ships_inited; //Need this extern char Hud_Gauge_Names[NUM_HUD_GAUGES][NAME_LENGTH]; float Hud_unit_multiplier = 1.0f; //Backslash +bool Hud_lead_alternate = false; // Goober5000 int Hud_reticle_style = HUD_RETICLE_STYLE_FS2; @@ -44,26 +46,26 @@ int Hud_reticle_style = HUD_RETICLE_STYLE_FS2; #define HUD_VAR(a) offsetof(hud_info, a) gauge_info gauges[MAX_HUD_GAUGE_TYPES] = { - { NULL, HUD_VAR(Player_shield_coords), "$Player Shield:", 396, 379, 634, 670, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, - { NULL, HUD_VAR(Target_shield_coords), "$Target Shield:", 142, 379, 292, 670, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, - { NULL, HUD_VAR(Shield_mini_coords), "$Shield Mini:", 305, 291, 497, 470, 0, HUD_VAR(Shield_mini_fname), 0, 0, 0, 0, 0, -1, -1 }, - { NULL, HUD_VAR(Aburn_coords), "$Afterburner Energy:", 171, 265, 274, 424, HUD_VAR(Aburn_size), HUD_VAR(Aburn_fname), 0, 0, 0, 0, HUD_VAR(Aburn_move_flag), -1, -1 }, - { NULL, HUD_VAR(Wenergy_coords), "$Weapons Energy:", 416, 265, 666, 424, HUD_VAR(Wenergy_size), HUD_VAR(Wenergy_fname), 0, 0, 0, 0, HUD_VAR(Wenergy_move_flag), -1, -1 }, - { NULL, HUD_VAR(Wenergy_text_coords), "$Weapons Energy Text:", 439, 318, 708, 509, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, - { NULL, HUD_VAR(Escort_coords), "$Escort List:", 486, 206, 865, 330, 0, HUD_VAR(Escort_filename[0]), 0, HUD_VAR(Escort_htext), 0, 0, 0, -1, -1 }, + { NULL, HUD_VAR(Player_shield_coords), "Player Shield", 396, 379, 634, 670, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, + { NULL, HUD_VAR(Target_shield_coords), "Target Shield", 142, 379, 292, 670, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, + { NULL, HUD_VAR(Shield_mini_coords), "Shield Mini", 305, 291, 497, 470, 0, HUD_VAR(Shield_mini_fname), 0, 0, 0, 0, 0, -1, -1 }, + { NULL, HUD_VAR(Aburn_coords), "Afterburner Energy", 171, 265, 274, 424, HUD_VAR(Aburn_size), HUD_VAR(Aburn_fname), 0, 0, 0, 0, HUD_VAR(Aburn_move_flag), -1, -1 }, + { NULL, HUD_VAR(Wenergy_coords), "Weapons Energy", 416, 265, 666, 424, HUD_VAR(Wenergy_size), HUD_VAR(Wenergy_fname), 0, 0, 0, 0, HUD_VAR(Wenergy_move_flag), -1, -1 }, + { NULL, HUD_VAR(Wenergy_text_coords), "Weapons Energy Text", 439, 318, 708, 509, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, + { NULL, HUD_VAR(Escort_coords), "Escort List", 486, 206, 865, 330, 0, HUD_VAR(Escort_filename[0]), 0, HUD_VAR(Escort_htext), 0, 0, 0, -1, -1 }, //Mini-gauges - { &gauges[2], HUD_VAR(Hud_mini_3digit), "$Text Base:", 310, 298, 502, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[2], HUD_VAR(Hud_mini_1digit), "$Text 1 digit:", 316, 298, 511, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, -// { &gauges[2], HUD_VAR(Hud_mini_2digit), "$Text 2 digit:", 213, 298, 346, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[2], HUD_VAR(Hud_mini_2digit), "$Text 2 digit:", 313, 298, 506, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_htext_coords), "$Header Text:", 489, 208, 869, 331, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, - { &gauges[6], HUD_VAR(Escort_list), "$List:", 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_entry), "$Ship:", 0, 11, 0, 11, 0, HUD_VAR(Escort_filename[1]), 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_entry_last), "$Last Ship:", 0, 11, 0, 11, 0, HUD_VAR(Escort_filename[2]), 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_name), "$Ship Name:", 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_integrity), "$Ship Hull:", 128, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, - { &gauges[6], HUD_VAR(Escort_status), "$Ship Status:", -12, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 } + { &gauges[2], HUD_VAR(Hud_mini_3digit), "Text Base", 310, 298, 502, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[2], HUD_VAR(Hud_mini_1digit), "Text 1 digit", 316, 298, 511, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, +// { &gauges[2], HUD_VAR(Hud_mini_2digit), "Text 2 digit", 213, 298, 346, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[2], HUD_VAR(Hud_mini_2digit), "Text 2 digit", 313, 298, 506, 477, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_htext_coords), "Header Text", 489, 208, 869, 331, 0, 0, 0, 0, 0, 0, 0, -1, -1 }, + { &gauges[6], HUD_VAR(Escort_list), "List", 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_entry), "Ship", 0, 11, 0, 11, 0, HUD_VAR(Escort_filename[1]), 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_entry_last), "Last Ship", 0, 11, 0, 11, 0, HUD_VAR(Escort_filename[2]), 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_name), "Ship Name", 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_integrity), "Ship Hull", 128, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 }, + { &gauges[6], HUD_VAR(Escort_status), "Ship Status", -12, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, HG_NOADD, -1 } }; //Number of gauges @@ -181,12 +183,16 @@ int stuff_coords(hud_info* dest_hud, gauge_info* cg, bool required = false) float percentage_temp[2]; int size_temp[2]; bool size_defined = false; + char token_name[NAME_LENGTH + 2] = "$"; + + strcat_s(token_name, cg->fieldname); + strcat_s(token_name, ":"); if(required) { - required_string(cg->fieldname); + required_string(token_name); } - if(!required && !optional_string(cg->fieldname)) + if(!required && !optional_string(token_name)) { return 0; } @@ -332,7 +338,7 @@ static void parse_resolution_gauges(hud_info* dest_hud) { cg = &gauges[i]; - if(!parent && !strnicmp(cg->fieldname + sizeof(char), gaugename, strlen(cg->fieldname) - 2)) + if(!parent && !stricmp(cg->fieldname, gaugename)) { parent = cg; break; @@ -386,6 +392,7 @@ hud_info* parse_ship_start() if(ship_index == -1) { + WarningEx(LOCATION, "\"$Ship:\" name \"%s\" not found.", shipname); return NULL; } @@ -464,10 +471,7 @@ void parse_custom_gauge() cg->moveflag_dest = HUD_VAR(custom_gauge_moveflags[0]) + (Num_custom_gauges * sizeof(bool)); required_string("$Name:"); - //Gotta make this a token - cg->fieldname[0] = '$'; - stuff_string(cg->fieldname + 1, F_NAME, sizeof(cg->fieldname) - 1); - strcat_s(cg->fieldname, ":"); + stuff_string(cg->fieldname, F_NAME, NAME_LENGTH); if(optional_string("+Default640X:")) { @@ -489,6 +493,9 @@ void parse_custom_gauge() { stuff_string(buffer, F_NAME, NAME_LENGTH); cg->parent = hud_get_gauge(buffer); + if (cg->parent == NULL) { + WarningEx(LOCATION, "\"+Parent:\" HUD gauge \"%s\" not found!", buffer); + } } Num_gauge_types++; @@ -517,6 +524,11 @@ void parse_hud_gauges_tbl(char *filename) read_file_text(filename, CF_TYPE_TABLES); reset_parse(); + if(optional_string("$Max Directives:")) + { + stuff_int(&Max_directives); + } + if(optional_string("$Max Escort Ships:")) { stuff_int(&Max_escort_ships); @@ -554,6 +566,11 @@ void parse_hud_gauges_tbl(char *filename) Hud_reticle_style = temp; } + if(optional_string("$Alternate Lead Indicator:")) + { + stuff_boolean(&Hud_lead_alternate); + } + if(optional_string("#Custom Gauges")) { while(required_string_either("#End", "$Name:")) @@ -737,7 +754,7 @@ int hud_get_gauge_index(char* name) { for(int i = 0; i < Num_gauge_types; i++) { - if(!strnicmp(gauges[i].fieldname + sizeof(char), name, strlen(gauges[i].fieldname) - 2)) + if(!stricmp(gauges[i].fieldname, name)) { return i; } diff --git a/code/hud/hudparse.h b/code/hud/hudparse.h index d579ab1028..f304e29f66 100644 --- a/code/hud/hudparse.h +++ b/code/hud/hudparse.h @@ -145,6 +145,7 @@ typedef struct gauge_info //Variables extern int Num_custom_gauges; extern float Hud_unit_multiplier; +extern bool Hud_lead_alternate; #define NUM_HUD_RETICLE_STYLES 2 diff --git a/code/hud/hudreticle.cpp b/code/hud/hudreticle.cpp index bc934ef73a..cc786ecd2a 100644 --- a/code/hud/hudreticle.cpp +++ b/code/hud/hudreticle.cpp @@ -585,7 +585,12 @@ void hud_show_reticle_weapons() // threat exists, and draw flashing frames. void hud_show_lock_threat() { - int frame_offset; + int frame_offset, num_frames; + + //Let's find out how many frames our ani has, and adjust accordingly + num_frames = Reticle_gauges[RETICLE_LOCK_WARN].num_frames; + //We need at least two frames here + Assert( num_frames >= 2 ); if ( Player->threat_flags & (THREAT_LOCK | THREAT_ATTEMPT_LOCK) ) { if ( timestamp_elapsed(Threat_lock_timer) ) { @@ -595,7 +600,7 @@ void hud_show_lock_threat() Threat_lock_timer = timestamp(THREAT_LOCK_FLASH); } Threat_lock_frame++; - if ( Threat_lock_frame > 2 ) { + if ( Threat_lock_frame > (num_frames - 1) ) { //The first frame being the default "off" setting, we need to cycle through all the other frames Threat_lock_frame = 1; } if ( (Threat_lock_frame == 2) && (Player->threat_flags & THREAT_ATTEMPT_LOCK ) ) { @@ -633,13 +638,18 @@ void hud_show_lock_threat() // threat exists, and draw flashing frames. void hud_show_dumbfire_threat() { - int frame_offset; + int frame_offset, num_frames; + + //Check how many frames the ani actually has + num_frames = Reticle_gauges[RETICLE_LASER_WARN].num_frames; + //We need at least two frames here + Assert( num_frames >= 2 ); if ( Player->threat_flags & THREAT_DUMBFIRE ) { if ( timestamp_elapsed(Threat_dumbfire_timer) ) { Threat_dumbfire_timer = timestamp(THREAT_DUMBFIRE_FLASH); Threat_dumbfire_frame++; - if ( Threat_dumbfire_frame > 2 ) { + if ( Threat_dumbfire_frame > (num_frames - 1) ) { //The first frame being the default "off" setting, we need to cycle through all the other frames Threat_dumbfire_frame = 1; } } diff --git a/code/hud/hudsquadmsg.cpp b/code/hud/hudsquadmsg.cpp index 00ab6e6efa..5883d84c58 100644 --- a/code/hud/hudsquadmsg.cpp +++ b/code/hud/hudsquadmsg.cpp @@ -1072,7 +1072,7 @@ void hud_squadmsg_send_to_all_fighters( int command, int player_num ) } // check for multiplayer mode - if((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)) { + if(MULTIPLAYER_CLIENT) { send_player_order_packet(SQUAD_MSG_ALL, 0, command); return; } @@ -1229,7 +1229,7 @@ int hud_squadmsg_send_ship_command( int shipnum, int command, int send_message, } // check for multiplayer mode - if((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if(MULTIPLAYER_CLIENT){ send_player_order_packet(SQUAD_MSG_SHIP, shipnum, command); return 0; } @@ -1391,9 +1391,9 @@ int hud_squadmsg_send_ship_command( int shipnum, int command, int send_message, ai_submode = SM_ATTACK; // if no enemies present, use the affirmative, instead of engaging enemies message if ( hud_squadmsg_enemies_present() ) - message = MESSAGE_YESSIR; - else message = MESSAGE_ENGAGE; + else + message = MESSAGE_YESSIR; target_shipname = NULL; break; @@ -1405,7 +1405,7 @@ int hud_squadmsg_send_ship_command( int shipnum, int command, int send_message, // the following are support ship options!!! case REARM_REPAIR_ME_ITEM: - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (player_num != -1) ){ + if( MULTIPLAYER_MASTER && (player_num != -1) ){ hud_squadmsg_repair_rearm(0,&Objects[Net_players[player_num].m_player->objnum]); } else { hud_squadmsg_repair_rearm(0); // note we return right away. repair/rearm code handles messaging, etc @@ -1416,7 +1416,7 @@ int hud_squadmsg_send_ship_command( int shipnum, int command, int send_message, return 0; case ABORT_REARM_REPAIR_ITEM: - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (player_num != -1) ){ + if( MULTIPLAYER_MASTER && (player_num != -1) ){ hud_squadmsg_repair_rearm_abort(0,&Objects[Net_players[player_num].m_player->objnum]); } else { hud_squadmsg_repair_rearm_abort(0); // note we return right away. repair/rearm code handles messaging, etc @@ -1511,7 +1511,7 @@ int hud_squadmsg_send_wing_command( int wingnum, int command, int send_message, } // check for multiplayer mode - if((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if(MULTIPLAYER_CLIENT){ send_player_order_packet(SQUAD_MSG_WING, wingnum,command); return 0; } @@ -1642,10 +1642,11 @@ int hud_squadmsg_send_wing_command( int wingnum, int command, int send_message, case ENGAGE_ENEMY_ITEM: ai_mode = AI_GOAL_CHASE_ANY; ai_submode = SM_ATTACK; + // if no enemies present, use the affirmative, instead of engaging enemies message if ( hud_squadmsg_enemies_present() ) - message = MESSAGE_YESSIR; - else message = MESSAGE_ENGAGE; + else + message = MESSAGE_YESSIR; target_shipname = NULL; break; @@ -2467,7 +2468,7 @@ int hud_squadmsg_do_frame( ) hud_set_gauge_color(HUD_MESSAGE_BOX); // check for multiplayer mode - this is really a special case checker for support ship requesting and aborting - if((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) && (Squad_msg_mode == SM_MODE_REPAIR_REARM || Squad_msg_mode == SM_MODE_REPAIR_REARM_ABORT)){ + if(MULTIPLAYER_CLIENT && (Squad_msg_mode == SM_MODE_REPAIR_REARM || Squad_msg_mode == SM_MODE_REPAIR_REARM_ABORT)){ char *subsys_name; // int who_to_sig; ushort net_sig; @@ -2527,7 +2528,7 @@ int hud_squadmsg_do_frame( ) break; case SM_MODE_REPAIR_REARM: - //if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (addr != NULL)){ + //if( MULTIPLAYER_MASTER && (addr != NULL)){ // hud_squadmsg_repair_rearm(1,&Objects[Net_players[player_num].player->objnum]); //} else { hud_squadmsg_repair_rearm(1); // note we return right away. repair/rearm code handles messaging, etc @@ -2535,7 +2536,7 @@ int hud_squadmsg_do_frame( ) break; case SM_MODE_REPAIR_REARM_ABORT: - //if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (addr != NULL)){ + //if( MULTIPLAYER_MASTER && (addr != NULL)){ // hud_squadmsg_repair_rearm_abort(1,&Objects[Net_players[player_num].player->objnum]); //} else { hud_squadmsg_repair_rearm_abort(1); // note we return right away. repair/rearm code handles messaging, etc diff --git a/code/hud/hudtarget.cpp b/code/hud/hudtarget.cpp index e09750cccd..516cb0a975 100644 --- a/code/hud/hudtarget.cpp +++ b/code/hud/hudtarget.cpp @@ -4137,13 +4137,37 @@ void hud_show_lead_indicator(vec3d *target_world_pos) hud_set_iff_color(targetp, 1); } - if ( indicator_frame >= 0 ) { - sx = lead_target_vertex.sx; - sy = lead_target_vertex.sy; + if (Hud_lead_alternate) { + vertex target_vertex; + g3_rotate_vertex(&target_vertex, target_world_pos); + + if (target_vertex.codes == 0) { // on screen - gr_unsize_screen_posf(&sx, &sy); + g3_project_vertex(&target_vertex); + if (!(target_vertex.flags & PF_OVERFLOW)) { + + //indicator_frame = Reticle2_indicator_gauge.first_frame + frame_offset; + if ( indicator_frame >= 0 ) { + //hud_set_gauge_color(HUD_CENTER_RETICLE, HUD_C_BRIGHT); + float reticle2_target_sx = target_vertex.sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0] - lead_target_vertex.sx; + float reticle2_target_sy = target_vertex.sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1] - lead_target_vertex.sy; + + reticle2_target_sx += HUD_offset_x + Hud_reticle_center[gr_screen.res][0] + 0.5f; + reticle2_target_sy += HUD_offset_y + Hud_reticle_center[gr_screen.res][1] + 0.5f; + + GR_AABITMAP(indicator_frame, fl2i(reticle2_target_sx)+HUD_nose_x, fl2i(reticle2_target_sy)+HUD_nose_y); + } + } + } + } else { + if ( indicator_frame >= 0 ) { + sx = lead_target_vertex.sx; + sy = lead_target_vertex.sy; - GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + gr_unsize_screen_posf(&sx, &sy); + + GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + } } } } @@ -4210,17 +4234,41 @@ void hud_show_lead_indicator(vec3d *target_world_pos) hud_set_iff_color(targetp, 1); } - if ( indicator_frame >= 0 ) { - sx = lead_target_vertex.sx; - sy = lead_target_vertex.sy; + if (Hud_lead_alternate) { + vertex target_vertex; + g3_rotate_vertex(&target_vertex, target_world_pos); + + if (target_vertex.codes == 0) { // on screen - gr_unsize_screen_posf(&sx, &sy); + g3_project_vertex(&target_vertex); + if (!(target_vertex.flags & PF_OVERFLOW)) { + + //indicator_frame = Reticle2_indicator_gauge.first_frame + frame_offset; + if ( indicator_frame >= 0 ) { + //hud_set_gauge_color(HUD_CENTER_RETICLE, HUD_C_BRIGHT); + float reticle2_target_sx = target_vertex.sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0] - lead_target_vertex.sx; + float reticle2_target_sy = target_vertex.sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1] - lead_target_vertex.sy; + + reticle2_target_sx += HUD_offset_x + Hud_reticle_center[gr_screen.res][0] + 0.5f; + reticle2_target_sy += HUD_offset_y + Hud_reticle_center[gr_screen.res][1] + 0.5f; + + GR_AABITMAP(indicator_frame, fl2i(reticle2_target_sx)+HUD_nose_x, fl2i(reticle2_target_sy)+HUD_nose_y); + } + } + } + } else { + if ( indicator_frame >= 0 ) { + sx = lead_target_vertex.sx; + sy = lead_target_vertex.sy; - //WMC - shake them - sx += HUD_nose_x; - sy += HUD_nose_y; + gr_unsize_screen_posf(&sx, &sy); - GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + //WMC - shake them + sx += HUD_nose_x; + sy += HUD_nose_y; + + GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + } } } } @@ -4345,17 +4393,41 @@ void hud_show_lead_indicator_quick(vec3d *target_world_pos, object *targetp) g3_project_vertex(&lead_target_vertex); if (!(lead_target_vertex.flags & PF_OVERFLOW)) { - if ( indicator_frame >= 0 ) { - sx = lead_target_vertex.sx; - sy = lead_target_vertex.sy; + if (Hud_lead_alternate) { + vertex target_vertex; + g3_rotate_vertex(&target_vertex, target_world_pos); + + if (target_vertex.codes == 0) { // on screen - gr_unsize_screen_posf(&sx, &sy); + g3_project_vertex(&target_vertex); + if (!(target_vertex.flags & PF_OVERFLOW)) { + + //indicator_frame = Reticle2_indicator_gauge.first_frame + frame_offset; + if ( indicator_frame >= 0 ) { + //hud_set_gauge_color(HUD_CENTER_RETICLE, HUD_C_BRIGHT); + float reticle2_target_sx = target_vertex.sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0] - lead_target_vertex.sx; + float reticle2_target_sy = target_vertex.sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1] - lead_target_vertex.sy; + + reticle2_target_sx += HUD_offset_x + Hud_reticle_center[gr_screen.res][0] + 0.5f; + reticle2_target_sy += HUD_offset_y + Hud_reticle_center[gr_screen.res][1] + 0.5f; + + GR_AABITMAP(indicator_frame, fl2i(reticle2_target_sx)+HUD_nose_x, fl2i(reticle2_target_sy)+HUD_nose_y); + } + } + } + } else { + if ( indicator_frame >= 0 ) { + sx = lead_target_vertex.sx; + sy = lead_target_vertex.sy; - //WMC - shake them - sx += HUD_nose_x; - sy += HUD_nose_y; + gr_unsize_screen_posf(&sx, &sy); - GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + //WMC - shake them + sx += HUD_nose_x; + sy += HUD_nose_y; + + GR_AABITMAP(indicator_frame, fl2i(sx - Lead_indicator_half[Hud_reticle_style][gr_screen.res][0]), fl2i(sy - Lead_indicator_half[Hud_reticle_style][gr_screen.res][1])); + } } } } diff --git a/code/hud/hudtargetbox.cpp b/code/hud/hudtargetbox.cpp index eeea6284dc..ae269651e7 100644 --- a/code/hud/hudtargetbox.cpp +++ b/code/hud/hudtargetbox.cpp @@ -196,7 +196,7 @@ static int Last_ts; // holds last target status. void hud_blit_target_integrity(int disabled,int force_obj_num = -1); // cut down long subsystem names to a more manageable length -char *hud_targetbox_truncate_subsys_name(char *outstr) +void hud_targetbox_truncate_subsys_name(char *outstr) { if(Lcl_gr){ if ( strstr(outstr, "communication") ) { @@ -244,17 +244,15 @@ char *hud_targetbox_truncate_subsys_name(char *outstr) } else if ( strstr(outstr, "laser") || strstr(outstr, "turret") || strstr(outstr, "missile") ) { strcpy(outstr, "tourelle"); } - } else { - if ( strstr(outstr, XSTR( "communication", 333))) { - strcpy( outstr, XSTR( "comm", 334) ); - } else if ( strstr(outstr, XSTR( "navigation", 335))) { - strcpy( outstr, XSTR( "nav", 336) ); - } else if (!stricmp(outstr, "Gas Collector")) { + } else { + if (strstr(outstr, XSTR("communication", 333))) { + strcpy(outstr, XSTR("comm", 334)); + } else if (strstr(outstr, XSTR("navigation", 335))) { + strcpy(outstr, XSTR("nav", 336)); + } else if (strstr(outstr, "gas collector")) { strcpy(outstr, "collector"); } } - - return outstr; } //swich through the valid targetbox modes diff --git a/code/hud/hudtargetbox.h b/code/hud/hudtargetbox.h index 65f66346ea..1cf488fef3 100644 --- a/code/hud/hudtargetbox.h +++ b/code/hud/hudtargetbox.h @@ -72,7 +72,7 @@ void hud_render_target_weapon(object *target_objp); void hud_update_cargo_scan_sound(); void hud_cargo_scan_update(object *targetp, float frametime); -char *hud_targetbox_truncate_subsys_name(char *outstr); +void hud_targetbox_truncate_subsys_name(char *outstr); //swich through the valid targetbox modes void hud_targetbox_switch_wireframe_mode(); diff --git a/code/io/joy_ff.cpp b/code/io/joy_ff.cpp index 86930ab8e7..df90676334 100644 --- a/code/io/joy_ff.cpp +++ b/code/io/joy_ff.cpp @@ -331,6 +331,12 @@ int joy_ff_create_effects() void joy_ff_stop_effects() { joy_ff_afterburn_off(); + + if (pDeathroll1) + pDeathroll1->Stop(); + + if (pDeathroll2) + pDeathroll2->Stop(); } void joy_ff_mission_init(vec3d v) diff --git a/code/io/keycontrol.cpp b/code/io/keycontrol.cpp index 069c550f10..71c59b1786 100644 --- a/code/io/keycontrol.cpp +++ b/code/io/keycontrol.cpp @@ -1758,7 +1758,7 @@ int button_function_critical(int n, net_player *p = NULL) Assert(n >= 0); // multiplayer clients should leave critical button bits alone and pass them to the server instead - if ((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)) { + if (MULTIPLAYER_CLIENT) { // if this flag is set, we should apply the button itself (came from the server) if (!Multi_button_info_ok){ return 0; @@ -1807,7 +1807,7 @@ int button_function_critical(int n, net_player *p = NULL) } // multiplayer server should maintain bank/link status here - if ( (Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) ) { + if ( MULTIPLAYER_MASTER ) { Assert(npl != NULL); multi_server_update_player_weapons(npl,shipp); } @@ -1828,7 +1828,7 @@ int button_function_critical(int n, net_player *p = NULL) } // multiplayer server should maintain bank/link status here - if ( (Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) ) { + if ( MULTIPLAYER_MASTER ) { Assert(npl != NULL); multi_server_update_player_weapons(npl,shipp); } @@ -1848,7 +1848,7 @@ int button_function_critical(int n, net_player *p = NULL) } // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,shipp); } @@ -1885,7 +1885,7 @@ int button_function_critical(int n, net_player *p = NULL) } // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1898,7 +1898,7 @@ int button_function_critical(int n, net_player *p = NULL) increase_recharge_rate(objp, WEAPONS); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1911,7 +1911,7 @@ int button_function_critical(int n, net_player *p = NULL) decrease_recharge_rate(objp, WEAPONS); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1924,7 +1924,7 @@ int button_function_critical(int n, net_player *p = NULL) increase_recharge_rate(objp, SHIELDS); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1937,7 +1937,7 @@ int button_function_critical(int n, net_player *p = NULL) decrease_recharge_rate(objp, SHIELDS); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1950,7 +1950,7 @@ int button_function_critical(int n, net_player *p = NULL) increase_recharge_rate(objp, ENGINES); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1963,7 +1963,7 @@ int button_function_critical(int n, net_player *p = NULL) decrease_recharge_rate(objp, ENGINES); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } @@ -1979,7 +1979,7 @@ int button_function_critical(int n, net_player *p = NULL) snd_play( &Snds[SND_ENERGY_TRANS] ); // multiplayer server should maintain bank/link status here - if((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_MASTER ){ Assert(npl != NULL); multi_server_update_player_weapons(npl,&Ships[objp->instance]); } diff --git a/code/lab/lab.cpp b/code/lab/lab.cpp index 0140ffe4bb..b6e287ad4f 100644 --- a/code/lab/lab.cpp +++ b/code/lab/lab.cpp @@ -33,6 +33,7 @@ #define LAB_FLAG_SHOW_DEBRIS (1<<2) // render debris instead of normal LOD #define LAB_FLAG_SUBMODEL_ROTATE (1<<3) // do rotation for any rotating ship subobjects #define LAB_FLAG_LIGHTNING_ARCS (1<<4) // show damage lightning +#define LAB_FLAG_FULLY_LOAD (1<<5) // use create_ship() to test the ships // modes #define LAB_MODE_NONE 0 // not showing anything @@ -1607,6 +1608,7 @@ void labviewer_make_render_options_window(Button *caller) // add all of the flags that we want/need... // viewer flags + ADD_RENDER_FLAG("Test Load Ships", Lab_viewer_flags, LAB_FLAG_FULLY_LOAD); ADD_RENDER_FLAG("Disable Model Rotation", Lab_viewer_flags, LAB_FLAG_NO_ROTATION); ADD_RENDER_FLAG("Show Insignia", Lab_viewer_flags, LAB_FLAG_SHOW_INSIGNIA); ADD_RENDER_FLAG("Show Damage Lightning", Lab_viewer_flags, LAB_FLAG_LIGHTNING_ARCS); @@ -1838,6 +1840,16 @@ void labviewer_change_ship_lod(Tree* caller) int ship_index = (int)(caller->GetSelectedItem()->GetParentItem()->GetData()); Assert( ship_index >= 0 ); + // Genghis - Attempt to create and then immediately delete the selected ship type. + // This causes the full error-handling to kick-in, making the Lab viewer a more + // useful tool for checking model errors. + if (Lab_viewer_flags & LAB_FLAG_FULLY_LOAD) + { + The_mission.ai_profile = &Ai_profiles[Default_ai_profile]; + int test_idx = ship_create(&vmd_identity_matrix, &vmd_zero_vector, ship_index); + obj_delete(test_idx); + } + Lab_last_selected_ship = Lab_selected_index; labviewer_change_model(Ship_info[ship_index].pof_file, caller->GetSelectedItem()->GetData(), ship_index); diff --git a/code/math/bitarray.h b/code/math/bitarray.h new file mode 100644 index 0000000000..419cf46614 --- /dev/null +++ b/code/math/bitarray.h @@ -0,0 +1,49 @@ +/* + * Created by Ian "Goober5000" Warfield for the FreeSpace2 Source Code Project. + * You may not sell or otherwise commercially exploit the source or things you + * create based on the source. + */ + + + +#ifndef _BIT_ARRAY_H +#define _BIT_ARRAY_H + +#include "globalincs/pstypes.h" + + +// the following four functions are adapted from http://www.codeproject.com/cpp/BitArray.asp; their explanation +// is as follows: +/* + * The Bit Array structure provides a compacted arrays of Booleans, with one bit for each Boolean value. + * A 0 (1) bit corresponds to the Boolean value false (true), respectively. We can look at a stream of bytes + * as a stream of bits; each byte contains 8 bits, so any n bytes hold n*8 bits. And the operation to + * manipulate this stream or bit array is so easy, just read or change the bit's state or make any Boolean + * operation on the whole bits array, like ‘AND’, ‘OR’, or ‘XOR’. + * + * As each byte contains 8 bits, we need to divide the bit number by 8 to reach the byte that holds the bit. + * Then, we can seek to the right bit in the reached byte by the remainder of dividing the bit number by 8. + * So to read or change the bit state, the operations will be like that. + * + * Note that to divide by 8, we need only to shift right by 3 (>>3), and to get the remainder of dividing + * by 8, we need only to AND with 7 (&7). + */ + +// returns bit state (0 or 1) +#define get_bit(array, bitnum) ((((ubyte *) array)[(bitnum) >> 3] >> ((bitnum) & 7)) & 1) + +// sets bit to 1 +#define set_bit(array, bitnum) (((ubyte *) array)[(bitnum) >> 3] |= (1 << ((bitnum) & 7))) + +// clears bit to 0 +#define clear_bit(array, bitnum) (((ubyte *) array)[(bitnum) >> 3] &= ~(1 << ((bitnum) & 7))) + +// toggles bit (xor) +#define toggle_bit(array, bitnum) (((ubyte *) array)[(bitnum) >> 3] ^= (1 << ((bitnum) & 7))) + + +// calculate number of bytes from number of bits +#define calculate_num_bytes(num_bits) ((num_bits >> 3) + 1) + + +#endif // _BIT_ARRAY_H diff --git a/code/math/vecmat.cpp b/code/math/vecmat.cpp index b831c6f3a4..d4462427ca 100644 --- a/code/math/vecmat.cpp +++ b/code/math/vecmat.cpp @@ -1630,7 +1630,11 @@ void vm_matrix_to_rot_axis_and_angle(matrix *m, float *theta, vec3d *rot_axis) rot_axis->xyz.x = (m->vec.uvec.xyz.z - m->vec.fvec.xyz.y); rot_axis->xyz.y = (m->vec.fvec.xyz.x - m->vec.rvec.xyz.z); rot_axis->xyz.z = (m->vec.rvec.xyz.y - m->vec.uvec.xyz.x); - vm_vec_normalize(rot_axis); + if (IS_VEC_NULL_SQ_SAFE(rot_axis)) { + vm_vec_make(rot_axis, 1.0f, 0.0f, 0.0f); + } else { + vm_vec_normalize(rot_axis); + } } else { // angle is PI within limits *theta = PI; diff --git a/code/menuui/optionsmenumulti.cpp b/code/menuui/optionsmenumulti.cpp index 5167c3f69c..fd21baca1b 100644 --- a/code/menuui/optionsmenumulti.cpp +++ b/code/menuui/optionsmenumulti.cpp @@ -1843,7 +1843,7 @@ void options_multi_vox_do() // attempt to get a playback handle handle = multi_voice_test_get_playback_buffer(); if(handle != -1){ - Om_vox_playback_handle = rtvoice_play_uncompressed(handle, Om_vox_comp_buffer, Om_vox_voice_comp_size); + Om_vox_playback_handle = rtvoice_play(handle, Om_vox_comp_buffer, Om_vox_voice_comp_size); // mark us as playing back Om_vox_test_status = OM_VOX_TEST_PLAYBACK; @@ -2319,41 +2319,24 @@ void options_multi_unselect() } // set voice sound buffer for display -void options_multi_set_voice_data(unsigned char *sound_buf,int buf_size,unsigned char *comp_buf, int comp_size, int uncomp_size, double gain) +void options_multi_set_voice_data(unsigned char *sound_buf, int buf_size, double gain) { if ( (sound_buf == NULL) || (buf_size <= 0) ) { return; } // copy the buffer to the vox tab data - if(buf_size > OM_VOX_BUF_SIZE){ - memcpy(Om_vox_voice_buffer,sound_buf,OM_VOX_BUF_SIZE); - Om_vox_voice_buffer_size = OM_VOX_BUF_SIZE; - } else { - memcpy(Om_vox_voice_buffer,sound_buf,buf_size); - Om_vox_voice_buffer_size = buf_size; - } + Om_vox_voice_buffer_size = MIN(buf_size, OM_VOX_BUF_SIZE); + memcpy(Om_vox_voice_buffer, sound_buf, Om_vox_voice_buffer_size); // copy and uncompress the compressed buffer if(Om_vox_voice_comp_size == -1){ Om_vox_voice_comp_size = 0; } - // make sure that this is actually a compressed buffer - // (they can point to the same place if uncompressed) - if ( comp_buf && (comp_buf != sound_buf) ) { - // if we can fit it, decompress this data - if((Om_vox_voice_comp_size + uncomp_size) < OM_VOX_COMP_SIZE){ - // uncompress the data - rtvoice_uncompress(comp_buf, comp_size, gain, Om_vox_comp_buffer + Om_vox_voice_comp_size, uncomp_size); - - Om_vox_voice_comp_size += uncomp_size; - } - } else { - if ( (Om_vox_voice_comp_size + Om_vox_voice_buffer_size) < OM_VOX_COMP_SIZE ) { - memcpy(Om_vox_comp_buffer + Om_vox_voice_comp_size, Om_vox_voice_buffer, Om_vox_voice_buffer_size); - Om_vox_voice_comp_size += Om_vox_voice_buffer_size; - } + if ( (Om_vox_voice_comp_size + buf_size) < OM_VOX_COMP_SIZE ) { + memcpy(Om_vox_comp_buffer + Om_vox_voice_comp_size, sound_buf, buf_size); + Om_vox_voice_comp_size += buf_size; } } diff --git a/code/menuui/optionsmenumulti.h b/code/menuui/optionsmenumulti.h index fadfd6036a..c9537351ab 100644 --- a/code/menuui/optionsmenumulti.h +++ b/code/menuui/optionsmenumulti.h @@ -39,7 +39,7 @@ void options_multi_unselect(); int options_multi_background_bitmap(); // set voice sound buffer for display -void options_multi_set_voice_data(unsigned char *sound_buf,int buf_size,unsigned char *comp_buf, int comp_size, int uncomp_size, double gain); +void options_multi_set_voice_data(unsigned char *sound_buf, int buf_size, double gain); // process and blit any voice waveform if necessary void options_multi_vox_process_waveform(); diff --git a/code/menuui/techmenu.cpp b/code/menuui/techmenu.cpp index c6f9fb230d..ae8521a7de 100644 --- a/code/menuui/techmenu.cpp +++ b/code/menuui/techmenu.cpp @@ -244,14 +244,11 @@ static int Techroom_ship_modelnum; static float Techroom_ship_rot; static UI_BUTTON List_buttons[LIST_BUTTONS_MAX]; // buttons for each line of text in list //static int Anim_playing_id = -1; -//static int anim_done = 0; static int Palette_bmp; //static int ShipWin01; //static int ShipWin02; //static int ShipWin03; //static int ShipWin04; -//static ubyte Palette[768]; -//static char Palette_name[128]; // not used now - taylor static int Ships_loaded = 0; static int Weapons_loaded = 0; @@ -395,12 +392,14 @@ void techroom_select_new_entry() Techroom_ship_modelnum = -1; Trackball_mode = 0; - //load animation here, we now only have one loaded - generic_anim_init(&Current_list[Cur_entry].animation, Current_list[Cur_entry].tech_anim_filename); - Current_list[Cur_entry].animation.ani.bg_type = bm_get_type(Tech_background_bitmap); - if(generic_anim_stream(&Current_list[Cur_entry].animation) != -1){ + // load animation here, we now only have one loaded + int stream_result = generic_anim_init_and_stream(&Current_list[Cur_entry].animation, Current_list[Cur_entry].tech_anim_filename, bm_get_type(Tech_background_bitmap), true); + + if (stream_result >= 0) { Current_list[Cur_entry].has_anim = 1; } else { + // we've failed to load any animation + // load an image and treat it like a 1 frame animation Current_list[Cur_entry].bitmap = bm_load(Current_list[Cur_entry].tech_anim_filename); } } @@ -730,7 +729,7 @@ void tech_ship_scroll_capture() techroom_unload_animation(); techroom_select_new_entry(); - } +} void techroom_anim_render(float frametime) { diff --git a/code/menuui/techmenu.h b/code/menuui/techmenu.h index cfa5b87ece..8e1c7cb219 100644 --- a/code/menuui/techmenu.h +++ b/code/menuui/techmenu.h @@ -14,7 +14,7 @@ #include "globalincs/globals.h" -#define MAX_INTEL_ENTRIES 30 +#define MAX_INTEL_ENTRIES 75 #define TECH_INTEL_DESC_LEN 5120 typedef struct { diff --git a/code/mission/missionbriefcommon.cpp b/code/mission/missionbriefcommon.cpp index 5f5ab0a846..453d218fe7 100644 --- a/code/mission/missionbriefcommon.cpp +++ b/code/mission/missionbriefcommon.cpp @@ -172,7 +172,6 @@ static int Brief_stage_highlight_sound_handle = -1; // used for scrolling briefing text ( if necessary ) int Num_brief_text_lines[MAX_TEXT_STREAMS]; int Top_brief_text_line; -static char Brief_text[MAX_BRIEF_LINES][MAX_BRIEF_LINE_LEN]; // Used to support drawing colored text for the briefing. Gets complicates since we // need to be able to draw one character at a time as well when the briefing text diff --git a/code/mission/missionlog.cpp b/code/mission/missionlog.cpp index b3e2f28ade..8bd70afef0 100644 --- a/code/mission/missionlog.cpp +++ b/code/mission/missionlog.cpp @@ -188,7 +188,7 @@ void mission_log_add_entry(int type, char *pname, char *sname, int info_index) // multiplayer clients don't use this function to add log entries -- they will get // all their info from the host - if ( (Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) ){ + if ( MULTIPLAYER_CLIENT ){ return; } @@ -362,7 +362,7 @@ void mission_log_add_entry(int type, char *pname, char *sname, int info_index) entry->timestamp = Missiontime; // if in multiplayer and I am the master, send this log entry to everyone - if ( (Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) ){ + if ( MULTIPLAYER_MASTER ){ send_mission_log_packet( last_entry ); } diff --git a/code/mission/missionmessage.cpp b/code/mission/missionmessage.cpp index 7966a8e989..728f0cfcfa 100644 --- a/code/mission/missionmessage.cpp +++ b/code/mission/missionmessage.cpp @@ -264,12 +264,16 @@ void persona_parse() } } + if ( i == MAX_PERSONA_TYPES ) + WarningEx(LOCATION, "Unknown persona type in messages.tbl -- %s\n", type ); + char cstrtemp[NAME_LENGTH]; if ( optional_string("+") ) { + int j; stuff_string(cstrtemp, F_NAME, NAME_LENGTH); - for (int j = 0; j < (int)Species_info.size(); j++) + for (j = 0; j < (int)Species_info.size(); j++) { if (!strcmp(cstrtemp, Species_info[j].species_name)) { @@ -277,12 +281,11 @@ void persona_parse() break; } } + + if ( j == (int)Species_info.size() ) + WarningEx(LOCATION, "Unknown species in messages.tbl -- %s\n", cstrtemp ); } - if ( i == MAX_PERSONA_TYPES ) - Error(LOCATION, "Unknown persona type in messages.tbl -- %s\n", type ); - - Num_personas++; } @@ -349,8 +352,8 @@ void message_parse(bool importing_from_fsm) mt = -1; } - // only bother with filters if multiplayer and TvT - if(Fred_running || ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) ){ + // only bother with filters in-game if multiplayer and TvT + if(Fred_running || (MULTI_TEAM) ){ msg.multi_team = mt; } } @@ -367,6 +370,9 @@ void message_parse(bool importing_from_fsm) if ( optional_string("+Persona:") ) { stuff_string(persona_name, F_NAME, NAME_LENGTH); msg.persona_index = message_persona_name_lookup( persona_name ); + + if ( msg.persona_index == -1 ) + WarningEx(LOCATION, "Unknown persona in message %s in messages.tbl -- %s\n", msg.name, persona_name ); } if ( !Fred_running) diff --git a/code/mission/missionparse.cpp b/code/mission/missionparse.cpp index 8aed222053..7254526ea8 100644 --- a/code/mission/missionparse.cpp +++ b/code/mission/missionparse.cpp @@ -69,6 +69,8 @@ #include "cmdline/cmdline.h" #include "popup/popup.h" #include "popup/popupdead.h" +#include "sound/sound.h" +#include "sound/ds.h" LOCAL struct { char docker[NAME_LENGTH]; @@ -711,6 +713,8 @@ void parse_mission_info(mission *pm, bool basic = false) if (index >= 0) The_mission.ai_profile = &Ai_profiles[index]; + else + WarningEx(LOCATION, "Mission: %s\nUnknown AI profile %s!", pm->name, temp ); } Assert( The_mission.ai_profile != NULL ); @@ -718,6 +722,32 @@ void parse_mission_info(mission *pm, bool basic = false) // Kazan - player use AI at start? if (pm->flags & MISSION_FLAG_PLAYER_START_AI) Player_use_ai = 1; + + pm->sound_environment.id = -1; + if (optional_string("$Sound Environment:")) { + char preset[65] = { '\0' }; + stuff_string(preset, F_NAME, sizeof(preset)-1); + + int preset_id = ds_eax_get_preset_id(preset); + + if (preset_id >= 0) { + sound_env_get(&pm->sound_environment, preset_id); + } + + // NOTE: values will be clamped properly when the effect is actually set + + if (optional_string("+Volume:")) { + stuff_float(&pm->sound_environment.volume); + } + + if (optional_string("+Damping:")) { + stuff_float(&pm->sound_environment.damping); + } + + if (optional_string("+Decay Time:")) { + stuff_float(&pm->sound_environment.decay); + } + } } void parse_player_info(mission *pm) @@ -787,7 +817,7 @@ void parse_player_info2(mission *pm) for (i=0; iflags & NETINFO_FLAG_AM_MASTER))) { + if (Game_mode & GM_CAMPAIGN_MODE || (MULTIPLAYER_CLIENT)) { if ( !Campaign.ships_allowed[list[i]] ) continue; } @@ -806,9 +836,12 @@ void parse_player_info2(mission *pm) if (optional_string("+Default_ship:")) { stuff_string(str, F_NAME, NAME_LENGTH); ptr->default_ship = ship_info_lookup(str); + if (-1 == ptr->default_ship) { + WarningEx(LOCATION, "Mission: %s\nUnknown default ship %s! Defaulting to %s.", pm->name, str, Ship_info[ptr->ship_list[0]].name ); + } // see if the player's default ship is an allowable ship (campaign only). If not, then what // do we do? choose the first allowable one? - if (Game_mode & GM_CAMPAIGN_MODE || ((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER))) { + if (Game_mode & GM_CAMPAIGN_MODE || (MULTIPLAYER_CLIENT)) { if ( !(Campaign.ships_allowed[ptr->default_ship]) ) { for (i = 0; i < MAX_SHIP_CLASSES; i++ ) { if ( Campaign.ships_allowed[ptr->default_ship] ) { @@ -834,7 +867,7 @@ void parse_player_info2(mission *pm) for (i = 0; i < total; i += 4) { // in a campaign, see if the player is allowed the weapons or not. Remove them from the // pool if they are not allowed - if (Game_mode & GM_CAMPAIGN_MODE || ((Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER))) { + if (Game_mode & GM_CAMPAIGN_MODE || (MULTIPLAYER_CLIENT)) { if ( !Campaign.weapons_allowed[list2[i]] ) { continue; } @@ -1731,7 +1764,18 @@ int parse_create_object_sub(p_object *p_objp) shipp->team = p_objp->team; strcpy_s(shipp->ship_name, p_objp->name); shipp->escort_priority = p_objp->escort_priority; - shipp->special_exp_index = p_objp->special_exp_index; + + + + shipp->use_special_explosion = p_objp->use_special_explosion; + shipp->special_exp_damage = p_objp->special_exp_damage; + shipp->special_exp_blast = p_objp->special_exp_blast ; + shipp->special_exp_inner = p_objp->special_exp_inner ; + shipp->special_exp_outer = p_objp->special_exp_outer ; + shipp->use_shockwave = p_objp->use_shockwave ; + shipp->special_exp_shockwave_speed = p_objp->special_exp_shockwave_speed ; + shipp->special_hitpoints = p_objp->special_hitpoints ; + shipp->special_shield = p_objp->special_shield ; for (i=0;ispecial_hitpoint_index = p_objp->special_hitpoint_index; shipp->ship_max_shield_strength = p_objp->ship_max_shield_strength; shipp->ship_max_hull_strength = p_objp->ship_max_hull_strength; // Goober5000 - ugh, this is really stupid having to do this here; if the // ship creation code was better organized this wouldn't be necessary - if (shipp->special_hitpoint_index >= 0) + if (shipp->special_hitpoints > 0) { float hull_factor = shipp->ship_max_hull_strength / sip->max_hull_strength; ship_subsys *ss; @@ -1772,7 +1815,7 @@ int parse_create_object_sub(p_object *p_objp) shipp->respawn_priority = p_objp->respawn_priority; // if this is a multiplayer dogfight game, and its from a player wing, make it team traitor - if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (p_objp->wingnum >= 0)) + if (MULTI_DOGFIGHT && (p_objp->wingnum >= 0)) { for (i = 0; i < MAX_STARTING_WINGS; i++) { @@ -2363,6 +2406,48 @@ void resolve_parse_flags(object *objp, int parse_flags, int parse_flags2) shipp->flags2 |= SF2_FORCE_SHIELDS_ON; } +void fix_old_special_explosions(p_object *p_objp, int variable_index) +{ + int i; + + Assertion(!(p_objp->use_special_explosion), "Mission appears to be using both the new and old method of special explosions for %s. Old method values used", p_objp->name); + + // check all the variables are valid + for ( i = variable_index; i < (variable_index + BLOCK_EXP_SIZE); i++ ) { + if (!( Block_variables[i].type & SEXP_VARIABLE_BLOCK )) { + Warning (LOCATION, "%s is using the old special explosions method but does not appear to have variables for all the values", p_objp->name); + return; + } + } + + p_objp->use_special_explosion = true; + + p_objp->special_exp_damage = atoi(Block_variables[variable_index+DAMAGE].text); + p_objp->special_exp_blast = atoi(Block_variables[variable_index+BLAST].text); + p_objp->special_exp_inner = atoi(Block_variables[variable_index+INNER_RAD].text); + p_objp->special_exp_outer = atoi(Block_variables[variable_index+OUTER_RAD].text); + p_objp->use_shockwave = (atoi(Block_variables[variable_index+PROPAGATE].text) ? 1:0); + p_objp->special_exp_shockwave_speed = atoi(Block_variables[variable_index+SHOCK_SPEED].text); +} + +void fix_old_special_hits(p_object *p_objp, int variable_index) +{ + int i; + + Assertion( ((p_objp->special_hitpoints == 0) && (p_objp->special_shield == -1)),"Mission appears to be using both the new and old method of special hitpoints for %s", p_objp->name); + + // check all the variables are valid + for ( i = variable_index; i < (variable_index + BLOCK_HIT_SIZE); i++ ) { + if (!( Block_variables[i].type & SEXP_VARIABLE_BLOCK )) { + Warning (LOCATION, "%s is using the old special hitpoints method but does not appear to have variables for all the values", p_objp->name); + return; + } + } + + p_objp->special_hitpoints = atoi(Block_variables[variable_index+HULL_STRENGTH].text); + p_objp->special_shield = atoi(Block_variables[variable_index+SHIELD_STRENGTH].text); +} + // Mp points at the text of an object, which begins with the "$Name:" field. // Snags all object information. Creating the ship now only happens after everything has been parsed. // @@ -2445,7 +2530,7 @@ int parse_object(mission *pm, int flag, p_object *p_objp) } // if this is a multiplayer dogfight mission, skip support ships - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (Ship_info[p_objp->ship_class].flags & SIF_SUPPORT)) + if(MULTI_DOGFIGHT && (Ship_info[p_objp->ship_class].flags & SIF_SUPPORT)) return 0; // optional alternate name type @@ -2457,9 +2542,8 @@ int parse_object(mission *pm, int flag, p_object *p_objp) // try and find the alternate name p_objp->alt_type_index = (char)mission_parse_lookup_alt(name); - Assert(p_objp->alt_type_index >= 0); if(p_objp->alt_type_index < 0) - mprintf(("Error looking up alternate ship type name!\n")); + WarningEx(LOCATION, "Mission %s\nError looking up alternate ship type name %s!\n", pm->name, name); else mprintf(("Using alternate ship type name: %s\n", name)); } @@ -2473,9 +2557,8 @@ int parse_object(mission *pm, int flag, p_object *p_objp) // try and find the callsign p_objp->callsign_index = (char)mission_parse_lookup_callsign(name); - Assert(p_objp->callsign_index >= 0); if(p_objp->callsign_index < 0) - mprintf(("Error looking up callsign!\n")); + WarningEx(LOCATION, "Mission %s\nError looking up callsign %s!\n", pm->name, name); else mprintf(("Using callsign: %s\n", name)); } @@ -2712,44 +2795,74 @@ int parse_object(mission *pm, int flag, p_object *p_objp) Player_starts++; } - p_objp->special_exp_index = -1; - if (optional_string("+Special Exp index:")) - stuff_int(&p_objp->special_exp_index); + p_objp->use_special_explosion = false; + p_objp->special_exp_damage = -1; + p_objp->special_exp_blast = -1; + p_objp->special_exp_inner = -1; + p_objp->special_exp_outer = -1; + p_objp->use_shockwave = false; + p_objp->special_exp_shockwave_speed = 0; + p_objp->special_hitpoints = 0; + p_objp->special_shield = -1; - p_objp->special_hitpoint_index = -1; - if (optional_string("+Special Hitpoint index:")) - stuff_int(&p_objp->special_hitpoint_index); + if (optional_string("$Special Explosion:")) { + p_objp->use_special_explosion = true; - // set max hitpoint values - p_objp->ship_max_shield_strength = Ship_info[p_objp->ship_class].max_shield_strength; - p_objp->ship_max_hull_strength = Ship_info[p_objp->ship_class].max_hull_strength; - - // swap to the special hitpoint ones if they were set - if (p_objp->special_hitpoint_index != -1) - { - bool reset_index = false; - - if ((Sexp_variables[p_objp->special_hitpoint_index+SHIELD_STRENGTH].type & SEXP_VARIABLE_SET) && - (Sexp_variables[p_objp->special_hitpoint_index+SHIELD_STRENGTH].type & SEXP_VARIABLE_BLOCK) ) { - p_objp->ship_max_shield_strength = (float) atoi(Sexp_variables[p_objp->special_hitpoint_index+SHIELD_STRENGTH].text); - } - else { - Warning(LOCATION, "Special shield hitpoints used for variable number %d. But no variable with this number exists!", p_objp->special_hitpoint_index+SHIELD_STRENGTH); - reset_index = true; + if (required_string("+Special Exp Damage:")) { + stuff_int(&p_objp->special_exp_damage); } - if ((Sexp_variables[p_objp->special_hitpoint_index+HULL_STRENGTH].type & SEXP_VARIABLE_SET) && - (Sexp_variables[p_objp->special_hitpoint_index+HULL_STRENGTH].type & SEXP_VARIABLE_BLOCK) ) { - p_objp->ship_max_hull_strength = (float) atoi(Sexp_variables[p_objp->special_hitpoint_index+HULL_STRENGTH].text); - } - else { - Warning(LOCATION, "Special hitpoints used for variable number %d. But no variable with this number exists!", p_objp->special_hitpoint_index+HULL_STRENGTH); - reset_index = true; + if (required_string("+Special Exp Blast:")) { + stuff_int(&p_objp->special_exp_blast); } - if (reset_index) { - p_objp->special_hitpoint_index = -1; + if (required_string("+Special Exp Inner Radius:")) { + stuff_int(&p_objp->special_exp_inner); } + + if (required_string("+Special Exp Outer Radius:")) { + stuff_int(&p_objp->special_exp_outer); + } + + if (optional_string("+Special Exp Shockwave Speed:")) { + stuff_int(&p_objp->special_exp_shockwave_speed); + p_objp->use_shockwave = true; + } + } + + if (optional_string("+Special Hitpoints:")) { + stuff_int(&p_objp->special_hitpoints); + } + + if (optional_string("+Special Shield Points:")) { + stuff_int(&p_objp->special_shield); + } + + if (optional_string("+Special Exp index:")) { + int variable_index; + stuff_int(&variable_index); + fix_old_special_explosions(p_objp, variable_index); + } + + if (optional_string("+Special Hitpoint index:")) { + int variable_index; + stuff_int(&variable_index); + fix_old_special_hits(p_objp, variable_index); + } + + // set max hitpoint and shield values + if (p_objp->special_shield != -1) { + p_objp->ship_max_shield_strength = (float) p_objp->special_shield; + } + else { + p_objp->ship_max_shield_strength = Ship_info[p_objp->ship_class].max_shield_strength; + } + + if (p_objp->special_hitpoints > 0) { + p_objp->ship_max_hull_strength = (float) p_objp->special_hitpoints; + } + else { + p_objp->ship_max_hull_strength = Ship_info[p_objp->ship_class].max_hull_strength; } Assert(p_objp->ship_max_hull_strength > 0.0f); // Goober5000: div-0 check (not shield because we might not have one) @@ -3080,6 +3193,9 @@ void parse_common_object_data(p_object *objp) { int i; + // Genghis: used later for subsystem checking + ship_info* sip = &Ship_info[objp->ship_class]; + // set some defaults.. objp->initial_velocity = 0; objp->initial_hull = 100; @@ -3103,6 +3219,17 @@ void parse_common_object_data(p_object *objp) objp->subsys_count++; stuff_string(Subsys_status[i].name, F_NAME, NAME_LENGTH); + // Genghis: check that the subsystem name makes sense for this ship type + if (stricmp("Pilot", Subsys_status[i].name)) + { + int j; + for (j=0; j < sip->n_subsystems; ++j) + if (!stricmp(sip->subsystems[j].subobj_name, Subsys_status[i].name)) + break; + if (j == sip->n_subsystems) + Warning(LOCATION, "Ship \"%s\", class \"%s\"\nUnknown subsystem \"%s\" found in mission!", objp->name, sip->name, Subsys_status[i].name); + } + if (optional_string("$Damage:")) stuff_float(&Subsys_status[i].percent); @@ -3111,9 +3238,15 @@ void parse_common_object_data(p_object *objp) char cargo_name[NAME_LENGTH]; stuff_string(cargo_name, F_NAME, NAME_LENGTH); int index = string_lookup(cargo_name, Cargo_names, Num_cargo, "cargo", 0); - if (index == -1 && (Num_cargo < MAX_CARGO)) { - index = Num_cargo; - strcpy(Cargo_names[Num_cargo++], cargo_name); + if (index == -1) { + if (Num_cargo < MAX_CARGO) { + index = Num_cargo; + strcpy(Cargo_names[Num_cargo++], cargo_name); + } + else { + WarningEx(LOCATION, "Maximum number of cargo names (%d) exceeded, defaulting to Nothing!", MAX_CARGO); + index = 0; + } } Subsys_status[i].subsys_cargo_name = index; } @@ -3719,7 +3852,7 @@ int parse_wing_create_ships( wing *wingp, int num_to_create, int force, int spec } // flag ship with SF_FROM_PLAYER_WING if a member of player starting wings - if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) + if (MULTI_TEAM) { // different for tvt -- Goober5000 for (j = 0; j < MAX_TVT_WINGS; j++) @@ -4805,6 +4938,9 @@ void parse_bitmaps(mission *pm) } } + if (z == NUM_NEBULAS) + WarningEx(LOCATION, "Mission %s\nUnknown nebula %s!", pm->name, str); + if (optional_string("+Color:")) { stuff_string(str, F_NAME, MAX_FILENAME_LEN); for (z=0; zname, str); + if (optional_string("+Pitch:")){ stuff_int(&Nebula_pitch); } else { @@ -5001,9 +5140,7 @@ void parse_variables() // if the active mission has a variable with the same name as a campaign // variable AND it is not a block variable, override its initial value // with the previous mission's value - if (!(stricmp(Sexp_variables[k].variable_name, Campaign.missions[i].saved_variables[j].variable_name)) - && !(Campaign.missions[i].saved_variables[j].type & SEXP_VARIABLE_BLOCK)) - { + if (!(stricmp(Sexp_variables[k].variable_name, Campaign.missions[i].saved_variables[j].variable_name)) ) { Sexp_variables[k].type = Campaign.missions[i].saved_variables[j].type; strcpy_s(Sexp_variables[k].text, Campaign.missions[i].saved_variables[j].text); } @@ -5020,9 +5157,7 @@ void parse_variables() // if the active mission has a variable with the same name as a player // variable AND it is not a block variable, override its initial value // with the previous mission's value - if (!(stricmp(Sexp_variables[j].variable_name, Player->player_variables[i].variable_name)) - && !(Player->player_variables[i].type & SEXP_VARIABLE_BLOCK)) - { + if (!(stricmp(Sexp_variables[j].variable_name, Player->player_variables[i].variable_name)) ) { Sexp_variables[j].type = Player->player_variables[i].type; strcpy_s(Sexp_variables[j].text, Player->player_variables[i].text); } @@ -5205,7 +5340,7 @@ void post_process_mission() } // when TVT, hack starting wings to be team wings - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ Assert(MAX_TVT_WINGS <= MAX_STARTING_WINGS); for (i=0; iship_index[wingp->special_ship]; diff --git a/code/mission/missionparse.h b/code/mission/missionparse.h index ded37d8f10..07577de227 100644 --- a/code/mission/missionparse.h +++ b/code/mission/missionparse.h @@ -16,6 +16,7 @@ #include "model/model.h" #include "object/object.h" #include "graphics/2d.h" +#include "sound/sound.h" //WMC - This should be here #define FS_MISSION_FILE_EXT NOX(".fs2") @@ -146,6 +147,7 @@ typedef struct mission { int skybox_flags; int contrail_threshold; int ambient_light_level; + sound_env sound_environment; // Goober5000 int command_persona; @@ -187,6 +189,7 @@ typedef struct mission { skybox_flags = 0; contrail_threshold = 0; ambient_light_level = 0; + sound_environment.id = -1; command_persona = 0; command_sender[ 0 ] = '\0'; event_music_name[ 0 ] = '\0'; @@ -400,8 +403,17 @@ typedef struct p_object { int group; // group object is within or -1 if none. int persona_index; float kamikaze_damage; // base damage for a kamikaze attack - int special_exp_index; - int special_hitpoint_index; + + bool use_special_explosion; // new special explosion/hitpoints system + int special_exp_damage; + int special_exp_blast; + int special_exp_inner; + int special_exp_outer; + bool use_shockwave; + int special_exp_shockwave_speed; + int special_hitpoints; + int special_shield; + ushort net_signature; // network signature this object can have int destroy_before_mission_time; @@ -485,8 +497,15 @@ typedef struct p_object { group = 0; persona_index = 0; kamikaze_damage = 0.; - special_exp_index = 0; - special_hitpoint_index = 0; + use_special_explosion = false; + special_exp_damage = -1; + special_exp_blast = -1; + special_exp_inner = -1; + special_exp_outer = -1; + use_shockwave = false; + special_exp_shockwave_speed = -1; + special_hitpoints = 0; + special_shield = -1; net_signature = 0; destroy_before_mission_time = 0; diff --git a/code/mission/missiontraining.cpp b/code/mission/missiontraining.cpp index 31e1cf9c3b..99a825e293 100644 --- a/code/mission/missiontraining.cpp +++ b/code/mission/missiontraining.cpp @@ -74,6 +74,7 @@ typedef struct { char Training_buf[TRAINING_MESSAGE_LENGTH]; char *Training_lines[MAX_TRAINING_MESSAGE_LINES]; // Training message split into lines char Training_voice_filename[NAME_LENGTH]; +int Max_directives = TRAINING_OBJ_DISPLAY_LINES; int Training_message_timestamp; int Training_line_sizes[MAX_TRAINING_MESSAGE_LINES]; int Training_message_method = 1; @@ -173,8 +174,8 @@ void training_obj_display() offset = 0; end = Training_obj_num_lines; - if (end > TRAINING_OBJ_DISPLAY_LINES) { - end = TRAINING_OBJ_DISPLAY_LINES; + if (end > Max_directives) { + end = Max_directives; offset = Training_obj_num_lines - end; } @@ -211,7 +212,7 @@ void training_obj_display() } // if this is a multiplayer tvt game, and this is event is not for my team, don't display it - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM) && (Net_player != NULL)){ + if(MULTI_TEAM && (Net_player != NULL)){ if((Mission_events[z].team != -1) && (Net_player->p_info.team != Mission_events[z].team)){ continue; } @@ -302,6 +303,9 @@ void training_mission_init() Training_obj_num_lines = 0; Training_message_queue_count = 0; Training_failure = 0; + if (Max_directives > TRAINING_OBJ_LINES) { + Max_directives = TRAINING_OBJ_LINES; + } for (i=0; ip_info.team != Mission_events[TRAINING_OBJ_LINES_MASK(i)].team)){ continue ; } @@ -409,7 +413,7 @@ void sort_training_objectives() event_status = mission_get_event_status(TRAINING_OBJ_LINES_MASK(i)); // if this is a multiplayer tvt game, and this is event is for another team, it can be bumped - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM) && (Net_player != NULL)){ + if(MULTI_TEAM && (Net_player != NULL)){ if((Mission_events[TRAINING_OBJ_LINES_MASK(i)].team != -1) && (Net_player->p_info.team != Mission_events[TRAINING_OBJ_LINES_MASK(i)].team)){ Training_obj_lines[i] |= TRAINING_OBJ_STATUS_KNOWN; continue ; @@ -447,7 +451,7 @@ void sort_training_objectives() // find first slot that can be bumped // look at the last (N-4 to N) positions - for (slot_idx=0; slot_idx= 0 ); + if (message_play_training_voice(Messages[m].wave_info.index) < 0) { if (length > 0) Training_message_timestamp = timestamp(length * 1000); @@ -853,20 +859,25 @@ void message_training_queue(char *text, int timestamp, int length) // Goober5000 - removes current message from the queue void message_training_remove_from_queue(int idx) -{ - Training_message_queue[idx].length = -1; - Training_message_queue[idx].num = -1; - Training_message_queue[idx].timestamp = -1; - +{ + // we're overwriting all messages with the next message, but to + // avoid memory leaks, we should free the special message entry if (Training_message_queue[idx].special_message != NULL) { vm_free(Training_message_queue[idx].special_message); Training_message_queue[idx].special_message = NULL; } + // replace current message with the one above it, etc. for (int j=idx+1; j 0); - for (i=0; i= 0; Fiction_viewer_ui--) + { + // load the first available background bitmap + Fiction_viewer_bitmap = bm_load(Fiction_viewer_screen_filename[Fiction_viewer_ui][gr_screen.res]); + if (Fiction_viewer_bitmap >= 0) + break; + } + + // no ui is valid? + if (Fiction_viewer_ui < 0) { Warning(LOCATION, "No fiction viewer graphics -- cannot display fiction viewer!"); return; @@ -208,17 +280,17 @@ void fiction_viewer_init() } // calculate text area lines from font - Fiction_viewer_text_max_lines = Fiction_viewer_text_coordinates[gr_screen.res][3] / gr_get_font_height(); + Fiction_viewer_text_max_lines = Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][3] / gr_get_font_height(); // window Fiction_viewer_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0, Fiction_viewer_fontnum); - Fiction_viewer_window.set_mask_bmap(Fiction_viewer_screen_mask[gr_screen.res]); + Fiction_viewer_window.set_mask_bmap(Fiction_viewer_screen_mask[Fiction_viewer_ui][gr_screen.res]); // add the buttons for (int i = 0; i < NUM_FVW_BUTTONS; i++) { int repeat = (i == FVW_BUTTON_SCROLL_UP || i == FVW_BUTTON_SCROLL_DOWN); - ui_button_info *b = &Fiction_viewer_buttons[gr_screen.res][i]; + ui_button_info *b = &Fiction_viewer_buttons[Fiction_viewer_ui][gr_screen.res][i]; b->button.create(&Fiction_viewer_window, "", b->x, b->y, b->xt, b->yt, repeat, 1); b->button.set_highlight_action(common_play_highlight_sound); @@ -227,23 +299,23 @@ void fiction_viewer_init() } // set up hotkeys for buttons - Fiction_viewer_buttons[gr_screen.res][FVW_BUTTON_ACCEPT].button.set_hotkey(KEY_CTRLED | KEY_ENTER); - Fiction_viewer_buttons[gr_screen.res][FVW_BUTTON_SCROLL_UP].button.set_hotkey(KEY_UP); - Fiction_viewer_buttons[gr_screen.res][FVW_BUTTON_SCROLL_DOWN].button.set_hotkey(KEY_DOWN); + Fiction_viewer_buttons[Fiction_viewer_ui][gr_screen.res][FVW_BUTTON_ACCEPT].button.set_hotkey(KEY_CTRLED | KEY_ENTER); + Fiction_viewer_buttons[Fiction_viewer_ui][gr_screen.res][FVW_BUTTON_SCROLL_UP].button.set_hotkey(KEY_UP); + Fiction_viewer_buttons[Fiction_viewer_ui][gr_screen.res][FVW_BUTTON_SCROLL_DOWN].button.set_hotkey(KEY_DOWN); // init brief text - brief_color_text_init(Fiction_viewer_text, Fiction_viewer_text_coordinates[gr_screen.res][2], 0, 0); + brief_color_text_init(Fiction_viewer_text, Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][2], 0, 0); // if the story is going to overflow the screen, add a slider if (Num_brief_text_lines[0] > Fiction_viewer_text_max_lines) { Fiction_viewer_slider.create(&Fiction_viewer_window, - Fiction_viewer_slider_coordinates[gr_screen.res][0], - Fiction_viewer_slider_coordinates[gr_screen.res][1], - Fiction_viewer_slider_coordinates[gr_screen.res][2], - Fiction_viewer_slider_coordinates[gr_screen.res][3], + Fiction_viewer_slider_coordinates[Fiction_viewer_ui][gr_screen.res][0], + Fiction_viewer_slider_coordinates[Fiction_viewer_ui][gr_screen.res][1], + Fiction_viewer_slider_coordinates[Fiction_viewer_ui][gr_screen.res][2], + Fiction_viewer_slider_coordinates[Fiction_viewer_ui][gr_screen.res][3], Num_brief_text_lines[0] - Fiction_viewer_text_max_lines, - Fiction_viewer_slider_filename[gr_screen.res], + Fiction_viewer_slider_filename[Fiction_viewer_ui][gr_screen.res], &fiction_viewer_scroll_up, &fiction_viewer_scroll_down, &fiction_viewer_scroll_capture); @@ -307,7 +379,7 @@ void fiction_viewer_do_frame(float frametime) // process button presses for (i = 0; i < NUM_FVW_BUTTONS; i++) - if (Fiction_viewer_buttons[gr_screen.res][i].button.pressed()) + if (Fiction_viewer_buttons[Fiction_viewer_ui][gr_screen.res][i].button.pressed()) fiction_viewer_button_pressed(i); common_music_do(); @@ -324,14 +396,14 @@ void fiction_viewer_do_frame(float frametime) Fiction_viewer_window.draw(); // render the briefing text - brief_render_text(Top_fiction_viewer_text_line, Fiction_viewer_text_coordinates[gr_screen.res][0], Fiction_viewer_text_coordinates[gr_screen.res][1], Fiction_viewer_text_coordinates[gr_screen.res][3], frametime); + brief_render_text(Top_fiction_viewer_text_line, Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][0], Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][1], Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][3], frametime); // maybe output the "more" indicator if ((Fiction_viewer_text_max_lines + Top_fiction_viewer_text_line) < Num_brief_text_lines[0]) { // can be scrolled down - int more_txt_x = Fiction_viewer_text_coordinates[gr_screen.res][0] + (Fiction_viewer_text_coordinates[gr_screen.res][2]/2) - 10; - int more_txt_y = Fiction_viewer_text_coordinates[gr_screen.res][1] + Fiction_viewer_text_coordinates[gr_screen.res][3] - 2; // located below text, centered + int more_txt_x = Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][0] + (Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][2]/2) - 10; + int more_txt_y = Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][1] + Fiction_viewer_text_coordinates[Fiction_viewer_ui][gr_screen.res][3]; // located below text, centered gr_get_string_size(&w, &h, XSTR("more", 1469), strlen(XSTR("more", 1469))); gr_set_color_fast(&Color_black); diff --git a/code/missionui/missionbrief.cpp b/code/missionui/missionbrief.cpp index eca8345b24..5c92c90e92 100644 --- a/code/missionui/missionbrief.cpp +++ b/code/missionui/missionbrief.cpp @@ -877,7 +877,7 @@ void brief_init() } // get a pointer to the appropriate briefing structure - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ Briefing = &Briefings[Net_player->p_info.team]; } else { Briefing = &Briefings[0]; @@ -1302,8 +1302,7 @@ int brief_setup_closeup(brief_icon *bi) end_string_at_first_hash_symbol(Closeup_icon->closeup_label); // Goober5000 - wcsaga doesn't want this - if (!Cmdline_wcsaga && sip->flags & (SIF_SMALL_SHIP|SIF_BIG_SHIP|SIF_HUGE_SHIP|SIF_SENTRYGUN)) - { + if (Ship_types[sip->class_type].hud_bools & STI_HUD_NO_CLASS_DISPLAY ) { strcat_s(Closeup_icon->closeup_label, XSTR( " class", 434)); } diff --git a/code/missionui/missioncmdbrief.cpp b/code/missionui/missioncmdbrief.cpp index f06ef8c08e..326aced0ef 100644 --- a/code/missionui/missioncmdbrief.cpp +++ b/code/missionui/missioncmdbrief.cpp @@ -193,15 +193,10 @@ static int Voice_ended_time; //static anim_instance *Cur_anim_instance = NULL; static generic_anim Cur_Anim; static char *Cur_anim_filename = "~~~~"; -static int anim_done = 0; - -static int Last_anim_frame_num; static int Cmd_brief_last_voice; static int Cmd_brief_paused = 0; //static int Palette_bmp = -1; -static ubyte Palette[768]; -//static char Palette_name[128]; static int Uses_scroll_buttons = 0; @@ -324,9 +319,6 @@ void cmd_brief_stop_anim(int id) void cmd_brief_new_stage(int stage) { - char *p; - char filename[NAME_LENGTH]; - if (stage < 0) { cmd_brief_stop_anim(-1); Cur_stage = -1; @@ -342,11 +334,6 @@ void cmd_brief_new_stage(int stage) // load a new animation if it's different to what's already playing if (strcmp(Cur_anim_filename, Cur_cmd_brief->stage[stage].ani_filename) != 0) { - // set stuff up - int stream_result = -1; - ubyte bg_type = bm_get_type(Cmd_brief_background_bitmap); - anim_done = 0; - // unload the previous anim if(Cur_Anim.num_frames > 0) { generic_anim_unload(&Cur_Anim); @@ -355,40 +342,8 @@ void cmd_brief_new_stage(int stage) // save new filename Cur_anim_filename = Cur_cmd_brief->stage[stage].ani_filename; - // hi-res support - if (gr_screen.res == GR_1024) { - // attempt to load a hi-res animation - memset(filename, 0, NAME_LENGTH); - strcpy_s(filename, "2_"); - strncat(filename, Cur_anim_filename, NAME_LENGTH - 3); - - // remove extension - p = strchr(filename, '.'); - if(p) { - *p = '\0'; - } - - // attempt to stream the hi-res ani - generic_anim_init(&Cur_Anim, filename); - Cur_Anim.ani.bg_type = bg_type; - stream_result = generic_anim_stream(&Cur_Anim); - } - - // we failed to stream hi-res, or we aren't running in hi-res, so try low-res - if (stream_result < 0) { - strcpy_s(filename, Cur_anim_filename); - - // remove extension - p = strchr(filename, '.'); - if(p) { - *p = '\0'; - } - - // attempt to stream the low-res ani - generic_anim_init(&Cur_Anim, filename); - Cur_Anim.ani.bg_type = bg_type; - stream_result = generic_anim_stream(&Cur_Anim); - } + // try to load the new anim in either high or low res + int stream_result = generic_anim_init_and_stream(&Cur_Anim, Cur_anim_filename, bm_get_type(Cmd_brief_background_bitmap), true); // we've failed to load any animation if (stream_result < 0) { diff --git a/code/missionui/missiondebrief.cpp b/code/missionui/missiondebrief.cpp index 1dddf592b6..ec46e47a8a 100644 --- a/code/missionui/missiondebrief.cpp +++ b/code/missionui/missiondebrief.cpp @@ -713,7 +713,7 @@ void debrief_set_multi_clients( int stage_count, int active_stages[] ) int i; // set up the right briefing for this guy - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ Debriefing = &Debriefings[Net_player->p_info.team]; } else { Debriefing = &Debriefings[0]; @@ -2002,7 +2002,7 @@ void debrief_init() Campaign.loop_mission = CAMPAIGN_LOOP_MISSION_UNINITIALIZED; // set up the right briefing for this guy - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ Debriefing = &Debriefings[Net_player->p_info.team]; } else { Debriefing = &Debriefings[0]; @@ -2634,17 +2634,8 @@ void debrief_do_frame(float frametime) gr_flip(); - // don't let dude skip 3-09. hack. - if(Game_mode & GM_CAMPAIGN_MODE){ - if((Campaign.current_mission >= 0) && (Campaign.current_mission < MAX_CAMPAIGN_MISSIONS)){ - if ((Campaign.missions[Campaign.current_mission].name != NULL) && !stricmp(Campaign.missions[Campaign.current_mission].name, "sm3-09.fs2")) { - Debrief_skip_popup_already_shown = 1; - } - } - } - // maybe show skip mission popup - if ((!Debrief_skip_popup_already_shown) && (Player->show_skip_popup) && (Game_mode & GM_NORMAL) && (Game_mode & GM_CAMPAIGN_MODE) && (Player->failures_this_session >= PLAYER_MISSION_FAILURE_LIMIT) && !(Game_mode & GM_MULTIPLAYER)) { + if ( Must_replay_mission && (!Debrief_skip_popup_already_shown) && (Player->show_skip_popup) && (Game_mode & GM_NORMAL) && (Game_mode & GM_CAMPAIGN_MODE) && (Player->failures_this_session >= PLAYER_MISSION_FAILURE_LIMIT) && !(Game_mode & GM_MULTIPLAYER)) { int popup_choice = popup(0, 3, XSTR("Do Not Skip This Mission", 1473), XSTR("Advance To The Next Mission", 1474), XSTR("Don't Show Me This Again", 1475), diff --git a/code/missionui/missionshipchoice.cpp b/code/missionui/missionshipchoice.cpp index 1b1500ada8..9ffbb21567 100644 --- a/code/missionui/missionshipchoice.cpp +++ b/code/missionui/missionshipchoice.cpp @@ -1481,7 +1481,7 @@ void ship_select_do(float frametime) ////////////////////////////////// // Render and draw the 3D model // ////////////////////////////////// - if( Cmdline_ship_choice_3d || ((Ss_icons != NULL) && (Selected_ss_class >= 0) && (Ss_icons[Selected_ss_class].ss_anim.num_frames > 0)) ) + if( Cmdline_ship_choice_3d || ( (Selected_ss_class >= 0) && (Ss_icons[Selected_ss_class].ss_anim.num_frames == 0)) ) { // check we have a valid ship class selected if ( (Selected_ss_class >= 0) && (ShipSelectModelNum >= 0) ) @@ -1713,6 +1713,12 @@ void start_ship_animation(int ship_class, int play_sound) return; } + //Unload Anim if one was playing + if(Ship_anim_class > 0 && Ss_icons[Ship_anim_class].ss_anim.num_frames > 0) { + generic_anim_unload(&Ss_icons[Ship_anim_class].ss_anim); + Ship_anim_class = -1; + } + // Load the necessary model file ShipSelectModelNum = model_load(sip->pof_file, sip->n_subsystems, &sip->subsystems[0]); @@ -1733,6 +1739,12 @@ void start_ship_animation(int ship_class, int play_sound) ss_icon = &Ss_icons[ship_class]; + //If there was a model loaded for the previous ship, unload it + if (ShipSelectModelNum >= 0 ) { + model_unload(ShipSelectModelNum); + ShipSelectModelNum = -1; + } + //unload the previous anim if(Ship_anim_class > 0 && Ss_icons[Ship_anim_class].ss_anim.num_frames > 0) generic_anim_unload(&Ss_icons[Ship_anim_class].ss_anim); @@ -1764,7 +1776,6 @@ void start_ship_animation(int ship_class, int play_sound) // if ( play_sound ) { gamesnd_play_iface(SND_SHIP_ICON_CHANGE); // } - } void ss_unload_all_anims() @@ -3008,7 +3019,7 @@ void ship_select_init_team_data(int team_num) // determine how many wings we should be checking for Wss_num_wings = 0; - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ // now setup wings for easy reference ss_init_wing_info(0,team_num); } else { @@ -3034,7 +3045,7 @@ void ship_select_common_init() // initialize team critical data for all teams int idx; - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ // initialize for all teams in the game for(idx=0;idxp_info.team); } @@ -3989,7 +3989,7 @@ int wl_drop(int from_bank,int from_list,int to_bank,int to_list, int ship_slot, update = wl_apply(mode, from_bank, from_list, to_bank, to_list, ship_slot, player_index, dont_play_sound); } - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)){ + if(MULTI_TEAM){ // set the global pointers to the right pools common_set_team_pointers(Net_player->p_info.team); } diff --git a/code/model/model.h b/code/model/model.h index eabb48b063..112f228542 100644 --- a/code/model/model.h +++ b/code/model/model.h @@ -315,6 +315,7 @@ typedef struct bsp_info { bool nocollide_this_only; //SUSHI: Like no_collisions, but not recursive. For the "replacement" collision model scheme. bool collide_invisible; //SUSHI: If set, this submodel should allow collisions for invisible textures. For the "replacement" collision model scheme. bool force_turret_normal; //Wanderer: Sets the turret uvec to override any input of for turret normal. + char lod_name[MAX_NAME_LEN]; //FUBAR: Name to be used for LOD naming comparison to preserve compatibility with older tables. Only used on LOD0 float dumb_turn_rate; @@ -350,6 +351,7 @@ typedef struct bsp_info { dumb_turn_rate = 0.f; bsp_data = NULL; rad = 0.f; + lod_name[ 0 ] = '\0'; /* Compound types */ memset( live_debris, 0, sizeof( live_debris ) ); diff --git a/code/model/modelanim.cpp b/code/model/modelanim.cpp index 1303bf8fa1..5413d5d732 100644 --- a/code/model/modelanim.cpp +++ b/code/model/modelanim.cpp @@ -100,7 +100,7 @@ void triggered_rotation::start(queued_animation *q) if (q->accel.a1d[axis] == 0.0f) slow_angle.a1d[axis] = end_angle.a1d[axis]; else - slow_angle.a1d[axis] = end_angle.a1d[axis] - (((q->vel.a1d[axis] * q->vel.a1d[axis]) / (2.0f * q->accel.a1d[axis])) * direction.a1d[axis]); + slow_angle.a1d[axis] = end_angle.a1d[axis] + (((q->vel.a1d[axis] * q->vel.a1d[axis]) / (2.0f * q->accel.a1d[axis])) * direction.a1d[axis]); } nprintf(("ModelAnim", "Dir=[%f, %f, %f], End=[%f, %f, %f], Vel=[%f, %f, %f], Accel=[%f, %f, %f], Slow=[%f, %f, %f]\n", direction.a1d[0], direction.a1d[1], direction.a1d[2], @@ -421,7 +421,7 @@ void model_anim_submodel_trigger_rotate(model_subsystem *psub, ship_subsys *ss) } // if we've over shot the angle, this shouldn't happen but it might if odd values are given - if ( (trigger->current_ang.a1d[i] * trigger->direction.a1d[i]) > (trigger->end_angle.a1d[i] * trigger->direction.a1d[i]) ) { + if ( (trigger->current_ang.a1d[i] * trigger->direction.a1d[i]) >= (trigger->end_angle.a1d[i] * trigger->direction.a1d[i]) ) { trigger->current_ang.a1d[i] = trigger->end_angle.a1d[i]; trigger->current_vel.a1d[i] = 0.0f; not_moving_count++; @@ -654,6 +654,7 @@ int model_anim_get_time_type(ship_subsys *pss, int animation_type, int subtype) int pad = real_time - psub->triggers[i].end; for (int a = 0; a < 3; a++) { + /* float direction = pss->trigger.direction.a1d[a]; // if it's in the final slowdown phase then it really isn't _that_ bad @@ -687,8 +688,29 @@ int model_anim_get_time_type(ship_subsys *pss, int animation_type, int subtype) ani_time = a_time; } } + */ + // Wanderer Way -- START + // end_angle = S(2) + triggered_rotation tr = pss->trigger; + float end_angle = (tr.current_ang.a1d[a] + (((tr.rot_vel.a1d[a]*tr.rot_vel.a1d[a]) - (tr.current_vel.a1d[a]*tr.current_vel.a1d[a])) / (2*tr.rot_accel.a1d[a]))); + + if (end_angle > tr.slow_angle.a1d[a]) { + //T(total) = (2V(maximum) - V(initial))/a + (S(turnpoint) - S(initial) + (V(initial)^2 - V(maximum)^2)/2a) / V(maximum) + a_time = fl2i(((((2*tr.rot_vel.a1d[a]) - tr.current_ang.a1d[a])/tr.rot_accel.a1d[a]) + tr.slow_angle.a1d[a] - tr.current_ang.a1d[a] + (((tr.current_vel.a1d[a]*tr.current_vel.a1d[a]) - (tr.rot_vel.a1d[a]*tr.rot_vel.a1d[a])) / (2*tr.rot_accel.a1d[a])))*1000.0f); + if (ani_time < a_time) + ani_time = a_time; + } else { + //T(total) = 2 * sqrt((S(final) - S(initial))/a - ( (V(initial)/a)^2 ) / 2 ) - V(initial)/a + a_time = fl2i((2 * fl_sqrt(((tr.end_angle.a1d[a] - tr.current_ang.a1d[a])/tr.rot_accel.a1d[a]) - ((tr.current_vel.a1d[a] * tr.current_vel.a1d[a]) / (tr.rot_accel.a1d[a] * tr.rot_accel.a1d[a])) / 2) - (tr.current_vel.a1d[a] / tr.rot_accel.a1d[a]))*1000.0f); + if (ani_time < a_time) + ani_time = a_time; + } + + // Wanderer Way -- END + } + if (ani_time) ani_time += pad; } else { diff --git a/code/model/modelread.cpp b/code/model/modelread.cpp index 5803434786..67cdf4c193 100644 --- a/code/model/modelread.cpp +++ b/code/model/modelread.cpp @@ -1335,6 +1335,9 @@ int read_model_file(polymodel * pm, char *filename, int n_subsystems, model_subs else pm->submodel[n].gun_rotation = false; + if ( (p = strstr(props, "$lod0_name")) != NULL) + get_user_prop_value(p+10, pm->submodel[n].lod_name); + if ( (p = strstr(props, "$detail_box:")) != NULL ) { p += 12; while (*p == ' ') p++; @@ -1502,6 +1505,13 @@ int read_model_file(polymodel * pm, char *filename, int n_subsystems, model_subs else pm->submodel[n].is_thruster=0; + // Genghis: if we have a thruster and none of the collision + // properties were provided, then set "nocollide_this_only". + if (pm->submodel[n].is_thruster && !(pm->submodel[n].no_collisions) && !(pm->submodel[n].nocollide_this_only) && !(pm->submodel[n].collide_invisible) ) + { + pm->submodel[n].nocollide_this_only = true; + } + if ( strstr( pm->submodel[n].name, "-destroyed") ) pm->submodel[n].is_damaged=1; else @@ -2483,7 +2493,14 @@ int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, in } sm1->num_details = 0; - l1 = strlen(sm1->name); + // If a backward compatibility LOD name is declared use it + if (strlen(sm1->lod_name) != 0) { + l1=strlen(sm1->lod_name); + } + // otherwise use the name for LOD comparision + else { + l1 = strlen(sm1->name); + } for (j=0; jnum_debris_objects;j++ ) { if ( i == pm->debris_objects[j] ) { @@ -2508,19 +2525,36 @@ int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, in } // if sm2 is a detail of sm1 and sm1 is a high detail, then add it to sm1's list - if ((int)strlen(sm2->name)!=l1) continue; + if ((int)strlen(sm2->name)!=l1) continue; int ndiff = 0; int first_diff = 0; for ( k=0; kname[k] != sm2->name[k] ) { - if (ndiff==0) first_diff = k; - ndiff++; + // If a backward compatibility LOD name is declared use it + if (strlen(sm1->lod_name) != 0) { + if (sm1->lod_name[k] != sm2->name[k] ) { + if (ndiff==0) first_diff = k; + ndiff++; + } + } + // otherwise do the standard LOD comparision + else { + if (sm1->name[k] != sm2->name[k] ) { + if (ndiff==0) first_diff = k; + ndiff++; + } } } if (ndiff==1) { // They only differ by one character! int dl1, dl2; - dl1 = tolower(sm1->name[first_diff]) - 'a'; + // If a backward compatibility LOD name is declared use it + if (strlen(sm1->lod_name) != 0) { + dl1 = tolower(sm1->lod_name[first_diff]) - 'a'; + } + // otherwise do the standard LOD comparision + else { + dl1 = tolower(sm1->name[first_diff]) - 'a'; + } dl2 = tolower(sm2->name[first_diff]) - 'a'; if ( (dl1<0) || (dl2<0) || (dl1>=MAX_MODEL_DETAIL_LEVELS) || (dl2>=MAX_MODEL_DETAIL_LEVELS) ) continue; // invalid detail levels @@ -2529,7 +2563,7 @@ int model_load(char *filename, int n_subsystems, model_subsystem *subsystems, in dl2--; // Start from 1 up... if (dl2 >= sm1->num_details ) sm1->num_details = dl2+1; sm1->details[dl2] = j; - //mprintf(( "Submodel '%s' is detail level %d of '%s'\n", sm2->name, dl2, sm1->name )); + mprintf(( "Submodel '%s' is detail level %d of '%s'\n", sm2->name, dl2 + 1, sm1->name )); } } } @@ -2784,11 +2818,13 @@ float submodel_get_radius( int modelnum, int submodelnum ) polymodel * model_get(int model_num) { - Assert( model_num > -1 ); + Assert( model_num >= 0 ); + if ( model_num < 0 ) + return NULL; int num = model_num % MAX_POLYGON_MODELS; - Assert( num > -1 ); + Assert( num >= 0 ); Assert( num < MAX_POLYGON_MODELS ); Assert( Polygon_models[num] ); Assert( Polygon_models[num]->id == model_num ); diff --git a/code/nebula/neb.cpp b/code/nebula/neb.cpp index ba56464852..6d1910484b 100644 --- a/code/nebula/neb.cpp +++ b/code/nebula/neb.cpp @@ -279,6 +279,9 @@ void neb2_init() if(Neb2_bitmap_count < MAX_NEB2_BITMAPS){ strcpy_s(Neb2_bitmap_filenames[Neb2_bitmap_count++], name); } + else { + WarningEx(LOCATION, "nebula.tbl\nExceeded maximum number of nebulas (%d)!\nSkipping %s.", MAX_NEB2_BITMAPS, name); + } } // poofs @@ -291,6 +294,9 @@ void neb2_init() if(Neb2_poof_count < MAX_NEB2_POOFS){ strcpy_s(Neb2_poof_filenames[Neb2_poof_count++], name); } + else { + WarningEx(LOCATION, "nebula.tbl\nExceeded maximum number of nebula poofs (%d)!\nSkipping %s.", MAX_NEB2_POOFS, name); + } } //Distance diff --git a/code/network/multi.h b/code/network/multi.h index ed16feb1ed..5a3e1342eb 100644 --- a/code/network/multi.h +++ b/code/network/multi.h @@ -99,7 +99,7 @@ struct player; #define IPX_PORT_LENGTH 2 // length of the port field for an IPX address // netgame defines -#define RESPAWN_ANARCHY (0xffffffff)// respawn setting for an "anarchy" style game +// #define RESPAWN_ANARCHY (0xffffffff)// respawn setting for an "anarchy" style game #define MP_SINGLE 0 // not playing a campaign - single mission #define MP_CAMPAIGN 1 // playing a campaign @@ -290,15 +290,15 @@ extern int Om_tracker_flag; // join request denial codes #define JOIN_DENY_JR_STATE 0 // join request is rejected because the game is not in the proper state -#define JOIN_DENY_JR_TRACKER_INVAL 1 // join request is rejected because the game is an MT game and the passed player info is invalid -#define JOIN_DENY_JR_PASSWD 2 // join request is rejected because the game is password protected and the password sent is incorrect -#define JOIN_DENY_JR_CLOSED 3 // join request is rejected because the game is closed and is currently ingame -#define JOIN_DENY_JR_RANK_HIGH 4 // join request is rejected because the game is rank based and the passed rank is too high +#define JOIN_DENY_JR_TRACKER_INVAL 1 // join request is rejected because the game is an MT game and the passed player info is invalid +#define JOIN_DENY_JR_PASSWD 2 // join request is rejected because the game is password protected and the password sent is incorrect +#define JOIN_DENY_JR_CLOSED 3 // join request is rejected because the game is closed and is currently ingame +#define JOIN_DENY_JR_RANK_HIGH 4 // join request is rejected because the game is rank based and the passed rank is too high #define JOIN_DENY_JR_RANK_LOW 5 // join request is rejected because the game is rank based and the passed rank is too low #define JOIN_DENY_JR_DUP 6 // join request is denied because there is an exiting netplayer with matching characteristics #define JOIN_DENY_JR_FULL 7 // join request is denied because the game is full #define JOIN_DENY_JR_TEMP_CLOSED 8 // join request is denied because the _forming_ netgame has been toggled closed -#define JOIN_DENY_JR_BANNED 9 // join request is denied because the player has been banned for the duration of the game +#define JOIN_DENY_JR_BANNED 9 // join request is denied because the player has been banned for the duration of the game #define JOIN_DENY_JR_NOOBS 10 // join request is denied because observers are not allowed #define JOIN_DENY_JR_INGAME_JOIN 11 // join request is denied because someone else is already ingame joining #define JOIN_DENY_JR_BAD_VERSION 12 // incompatible version types @@ -313,7 +313,7 @@ extern int Om_tracker_flag; #define REPAIR_INFO_ABORT 0x5 // server to client - client has aborted a rearm/repair #define REPAIR_INFO_BROKEN 0x6 // server to client - client is breaking repair -- might be reestablished #define REPAIR_INFO_WARP_ADD 0x7 // server to client - add client onto list of people for arriving support ship -#define REPAIR_INFO_WARP_REMOVE 0x8 // server to client - remove client from list of people for arriving support ship +#define REPAIR_INFO_WARP_REMOVE 0x8 // server to client - remove client from list of people for arriving support ship #define REPAIR_INFO_ONWAY 0x9 // server to client - repair ship on way #define REPAIR_INFO_KILLED 0xa // server to client - repair ship was killed on way to rearm player #define REPAIR_INFO_COMPLETE 0xb // server to client - repair of your ship is complete @@ -322,7 +322,7 @@ extern int Om_tracker_flag; #define DEBRIS_UPDATE_UPDATE 0x1 // update a piece #define DEBRIS_UPDATE_REMOVE 0x2 // remove a piece of debris #define DEBRIS_UPDATE_NUKE 0x3 // blow up a piece of debris -#define DEBRIS_UPDATE_CREATE_HULL 0x4 // create a piece of debris +#define DEBRIS_UPDATE_CREATE_HULL 0x4 // create a piece of debris // weapon select/ship select update packets #define WSS_WEAPON_SELECT 0x1 // ship select stuff @@ -336,7 +336,7 @@ extern int Om_tracker_flag; // accept player data codes #define APD_NEXT 0 // there is still more player data -#define APD_END_PACKET 1 // end of this packet +#define APD_END_PACKET 1 // end of this packet #define APD_END_DATA 2 // end of the data // ingame ship request codes @@ -357,18 +357,18 @@ extern int Om_tracker_flag; // asteroid stuff #define ASTEROID_CREATE 0x1 // create an asteroid #define ASTEROID_THROW 0x2 // throw an asteroid -#define ASTEROID_HIT 0x3 // asteroid hit occured +#define ASTEROID_HIT 0x3 // asteroid hit occured // commands for squadmate messages #define SQUAD_MSG_SHIP 0x1 #define SQUAD_MSG_WING 0x2 #define SQUAD_MSG_ALL 0x3 -#define SQUAD_MSG_REINFORCEMENT 0x4 +#define SQUAD_MSG_REINFORCEMENT 0x4 // SW_STD_QUERY codes #define SW_STD_START 0x1 // from host to standalone saying "query the tracker" #define SW_STD_OK 0x2 // from standalone to host - "everything is cool" -#define SW_STD_BAD 0x3 // from standalone to host - "everything is bad" +#define SW_STD_BAD 0x3 // from standalone to host - "everything is bad" // stats block packet #define STATS_MISSION 0 // all stats for the mission (except kills), for one player @@ -578,6 +578,7 @@ typedef struct server_item { #define JOIN_FLAG_AS_OBSERVER (1<<0) // wants to join as an aboserver #define JOIN_FLAG_HAS_CD (1<<1) // currently has a CD in the drive #define JOIN_FLAG_HAXOR (1<<2) // if the player has hacked data + typedef struct join_request { char passwd[MAX_PASSWD_LEN+1]; // password for a password protected game char callsign[CALLSIGN_LEN+1]; // player's callsign @@ -613,33 +614,33 @@ typedef struct network_buffer { #define NETINFO_FLAG_MT_FAILED (1<<3) // all attempts to connect have failed #define NETINFO_FLAG_MT_STARTUP (1<<4) // the initial state (ie, we haven't tried anything yet) #define NETINFO_FLAG_GAME_HOST (1<<5) // I'm the host -#define NETINFO_FLAG_INGAME_JOIN (1<<6) // means he is still in the process of joining ingame -#define NETINFO_FLAG_OBSERVER (1<<7) // means he's an observer +#define NETINFO_FLAG_INGAME_JOIN (1<<6) // means he is still in the process of joining ingame +#define NETINFO_FLAG_OBSERVER (1<<7) // means he's an observer #define NETINFO_FLAG_OBS_PLAYER (1<<8) // means he's an observer, but he was formerly a player (should show his stats) -#define NETINFO_FLAG_LIMBO (1<<9) // (client side) means he has to choose whether to be an observer or quit (no more respawns) +#define NETINFO_FLAG_LIMBO (1<<9) // (client side) means he has to choose whether to be an observer or quit (no more respawns) #define NETINFO_FLAG_MISSION_OK (1<<10) // this client's mission has been verified #define NETINFO_FLAG_RESPAWNING (1<<11) // so that we wait on a keypress, or other user input before respawning #define NETINFO_FLAG_DO_NETWORKING (1<<12) // set when we can send/receive data -#define NETINFO_FLAG_TEAM_LOCKED (1<<13) // if this is set, only the host can modify the team settings for this player +#define NETINFO_FLAG_TEAM_LOCKED (1<<13) // if this is set, only the host can modify the team settings for this player #define NETINFO_FLAG_TEAM_CAPTAIN (1<<14) // this player is the captain of his team #define NETINFO_FLAG_KICKED (1<<15) // this player was kicked #define NETINFO_FLAG_ACCEPT_INGAME (1<<16) // accepted ingame -#define NETINFO_FLAG_ACCEPT_HOST (1<<17) // accetped as host +#define NETINFO_FLAG_ACCEPT_HOST (1<<17) // accetped as host #define NETINFO_FLAG_ACCEPT_OBSERVER (1<<18) // accepted as observer #define NETINFO_FLAG_ACCEPT_CLIENT (1<<19) // accepted as client -#define NETINFO_FLAG_WARPING_OUT (1<<20) // clients keep track of this for themselves to know if they should be leaving +#define NETINFO_FLAG_WARPING_OUT (1<<20) // clients keep track of this for themselves to know if they should be leaving #define NETINFO_FLAG_HAS_CD (1<<21) // the player has a CD in the drive -#define NETINFO_FLAG_RELIABLE_CONNECTED (1<<22) // reliable socket is now active +#define NETINFO_FLAG_RELIABLE_CONNECTED (1<<22) // reliable socket is now active #define NETINFO_FLAG_MT_GET_FAILED (1<<23) // set during MT stats update process indicating we didn't properly get his stats #define NETINFO_FLAG_MT_SEND_FAILED (1<<24) // set during MT stats update process indicating we didn't properly send his stats -#define NETINFO_FLAG_MT_DONE (1<<25) // set when a player has been processed for stats (fail, succeed, or otherwise) -#define NETINFO_FLAG_HAXOR (1<<26) // the player has some form of hacked client data +#define NETINFO_FLAG_MT_DONE (1<<25) // set when a player has been processed for stats (fail, succeed, or otherwise) +#define NETINFO_FLAG_HAXOR (1<<26) // the player has some form of hacked client data #define NETPLAYER_IS_OBSERVER(player) (player->flags & (NETINFO_FLAG_OBSERVER|NETINFO_FLAG_OBS_PLAYER)) #define NETPLAYER_IS_DEAD(player) (player->flags & (NETINFO_FLAG_LIMBO|NETINFO_FLAG_RESPAWNING)) // netgame modes -#define NG_MODE_OPEN 1 // an open game +#define NG_MODE_OPEN 1 // an open game #define NG_MODE_CLOSED 2 // a closed game #define NG_MODE_PASSWORD 3 // a password protected game #define NG_MODE_RESTRICTED 4 // a restricted game @@ -650,16 +651,16 @@ typedef struct network_buffer { #define NG_FLAG_TEMP_CLOSED (1<<0) // a forming netgame is temporarily closed (should not be checked otherwise) #define NG_FLAG_SERVER_LOST (1<<1) // client has temporarily lost contact with the server #define NG_FLAG_INGAME_JOINING (1<<2) // someone is ingame joining. -#define NG_FLAG_INGAME_JOINING_CRITICAL (1<<3) // someone is ingame joining and at the critical point where we cannot do certain things. +#define NG_FLAG_INGAME_JOINING_CRITICAL (1<<3) // someone is ingame joining and at the critical point where we cannot do certain things. #define NG_FLAG_STORED_MT_STATS (1<<4) // stored tracker stats in the debriefing already -#define NG_FLAG_HACKED_SHIPS_TBL (1<<5) // set when the server is playing with a hacked ships.tbl (only needed to notify hosts playing on a standalone) +#define NG_FLAG_HACKED_SHIPS_TBL (1<<5) // set when the server is playing with a hacked ships.tbl (only needed to notify hosts playing on a standalone) #define NG_FLAG_HACKED_WEAPONS_TBL (1<<6) // set when the server is playing with a hacked weapons.tbl (only needed to notify hosts playing on a standalone) // netgame type flags -#define NG_TYPE_COOP (1<<0) // cooperative mode +#define NG_TYPE_COOP (1<<0) // cooperative mode #define NG_TYPE_TVT (1<<1) // team vs. team mode #define NG_TYPE_SW (1<<2) // squad war -#define NG_TYPE_TEAM ( NG_TYPE_TVT | NG_TYPE_SW ) +#define NG_TYPE_TEAM ( NG_TYPE_TVT | NG_TYPE_SW ) #define NG_TYPE_DOGFIGHT (1<<3) // plain old dogfight mode // some quick macros for the above @@ -674,32 +675,32 @@ typedef struct network_buffer { // state defines for netgame states #define NETGAME_STATE_FORMING 1 // players are joining, host is selecting missions, etc -#define NETGAME_STATE_BRIEFING 2 // players are reading the mission briefing +#define NETGAME_STATE_BRIEFING 2 // players are reading the mission briefing #define NETGAME_STATE_IN_MISSION 3 // the mission itself is being played -#define NETGAME_STATE_SERVER_TRANSFER 4 // server status is being transferred from one computer to another +#define NETGAME_STATE_SERVER_TRANSFER 4 // server status is being transferred from one computer to another #define NETGAME_STATE_PAUSED 5 // the netgame is paused #define NETGAME_STATE_DEBRIEF 6 // the debriefing screen -#define NETGAME_STATE_MISSION_SYNC 7 // client/server data sync screens before and after the briefing stage +#define NETGAME_STATE_MISSION_SYNC 7 // client/server data sync screens before and after the briefing stage #define NETGAME_STATE_ENDGAME 8 // game is moving from gameplay to the debriefing state -#define NETGAME_STATE_STD_HOST_SETUP 9 // the host is on the setup netgame screen for the standalone server +#define NETGAME_STATE_STD_HOST_SETUP 9 // the host is on the setup netgame screen for the standalone server #define NETGAME_STATE_HOST_SETUP 10 // the host is on the setup netgame screen _non_ standalone // state defines for netplayer states #define NETPLAYER_STATE_JOINING 0 // joining the netgame #define NETPLAYER_STATE_JOINED 1 // has joined and opened a reliable socket connection -#define NETPLAYER_STATE_MISSION_LOADING 2 // in the process of loading the mission +#define NETPLAYER_STATE_MISSION_LOADING 2 // in the process of loading the mission #define NETPLAYER_STATE_MISSION_LOADED 3 // mission loaded -#define NETPLAYER_STATE_BRIEFING 4 // in the briefing +#define NETPLAYER_STATE_BRIEFING 4 // in the briefing #define NETPLAYER_STATE_SHIP_SELECT 5 // in the ship selection screen #define NETPLAYER_STATE_WEAPON_SELECT 6 // in the weapon selection screen #define NETPLAYER_STATE_DATA_LOAD 7 // loading specific data (textures, etc) #define NETPLAYER_STATE_WAITING 8 // waiting to do something (like enter the mission) -#define NETPLAYER_STATE_SLOT_ACK 9 // got player ship slot packets +#define NETPLAYER_STATE_SLOT_ACK 9 // got player ship slot packets #define NETPLAYER_STATE_IN_MISSION 10 // in the mission itself #define NETPLAYER_STATE_INGAME_SHIPS 11 // player is receiving ingame join ship data #define NETPLAYER_STATE_INGAME_WINGS 12 // player is receiving ingame join wing data #define NETPLAYER_STATE_INGAME_RPTS 13 // player is receiving ingame join respawn data -#define NETPLAYER_STATE_INGAME_SHIP_SELECT 14 // player is in the ship select screen for ingame join +#define NETPLAYER_STATE_INGAME_SHIP_SELECT 14 // player is in the ship select screen for ingame join #define NETPLAYER_STATE_DEBRIEF 15 // player is in the debrief state (screen) #define NETPLAYER_STATE_MISSION_SYNC 16 // player is in the mission sync screen #define NETPLAYER_STATE_STD_HOST_SETUP 17 // the host is on the setup netgame screen for the standalone server @@ -708,8 +709,8 @@ typedef struct network_buffer { #define NETPLAYER_STATE_SLOTS_ACK 20 // the player has received wss slots data (ingame join only) #define NETPLAYER_STATE_POST_DATA_ACK 21 // the player has received the post briefing data block #define NETPLAYER_STATE_WSS_ACK 22 // have received weapon slot information -#define NETPLAYER_STATE_FLAG_ACK 23 // the player has received his flag change information -#define NETPLAYER_STATE_MT_STATS 24 // the server is in the process of requesting or updating stats from the MT +#define NETPLAYER_STATE_FLAG_ACK 23 // the player has received his flag change information +#define NETPLAYER_STATE_MT_STATS 24 // the server is in the process of requesting or updating stats from the MT #define NETPLAYER_STATE_MISSION_XFER 25 // the player is in the process of receiving a mission file #define NETPLAYER_STATE_INGAME_STUFF 26 // received ingame "stuff" happens just before ship selection #define NETPLAYER_STATE_DEBRIEF_ACCEPT 27 // the player has hit the accept button in the debrief and is good to go diff --git a/code/network/multi_respawn.cpp b/code/network/multi_respawn.cpp index 1c4ebb6a8c..4990ae2cd6 100644 --- a/code/network/multi_respawn.cpp +++ b/code/network/multi_respawn.cpp @@ -195,7 +195,7 @@ void multi_respawn_player_leave(net_player *pl) } // dogfight mode - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)){ + if(MULTI_DOGFIGHT){ return; } diff --git a/code/network/multi_sexp.cpp b/code/network/multi_sexp.cpp index e0551502f3..cf3ff3b9cf 100644 --- a/code/network/multi_sexp.cpp +++ b/code/network/multi_sexp.cpp @@ -133,7 +133,7 @@ void multi_sexp_maybe_send_packet() return; } - send_sexp_packet(data, packet_end + 1); + send_sexp_packet(data, sub_packet_size); j = 0; //Slide down any entries after the stored index to the start of the array. @@ -143,12 +143,21 @@ void multi_sexp_maybe_send_packet() j++; } - // if we have an existing argument count we need to update where to put it too - if (current_argument_count) { - argument_count_index -= sub_packet_size; + packet_size = j; + + // flush the remaining type buffer + for (i = j ; i < MAX_PACKET_SIZE ; i++) { + type[i] = -1; } - packet_size = j; + // if we have an existing argument count we need to update where to put it too + if (current_argument_count) { + argument_count_index = argument_count_index - sub_packet_size; + } + + Assert(argument_count_index >=0); + + } // flushes out the packet and sends any data still in there @@ -197,6 +206,8 @@ void multi_send_ship(int shipnum) } multi_send_ship(&Ships[shipnum]); + + multi_sexp_maybe_send_packet(); } void multi_send_ship(ship *shipp) diff --git a/code/network/multi_voice.cpp b/code/network/multi_voice.cpp index b58dd29c43..64937879f8 100644 --- a/code/network/multi_voice.cpp +++ b/code/network/multi_voice.cpp @@ -1065,7 +1065,7 @@ void multi_voice_player_send_stream() ubyte data[MAX_PACKET_SIZE],code,*rbuf,msg_mode,chunk_index; ushort chunk_size,uc_size; int packet_size = 0; - int sound_size,size_sent,uncompressed_size,target_index,max_chunk_size; + int sound_size,size_sent,target_index,max_chunk_size; float gain; double d_gain; @@ -1073,7 +1073,7 @@ void multi_voice_player_send_stream() Assert(Multi_voice_can_record); // get the data - rtvoice_get_data((unsigned char**)&Multi_voice_record_buffer,&sound_size,&uncompressed_size,&d_gain, NULL, NULL); + rtvoice_get_data((unsigned char**)&Multi_voice_record_buffer, &sound_size, &d_gain); gain = (float)d_gain; msg_mode = (ubyte)Multi_voice_send_mode; @@ -1117,8 +1117,8 @@ void multi_voice_player_send_stream() // add the current stream id# ADD_DATA(Multi_voice_stream_id); - Assert(uncompressed_size < MULTI_VOICE_MAX_BUFFER_SIZE); - uc_size = (ushort)uncompressed_size; + Assert(sound_size < MULTI_VOICE_MAX_BUFFER_SIZE); + uc_size = (ushort)sound_size; ADD_USHORT(uc_size); // add the chunk index @@ -1478,7 +1478,7 @@ int multi_voice_max_chunk_size(int msg_mode) // process the "next" chunk of standalone valid sound data from the rtvoice system void multi_voice_process_next_chunk() { - int sound_size,uncompressed_size; + int sound_size; float gain; double d_gain; voice_stream *str; @@ -1487,7 +1487,7 @@ void multi_voice_process_next_chunk() Assert(Multi_voice_can_record); // get the data - rtvoice_get_data((unsigned char**)&Multi_voice_record_buffer,&sound_size,&uncompressed_size,&d_gain, NULL, NULL); + rtvoice_get_data((unsigned char**)&Multi_voice_record_buffer, &sound_size, &d_gain); gain = (float)d_gain; // if we've reached the max # of packets for this stream, bail @@ -1524,7 +1524,7 @@ void multi_voice_process_next_chunk() memcpy(str->accum_buffer[Multi_voice_current_stream_index],Multi_voice_record_buffer,sound_size); str->stream_from = Net_player->player_id; str->accum_buffer_flags[Multi_voice_current_stream_index] = 1; - str->accum_buffer_usize[Multi_voice_current_stream_index] = (ushort)uncompressed_size; + str->accum_buffer_usize[Multi_voice_current_stream_index] = (ushort)sound_size; str->accum_buffer_csize[Multi_voice_current_stream_index] = (ushort)sound_size; str->accum_buffer_gain[Multi_voice_current_stream_index] = d_gain; @@ -1945,7 +1945,7 @@ void multi_voice_alg_play_window(int stream_index) } // now call the rtvoice playback functions - Multi_voice_stream[stream_index].stream_snd_handle = rtvoice_play_uncompressed(Multi_voice_stream[stream_index].stream_rtvoice_handle,(unsigned char*)Multi_voice_playback_buffer,buffer_offset); + Multi_voice_stream[stream_index].stream_snd_handle = rtvoice_play(Multi_voice_stream[stream_index].stream_rtvoice_handle,(unsigned char*)Multi_voice_playback_buffer,buffer_offset); Multi_voice_stream[stream_index].stream_start_time = timer_get_fixed_seconds(); } @@ -2041,8 +2041,8 @@ int Multi_voice_test_packet_tossed = 0; // process the next chunk of voice data void multi_voice_test_process_next_chunk() { - unsigned char *outbuf,*outbuf_raw; - int compressed_size,uncompressed_size,raw_size; + unsigned char *outbuf; + int size; double gain; // if the test recording stamp is -1, we should stop @@ -2063,17 +2063,17 @@ void multi_voice_test_process_next_chunk() } // otherwise get the compressed and uncompressed data and do something interesting with it - rtvoice_get_data(&outbuf,&compressed_size,&uncompressed_size,&gain,&outbuf_raw,&raw_size); + rtvoice_get_data(&outbuf, &size, &gain); // determine whether the packet would have been dropped - if(compressed_size > multi_voice_max_chunk_size(MULTI_MSG_ALL)){ + if (size > multi_voice_max_chunk_size(MULTI_MSG_ALL)) { Multi_voice_test_packet_tossed = 1; } else { Multi_voice_test_packet_tossed = 0; } // send the raw output buffer to the voice options screen - options_multi_set_voice_data(outbuf_raw,raw_size,outbuf,compressed_size,uncompressed_size,gain); + options_multi_set_voice_data(outbuf, size, gain); } // start recording voice locally for playback testing diff --git a/code/network/multimsgs.cpp b/code/network/multimsgs.cpp index 5d7bed08be..78111d42c1 100644 --- a/code/network/multimsgs.cpp +++ b/code/network/multimsgs.cpp @@ -3347,7 +3347,7 @@ void send_mission_log_packet( int num ) int sindex; log_entry *entry; - Assert ( (Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) ); + Assert ( MULTIPLAYER_MASTER ); // get the data from the log entry = &log_entries[num]; @@ -3375,7 +3375,7 @@ void process_mission_log_packet( ubyte *data, header *hinfo ) char pname[NAME_LENGTH], sname[NAME_LENGTH]; fix timestamp; - Assert ( (Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) ); + Assert ( MULTIPLAYER_CLIENT ); offset = HEADER_LENGTH; GET_DATA(type); diff --git a/code/object/objcollide.cpp b/code/object/objcollide.cpp index fb58c5f3bf..1fa8c6aecb 100644 --- a/code/object/objcollide.cpp +++ b/code/object/objcollide.cpp @@ -753,12 +753,14 @@ int weapon_will_never_hit( object *obj_weapon, object *other, obj_pair * current float max_vel_weapon, max_vel_other; - max_vel_weapon = wp->weapon_max_vel; - - if ((wp->lssm_stage==5)) - { + //SUSHI: Fix bug where additive weapon velocity screws up collisions + //Assumes that weapons which don't home don't change speed, which is currently the case. + if (!(wip->wi_flags & WIF_TURNS)) + max_vel_weapon = obj_weapon->phys_info.speed; + else if ((wp->lssm_stage==5)) max_vel_weapon = wip->lssm_stage5_vel; - } + else + max_vel_weapon = wp->weapon_max_vel; max_vel_other = other->phys_info.max_vel.xyz.z; if (max_vel_other < 10.0f) { diff --git a/code/object/object.cpp b/code/object/object.cpp index caf95b89f2..33d91c85a4 100644 --- a/code/object/object.cpp +++ b/code/object/object.cpp @@ -790,6 +790,8 @@ void obj_move_call_physics(object *objp, float frametime) int points = pm->missile_banks[i].num_slots; int missles_left = shipp->weapons.secondary_bank_ammo[i]; int next_point = shipp->weapons.secondary_next_slot[i]; + float fire_wait = Weapon_info[shipp->weapons.secondary_bank_weapons[i]].fire_wait; + float reload_time = (fire_wait == 0.0f) ? 1.0f : 1.0f / fire_wait; //ok so...we want to move up missles but only if there is a missle there to be moved up //there is a missle behind next_point, and how ever many missles there are left after that @@ -799,7 +801,7 @@ void obj_move_call_physics(object *objp, float frametime) for (int k = next_point; k < next_point+missles_left; k ++) { float &s_pct = shipp->secondary_point_reload_pct[i][k % points]; if (s_pct < 1.0) - s_pct += shipp->reload_time[i] * frametime; + s_pct += reload_time * frametime; if (s_pct > 1.0) s_pct = 1.0f; } @@ -808,7 +810,7 @@ void obj_move_call_physics(object *objp, float frametime) for (int k = 0; k < points; k++) { float &s_pct = shipp->secondary_point_reload_pct[i][k]; if (s_pct < 1.0) - s_pct += shipp->reload_time[i] * frametime; + s_pct += reload_time * frametime; if (s_pct > 1.0) s_pct = 1.0f; } @@ -1927,7 +1929,6 @@ void object_set_gliding(object *objp, bool enable) if(enable) { objp->phys_info.flags |= PF_GLIDING; - objp->phys_info.glide_saved_vel = Player_obj->phys_info.vel; } else { objp->phys_info.flags &= ~PF_GLIDING; vm_vec_rotate(&objp->phys_info.prev_ramp_vel, &objp->phys_info.vel, &objp->orient); //Backslash diff --git a/code/object/objectdock.cpp b/code/object/objectdock.cpp index 6965565a6f..d28c89fff3 100644 --- a/code/object/objectdock.cpp +++ b/code/object/objectdock.cpp @@ -9,6 +9,7 @@ #include "globalincs/pstypes.h" #include "object/objectdock.h" #include "object/object.h" +#include "math/bitarray.h" #include "ship/ship.h" #include "math/vecmat.h" #include "mission/missionparse.h" @@ -18,7 +19,7 @@ // helper prototypes -void dock_evaluate_tree(object *objp, dock_function_info *infop, void (*function)(object *, dock_function_info *), bool *visited_bitstring); +void dock_evaluate_tree(object *objp, dock_function_info *infop, void (*function)(object *, dock_function_info *), ubyte *visited_bitstring); void dock_move_docked_children_tree(object *objp, object *parent_objp); void dock_count_total_docked_objects_helper(object *objp, dock_function_info *infop); void dock_check_find_docked_object_helper(object *objp, dock_function_info *infop); @@ -329,10 +330,10 @@ void dock_evaluate_all_docked_objects(object *objp, dock_function_info *infop, v else { // create a bit array to mark the objects we check - bool *visited_bitstring = (bool *) malloc( Num_objects * sizeof( bool ) ); + ubyte *visited_bitstring = (ubyte *) malloc(calculate_num_bytes(Num_objects)); // clear it - memset(visited_bitstring, 0, Num_objects * sizeof( bool ) ); + memset(visited_bitstring, 0, calculate_num_bytes(Num_objects)); // start evaluating the tree dock_evaluate_tree(objp, infop, function, visited_bitstring); @@ -343,14 +344,14 @@ void dock_evaluate_all_docked_objects(object *objp, dock_function_info *infop, v } } -void dock_evaluate_tree(object *objp, dock_function_info *infop, void (*function)(object *, dock_function_info *), bool *visited_bitstring) +void dock_evaluate_tree(object *objp, dock_function_info *infop, void (*function)(object *, dock_function_info *), ubyte *visited_bitstring) { // make sure we haven't visited this object already - if ( visited_bitstring[ OBJ_INDEX(objp) ] ) + if (get_bit(visited_bitstring, OBJ_INDEX(objp))) return; // mark as visited - visited_bitstring[ OBJ_INDEX(objp) ] = true; + set_bit(visited_bitstring, OBJ_INDEX(objp)); // call the function for this object, and return if instructed function(objp, infop); diff --git a/code/object/objectshield.cpp b/code/object/objectshield.cpp index f122f784a7..2dd3dd8d62 100644 --- a/code/object/objectshield.cpp +++ b/code/object/objectshield.cpp @@ -49,7 +49,9 @@ void shield_add_strength(object *objp, float delta) if (delta == 0.0f) return; - if (!(Ai_info[Ships[objp->instance].ai_index].ai_profile_flags & AIPF_SMART_SHIELD_MANAGEMENT)) + + if (!(Ai_info[Ships[objp->instance].ai_index].ai_profile_flags & AIPF_SMART_SHIELD_MANAGEMENT) + || delta <= 0.0f) //SUSHI: We don't want smart shield management for negative delta { for (int i = 0; i < MAX_SHIELD_SECTIONS; i++) shield_add_quad(objp, i, delta / MAX_SHIELD_SECTIONS); diff --git a/code/object/parseobjectdock.cpp b/code/object/parseobjectdock.cpp index 5b6923af1e..b3a4261580 100644 --- a/code/object/parseobjectdock.cpp +++ b/code/object/parseobjectdock.cpp @@ -9,13 +9,14 @@ #include "globalincs/pstypes.h" #include "object/parseobjectdock.h" #include "mission/missionparse.h" +#include "math/bitarray.h" // helper prototypes -void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), bool *visited_bitstring); +void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), ubyte *visited_bitstring); void dock_dock_docked_children_tree(p_object *objp, p_object *parent_objp); @@ -114,10 +115,10 @@ void dock_evaluate_all_docked_objects(p_object *objp, p_dock_function_info *info else { // create a bit array to mark the objects we check - bool *visited_bitstring = (bool *) malloc( Parse_objects.size() * sizeof(bool) ); + ubyte *visited_bitstring = (ubyte *) malloc(calculate_num_bytes(Parse_objects.size())); // clear it - memset(visited_bitstring, 0, Parse_objects.size() * sizeof(bool) ); + memset(visited_bitstring, 0, calculate_num_bytes(Parse_objects.size())); // start evaluating the tree dock_evaluate_tree(objp, infop, function, visited_bitstring); @@ -128,14 +129,14 @@ void dock_evaluate_all_docked_objects(p_object *objp, p_dock_function_info *info } } -void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), bool *visited_bitstring) +void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), ubyte *visited_bitstring) { // make sure we haven't visited this object already - if ( visited_bitstring[ POBJ_INDEX(objp)] ) + if (get_bit(visited_bitstring, POBJ_INDEX(objp))) return; // mark as visited - visited_bitstring[ POBJ_INDEX(objp) ] = true; + set_bit(visited_bitstring, POBJ_INDEX(objp)); // call the function for this object, and return if instructed function(objp, infop); diff --git a/code/osapi/outwnd_unix.cpp b/code/osapi/outwnd_unix.cpp index 3e9d125b97..c1330189c5 100644 --- a/code/osapi/outwnd_unix.cpp +++ b/code/osapi/outwnd_unix.cpp @@ -156,14 +156,14 @@ void save_filter_info(void) void outwnd_printf2(char *format, ...) { - char tmp[MAX_LINE_WIDTH*4]; + char tmp[MAX_LINE_WIDTH*4] = {'\0'}; va_list args; if (format == NULL) return; va_start(args, format); - vsprintf(tmp, format, args); + vsnprintf(tmp, sizeof(tmp)-1,format, args); va_end(args); outwnd_print("General", tmp); @@ -171,14 +171,14 @@ void outwnd_printf2(char *format, ...) void outwnd_printf(char *id, char *format, ...) { - char tmp[MAX_LINE_WIDTH*4]; + char tmp[MAX_LINE_WIDTH*4] = {'\0'}; va_list args; if ( (id == NULL) || (format == NULL) ) return; va_start(args, format); - vsprintf(tmp, format, args); + vsnprintf(tmp, sizeof(tmp)-1,format, args); va_end(args); outwnd_print(id, tmp); @@ -297,7 +297,7 @@ void safe_point_print(char *format, ...) va_list args; va_start(args, format); - vsprintf(tmp, format, args); + vsnprintf(tmp, sizeof(tmp)-1,format, args); va_end(args); strcpy(safe_string, tmp); } diff --git a/code/parse/lua.cpp b/code/parse/lua.cpp index 233bfd5b3d..53aae8f790 100644 --- a/code/parse/lua.cpp +++ b/code/parse/lua.cpp @@ -43,6 +43,7 @@ #include "sound/audiostr.h" #include "sound/ds.h" #include "weapon/weapon.h" +#include "weapon/beam.h" //*************************Lua globals************************* SCP_vector Ade_table_entries; @@ -3725,6 +3726,18 @@ ADE_FUNC(isValid, l_Weaponclass, NULL, "Detects whether handle is valid", "boole return ADE_RETURN_TRUE; } +ADE_FUNC(getWeaponClassIndex, l_Weaponclass, NULL, "Gets the index valus of the weapon class", "number", "index value of the weapon class") +{ + int idx; + if(!ade_get_args(L, "o", l_Weaponclass.Get(&idx))) + return ade_set_args(L, "i", -1); + + if(idx < 0 || idx >= Num_weapon_types) + return ade_set_args(L, "i", -1); + + return ade_set_args(L, "i", idx); +} + //**********HANDLE: Eyepoint struct eye_h { @@ -4092,20 +4105,27 @@ ADE_FUNC(checkRayCollision, l_Object, "vector Start Point, vector End Point, [bo return ADE_RETURN_NIL; obj = objh->objp; + int flags = 0; + int submodel = -1; switch(obj->type) { case OBJ_SHIP: model_num = Ship_info[Ships[obj->instance].ship_info_index].model_num; + flags = (MC_CHECK_MODEL | MC_CHECK_RAY); break; case OBJ_WEAPON: model_num = Weapon_info[Weapons[obj->instance].weapon_info_index].model_num; + flags = (MC_CHECK_MODEL | MC_CHECK_RAY); break; case OBJ_DEBRIS: model_num = Debris[obj->instance].model_num; + flags = (MC_CHECK_MODEL | MC_CHECK_RAY | MC_SUBMODEL); + submodel = Debris[obj->instance].submodel_num; break; case OBJ_ASTEROID: temp = Asteroids[obj->instance].asteroid_subtype; model_num = Asteroid_info[Asteroids[obj->instance].asteroid_type].model_num[temp]; + flags = (MC_CHECK_MODEL | MC_CHECK_RAY); break; default: return ADE_RETURN_NIL; @@ -4117,11 +4137,12 @@ ADE_FUNC(checkRayCollision, l_Object, "vector Start Point, vector End Point, [bo mc_info hull_check; hull_check.model_num = model_num; + hull_check.submodel_num = submodel; hull_check.orient = &obj->orient; hull_check.pos = &obj->pos; hull_check.p0 = v3a; hull_check.p1 = v3b; - hull_check.flags = MC_CHECK_MODEL | MC_CHECK_RAY; + hull_check.flags = flags; if ( !model_collide(&hull_check) ) { return ADE_RETURN_NIL; @@ -4734,6 +4755,18 @@ ADE_FUNC(isModelLoaded, l_Shipclass, "[boolean Load = false]", "Checks if the mo return ADE_RETURN_FALSE; } +ADE_FUNC(getShipClassIndex, l_Shipclass, NULL, "Gets the index valus of the ship class", "number", "index value of the ship class") +{ + int idx; + if(!ade_get_args(L, "o", l_Shipclass.Get(&idx))) + return ade_set_args(L, "i", -1); + + if(idx < 0 || idx >= Num_ship_classes) + return ade_set_args(L, "i", -1); + + return ade_set_args(L, "i", idx); +} + //**********HANDLE: Waypoint ade_obj l_Waypoint("waypoint", "waypoint handle", &l_Object); @@ -6222,6 +6255,7 @@ ADE_FUNC(hasShipExploded, l_Ship, NULL, "Checks if the ship explosion event has if (shipp->pre_death_explosion_happened == 1) { return ade_set_args(L, "i", 1); } + return ade_set_args(L, "i", 3); } return ade_set_args(L, "i", 0); @@ -6935,6 +6969,312 @@ ADE_VIRTVAR(Team, l_Weapon, "team", "Weapon's team", "team", "Weapon team, or in return ade_set_args(L, "o", l_Team.Set(wp->team)); } +ADE_FUNC(isArmed, l_Weapon, "[boolean Hit target]", "Checks if the weapon is armed.", "boolean", "boolean value of the weapon arming status") +{ + object_h *oh = NULL; + bool hit_target = false; + if(!ade_get_args(L, "o|b", l_Weapon.GetPtr(&oh), &hit_target)) + return ADE_RETURN_FALSE; + + if(!oh->IsValid()) + return ADE_RETURN_FALSE; + + weapon *wp = &Weapons[oh->objp->instance]; + + if(weapon_armed(wp, hit_target)) + return ADE_RETURN_TRUE; + + return ADE_RETURN_FALSE; +} + +//**********HANDLE: Beam +ade_obj l_Beam("beam", "Beam handle", &l_Object); + +ADE_VIRTVAR(Class, l_Beam, "weaponclass", "Weapon's class", "weaponclass", "Weapon class, or invalid weaponclass handle if beam handle is invalid") +{ + object_h *oh=NULL; + int nc=-1; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&oh), l_Weaponclass.Get(&nc))) + return ade_set_error(L, "o", l_Weaponclass.Set(-1)); + + if(!oh->IsValid()) + return ade_set_error(L, "o", l_Weaponclass.Set(-1)); + + beam *bp = &Beams[oh->objp->instance]; + + if(ADE_SETTING_VAR && nc > -1) { + bp->weapon_info_index = nc; + } + + return ade_set_args(L, "o", l_Weaponclass.Set(bp->weapon_info_index)); +} + +ADE_VIRTVAR(LastShot, l_Beam, "vector", "End point of the beam", "vector", "vector or null vector if beam handle is not valid") +{ + object_h *oh=NULL; + vec3d *vec3; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&oh), l_Vector.GetPtr(&vec3))) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + if(!oh->IsValid()) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + beam *bp = &Beams[oh->objp->instance]; + + if(ADE_SETTING_VAR) { + bp->last_shot = *vec3; + } + + return ade_set_args(L, "o", l_Vector.Set(bp->last_shot)); +} + +ADE_VIRTVAR(LastStart, l_Beam, "vector", "Start point of the beam", "vector", "vector or null vector if beam handle is not valid") +{ + object_h *oh=NULL; + vec3d *v3; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&oh), l_Vector.GetPtr(&v3))) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + if(!oh->IsValid()) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + beam *bp = &Beams[oh->objp->instance]; + + if(ADE_SETTING_VAR) { + bp->last_start = *v3; + } + + return ade_set_args(L, "o", l_Vector.Set(bp->last_start)); +} + +ADE_VIRTVAR(Target, l_Beam, "object", "Target of beam. Value may also be a deriviative of the 'object' class, such as 'ship'.", "object", "Beam target, or invalid object handle if beam handle is invalid") +{ + object_h *objh; + object_h *newh; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&objh), l_Object.GetPtr(&newh))) + return ade_set_error(L, "o", l_Object.Set(object_h())); + + if(!objh->IsValid()) + return ade_set_error(L, "o", l_Object.Set(object_h())); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Object.Set(object_h())); + + if(ADE_SETTING_VAR) + { + if(newh != NULL && newh->IsValid()) + { + if(bp->target_sig != newh->sig) + { + bp->target = newh->objp; + bp->target_sig = newh->sig; + } + } + else + { + bp->target = NULL; + bp->target_sig = 0; + } + } + + return ade_set_object_with_breed(L, OBJ_INDEX(bp->target)); +} + +ADE_VIRTVAR(TargetSubsystem, l_Beam, "subsystem", "Subsystem that beam is targeting.", "subsystem", "Target subsystem, or invalid subsystem handle if beam handle is invalid") +{ + object_h *objh; + ship_subsys_h *newh; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&objh), l_Subsystem.GetPtr(&newh))) + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + if(!objh->IsValid()) + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + if(ADE_SETTING_VAR) + { + if(newh != NULL && newh->IsValid()) + { + if(bp->target_sig != newh->sig) + { + bp->target = newh->objp; + bp->target_subsys = newh->ss; + bp->target_sig = newh->sig; + } + } + else + { + bp->target = NULL; + bp->target_subsys = NULL; + } + } + + return ade_set_args(L, "o", l_Subsystem.Set(ship_subsys_h(bp->target, bp->target_subsys))); +} + +ADE_VIRTVAR(ParentShip, l_Beam, "object", "Parent of the beam.", "object", "Beam parent, or invalid object handle if beam handle is invalid") +{ + object_h *objh; + object_h *newh; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&objh), l_Object.GetPtr(&newh))) + return ade_set_error(L, "o", l_Object.Set(object_h())); + + if(!objh->IsValid()) + return ade_set_error(L, "o", l_Object.Set(object_h())); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Object.Set(object_h())); + + if(ADE_SETTING_VAR) + { + if(newh != NULL && newh->IsValid()) + { + if(bp->sig != newh->sig) + { + bp->objp = newh->objp; + bp->sig = newh->sig; + } + } + else + { + bp->objp = NULL; + bp->sig = 0; + } + } + + return ade_set_object_with_breed(L, OBJ_INDEX(bp->objp)); +} + +ADE_VIRTVAR(ParentSubsystem, l_Beam, "subsystem", "Subsystem that beam is fired from.", "subsystem", "Parent subsystem, or invalid subsystem handle if beam handle is invalid") +{ + object_h *objh; + ship_subsys_h *newh; + if(!ade_get_args(L, "o|o", l_Beam.GetPtr(&objh), l_Subsystem.GetPtr(&newh))) + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + if(!objh->IsValid()) + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Subsystem.Set(ship_subsys_h())); + + if(ADE_SETTING_VAR) + { + if(newh != NULL && newh->IsValid()) + { + if(bp->sig != newh->sig) + { + bp->objp = newh->objp; + bp->subsys = newh->ss; + } + } + else + { + bp->objp = NULL; + bp->subsys = NULL; + } + } + + return ade_set_args(L, "o", l_Subsystem.Set(ship_subsys_h(bp->objp, bp->subsys))); +} + +ADE_FUNC(getCollisionCount, l_Beam, NULL, "Get the number of collisions in frame.", "number", "Number of beam collisions") +{ + object_h *objh; + if(!ade_get_args(L, "o", l_Beam.GetPtr(&objh))) + return ADE_RETURN_NIL; + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ADE_RETURN_NIL; + + return ade_set_args(L, "i", bp->f_collision_count); +} + +ADE_FUNC(getCollisionPosition, l_Beam, "number", "Get the position of the defined collision.", "vector", "World vector") +{ + object_h *objh; + int idx; + if(!ade_get_args(L, "oi", l_Beam.GetPtr(&objh), &idx)) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + // convert from Lua to C + idx--; + if ((idx >= 10) || (idx < 0)) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + // so we have valid beam and valid indexer + return ade_set_args(L, "o", l_Vector.Set(bp->f_collisions[idx].cinfo.hit_point_world)); +} + +ADE_FUNC(getCollisionObject, l_Beam, "number", "Get the target of the defined collision.", "object", "Object the beam collided with") +{ + object_h *objh; + int idx; + if(!ade_get_args(L, "oi", l_Beam.GetPtr(&objh), &idx)) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + // convert from Lua to C + idx--; + if ((idx >= 10) || (idx < 0)) + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ade_set_error(L, "o", l_Vector.Set(vmd_zero_vector)); + + // so we have valid beam and valid indexer + return ade_set_object_with_breed(L, bp->f_collisions[idx].c_objnum); +} + +ADE_FUNC(isExitCollision, l_Beam, "number", "Checks if the defined collision was exit collision.", "boolean", "True if the collision was exit collision, false if entry, nil otherwise") +{ + object_h *objh; + int idx; + if(!ade_get_args(L, "oi", l_Beam.GetPtr(&objh), &idx)) + return ADE_RETURN_NIL; + + // convert from Lua to C + idx--; + if ((idx >= 10) || (idx < 0)) + return ADE_RETURN_NIL; + + beam *bp = NULL; + if(objh->objp->instance > -1) + bp = &Beams[objh->objp->instance]; + else + return ADE_RETURN_NIL; + + // so we have valid beam and valid indexer + if (bp->f_collisions[idx].is_exit_collision) + return ADE_RETURN_TRUE; + + return ADE_RETURN_FALSE; +} //**********HANDLE: Wing ade_obj l_Wing("wing", "Wing handle"); @@ -10252,6 +10592,37 @@ ADE_FUNC(__len, l_Mission_Weapons, NULL, "Number of weapon objects in mission. N return ade_set_args(L, "i", Num_weapons); } +//****SUBLIBRARY: Mission/Beams +ade_lib l_Mission_Beams("Beams", &l_Mission, NULL, NULL); + +ADE_INDEXER(l_Mission_Beams, "number Index", "Gets handle to a beam object in the mission.", "beam", "Beam handle, or invalid beam handle if index is invalid") +{ + int idx; + if(!ade_get_args(L, "*i", &idx)) + return ade_set_error(L, "o", l_Beam.Set(object_h())); + + //Remember, Lua indices start at 0. + int count=1; + + for(int i = 0; i < MAX_BEAMS; i++) + { + if (Beams[i].weapon_info_index < 0 || Beams[i].objnum < 0 || Objects[Beams[i].objnum].type != OBJ_BEAM) + continue; + + if(count == idx) { + return ade_set_args(L, "o", l_Beam.Set(object_h(&Objects[Beams[i].objnum]))); + } + + count++; + } + + return ade_set_error(L, "o", l_Beam.Set(object_h())); +} +ADE_FUNC(__len, l_Mission_Beams, NULL, "Number of beam objects in mission. Note that this is only accurate for one frame.", "number", "Number of beam objects in mission") +{ + return ade_set_args(L, "i", Beam_count); +} + //****SUBLIBRARY: Mission/Wings ade_lib l_Mission_Wings("Wings", &l_Mission, NULL, NULL); diff --git a/code/parse/scripting.cpp b/code/parse/scripting.cpp index 158d24abed..e927ce3225 100644 --- a/code/parse/scripting.cpp +++ b/code/parse/scripting.cpp @@ -65,6 +65,7 @@ flag_def_list Script_actions[] = {"On Warp Out", CHA_WARPOUT, 0}, {"On Death", CHA_DEATH, 0}, {"On Mission End", CHA_MISSIONEND, 0}, + {"On Weapon Delete", CHA_ONWEAPONDELETE, 0}, }; int Num_script_actions = sizeof(Script_actions)/sizeof(flag_def_list); diff --git a/code/parse/scripting.h b/code/parse/scripting.h index 350111ac8f..e53e828dc7 100644 --- a/code/parse/scripting.h +++ b/code/parse/scripting.h @@ -60,6 +60,7 @@ struct image_desc #define CHA_KEYRELEASED 18 #define CHA_ONSTATESTART 19 #define CHA_ONSTATEEND 20 +#define CHA_ONWEAPONDELETE 21 struct script_condition diff --git a/code/parse/sexp.cpp b/code/parse/sexp.cpp index fd7650694c..8f61e087a9 100644 --- a/code/parse/sexp.cpp +++ b/code/parse/sexp.cpp @@ -61,6 +61,7 @@ #include "weapon/shockwave.h" #include "weapon/emp.h" #include "sound/audiostr.h" +#include "sound/ds.h" #include "cmdline/cmdline.h" #include "hud/hudparse.h" #include "starfield/starfield.h" @@ -83,6 +84,7 @@ #include "object/waypoint.h" #include "graphics/2d.h" #include "object/objectsnd.h" +#include "graphics/font.h" #ifndef NDEBUG #include "hud/hudmessage.h" @@ -119,8 +121,11 @@ sexp_oper Operators[] = { { "or", OP_OR, 2, INT_MAX, }, { "not", OP_NOT, 1, 1, }, { "=", OP_EQUALS, 2, INT_MAX, }, + { "!=", OP_NOT_EQUAL, 2, INT_MAX, }, // Goober5000 { ">", OP_GREATER_THAN, 2, INT_MAX, }, + { ">=", OP_GREATER_OR_EQUAL, 2, INT_MAX, }, // Goober5000 { "<", OP_LESS_THAN, 2, INT_MAX, }, + { "<=", OP_LESS_OR_EQUAL, 2, INT_MAX, }, // Goober5000 { "string-equals", OP_STRING_EQUALS, 2, INT_MAX, }, { "string-greater-than", OP_STRING_GREATER_THAN, 2, INT_MAX, }, { "string-less-than", OP_STRING_LESS_THAN, 2, INT_MAX, }, @@ -243,6 +248,7 @@ sexp_oper Operators[] = { { "time-wing-arrived", OP_TIME_WING_ARRIVED, 1, 1, }, { "time-wing-departed", OP_TIME_WING_DEPARTED, 1, 1, }, { "mission-time", OP_MISSION_TIME, 0, 0, }, + { "mission-time-msecs", OP_MISSION_TIME_MSECS, 0, 0, }, // Goober5000 { "time-docked", OP_TIME_DOCKED, 3, 3, }, { "time-undocked", OP_TIME_UNDOCKED, 3, 3, }, @@ -258,7 +264,9 @@ sexp_oper Operators[] = { { "number-of", OP_NUMBER_OF, 2, INT_MAX, }, // Goober5000 { "in-sequence", OP_IN_SEQUENCE, 1, INT_MAX, }, // Karajorma { "invalidate-argument", OP_INVALIDATE_ARGUMENT, 1, INT_MAX, }, // Goober5000 + { "invalidate-all-arguments", OP_INVALIDATE_ALL_ARGUMENTS, 0, 0, }, // Karajorma { "validate-argument", OP_VALIDATE_ARGUMENT, 1, INT_MAX, }, // Karajorma + { "validate-all-arguments", OP_VALIDATE_ALL_ARGUMENTS, 0, 0, }, // Karajorma { "do-for-valid-arguments", OP_DO_FOR_VALID_ARGUMENTS, 1, INT_MAX, }, // Karajorma { "send-message-list", OP_SEND_MESSAGE_LIST, 4, INT_MAX }, @@ -289,7 +297,6 @@ sexp_oper Operators[] = { { "beam-protect-ship", OP_BEAM_PROTECT_SHIP, 1, INT_MAX, }, { "beam-unprotect-ship", OP_BEAM_UNPROTECT_SHIP, 1, INT_MAX, }, { "kamikaze", OP_KAMIKAZE, 2, INT_MAX }, //-Sesquipedalian - { "not-kamikaze", OP_NOT_KAMIKAZE, 1, INT_MAX }, //-Sesquipedalian { "player-use-ai", OP_PLAYER_USE_AI, 0, 0 }, // Goober5000 { "player-not-use-ai", OP_PLAYER_NOT_USE_AI, 0, 0 }, // Goober5000 { "allow-treason", OP_ALLOW_TREASON, 1, 1 }, // Karajorma @@ -345,6 +352,7 @@ sexp_oper Operators[] = { { "ship-subsys-untargetable", OP_SHIP_SUBSYS_UNTARGETABLE, 2, INT_MAX }, // Goober5000 { "ship-vaporize", OP_SHIP_VAPORIZE, 1, INT_MAX }, // Goober5000 { "ship-no-vaporize", OP_SHIP_NO_VAPORIZE, 1, INT_MAX }, // Goober5000 + { "set-explosion-option", OP_SET_EXPLOSION_OPTION, 3, INT_MAX }, // Goober5000 { "break-warp", OP_WARP_BROKEN, 1, INT_MAX, }, { "fix-warp", OP_WARP_NOT_BROKEN, 1, INT_MAX, }, { "never-warp", OP_WARP_NEVER, 1, INT_MAX, }, @@ -375,7 +383,7 @@ sexp_oper Operators[] = { { "red-alert", OP_RED_ALERT, 0, 0 }, - { "end-mission", OP_END_MISSION, 0, 0 }, //-Sesquipedalian + { "end-mission", OP_END_MISSION, 0, 1 }, //-Sesquipedalian { "force-jump", OP_FORCE_JUMP, 0, 0 }, // Goober5000 { "next-mission", OP_NEXT_MISSION, 1, 1 }, { "end-campaign", OP_END_CAMPAIGN, 0, 0 }, @@ -424,8 +432,10 @@ sexp_oper Operators[] = { { "change-soundtrack", OP_CHANGE_SOUNDTRACK, 1, 1 }, // Goober5000 { "play-sound-from-table", OP_PLAY_SOUND_FROM_TABLE, 4, 4 }, // Goober5000 - { "play-sound-from-file", OP_PLAY_SOUND_FROM_FILE, 1, 2 }, // Goober5000 + { "play-sound-from-file", OP_PLAY_SOUND_FROM_FILE, 1, 3 }, // Goober5000 { "close-sound-from-file", OP_CLOSE_SOUND_FROM_FILE, 1, 1 }, // Goober5000 + { "set-sound-environment", OP_SET_SOUND_ENVIRONMENT, 1, INT_MAX }, // Taylor + { "update-sound-environment", OP_UPDATE_SOUND_ENVIRONMENT, 2, INT_MAX }, // Taylor { "modify-variable", OP_MODIFY_VARIABLE, 2, 2, }, { "variable-array-get", OP_GET_VARIABLE_BY_INDEX, 1, 1, }, @@ -458,6 +468,7 @@ sexp_oper Operators[] = { //background and nebula sexps { "mission-set-nebula", OP_MISSION_SET_NEBULA, 1, 1 }, //-Sesquipedalian + { "mission-set-subspace", OP_MISSION_SET_SUBSPACE, 1, 1 }, { "add-background-bitmap", OP_ADD_BACKGROUND_BITMAP, 9, 9 }, // phreak { "remove-background-bitmap", OP_REMOVE_BACKGROUND_BITMAP, 1, 1 }, // phreak { "add-sun-bitmap", OP_ADD_SUN_BITMAP, 6, 6 }, // phreak @@ -475,6 +486,7 @@ sexp_oper Operators[] = { { "hud-set-frame", OP_HUD_SET_FRAME, 2, 2 }, //WMCoolmon { "hud-set-color", OP_HUD_SET_COLOR, 4, 4 }, //WMCoolmon { "hud-set-max-targeting-range", OP_HUD_SET_MAX_TARGETING_RANGE, 1, 1 }, // Goober5000 + { "hud-display-gauge", OP_HUD_DISPLAY_GAUGE, 2, 2 }, /* made obsolete by Goober5000 { "error", OP_INT3, 0, 0 }, @@ -546,6 +558,8 @@ sexp_oper Operators[] = { { "reset-fov", OP_CUTSCENES_RESET_FOV, 0, 0, }, { "reset-camera", OP_CUTSCENES_RESET_CAMERA, 0, 1, }, { "show-subtitle", OP_CUTSCENES_SHOW_SUBTITLE, 4, 13, }, + { "show-subtitle-text", OP_CUTSCENES_SHOW_SUBTITLE_TEXT, 6, 13, }, + { "show-subtitle-image", OP_CUTSCENES_SHOW_SUBTITLE_IMAGE, 8, 10, }, { "set-time-compression", OP_CUTSCENES_SET_TIME_COMPRESSION, 1, 3, }, { "reset-time-compression", OP_CUTSCENES_RESET_TIME_COMPRESSION, 0, 0, }, { "lock-perspective", OP_CUTSCENES_FORCE_PERSPECTIVE, 1, 2, }, @@ -660,6 +674,9 @@ int Num_sexp_nodes = 0; sexp_node *Sexp_nodes = NULL; sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]; +sexp_variable Block_variables[MAX_SEXP_VARIABLES]; // used for compatibility with retail. + +int Num_special_expl_blocks; SCP_vector Current_sexp_operator; @@ -673,6 +690,24 @@ int Players_mlocked_timestamp; int Sexp_music_handle = -1; void sexp_stop_music(int fade = 1); +// for sound environments - Goober5000/Taylor +#define SEO_VOLUME 0 +#define SEO_DECAY_TIME 1 +#define SEO_DAMPING 2 +int sexp_sound_environment_option_lookup(char *text); +char *Sound_environment_option[] = { "volume", "decay time", "damping" }; +int Num_sound_environment_options = 3; + +// for explosions - Goober5000 +#define EO_DAMAGE 0 +#define EO_BLAST 1 +#define EO_INNER_RADIUS 2 +#define EO_OUTER_RADIUS 3 +#define EO_SHOCKWAVE_SPEED 4 +int sexp_explosion_option_lookup(char *text); +char *Explosion_option[] = { "damage", "blast", "inner radius", "outer radius", "shockwave speed" }; +int Num_explosion_options = 5; + int get_sexp(char *token); void build_extended_sexp_string(int cur_node, int level, int mode, int max_len); void update_sexp_references(char *old_name, char *new_name, int format, int node); @@ -682,6 +717,7 @@ void init_sexp_vars(); int eval_num(int node); // for handling variables +void add_block_variable(const char *text, const char *var_name, int type, int index); void sexp_modify_variable(int node); int sexp_get_variable_by_index(int node); void sexp_set_variable_by_index(int node); @@ -695,6 +731,8 @@ arg_item Sexp_applicable_argument_list; bool is_blank_argument_op(int op_const); bool is_blank_of_op(int op_const); +int get_handler_for_x_of_operator(int node); + //Karajorma int get_generic_subsys(char *subsy_name); bool ship_class_unchanged(int ship_index); @@ -707,6 +745,9 @@ void multi_sexp_modify_variable(); player * get_player_from_ship_node(int node, bool test_respawns = false); ship * sexp_get_ship_from_node(int node); +// hud-display-gauge magic values +#define SEXP_HUD_GAUGE_WARPOUT "warpout" + // Goober5000 - arg_item class stuff, borrowed from sexp_list_item class stuff ------------- void arg_item::add_data(char *str) { @@ -2357,19 +2398,67 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, i //Karajorma case OPF_PERSONA: - if (type2 != SEXP_ATOM_STRING){ + if (type2 != SEXP_ATOM_STRING) { return SEXP_CHECK_TYPE_MISMATCH; } for (i=0; i < Num_personas ; i++) { - if (!strcmp(CTEXT(node), Personas[i].name)) + if (!strcmp(CTEXT(node), Personas[i].name)) { break; + } } - if (i == Num_personas) + if (i == Num_personas) { return SEXP_CHECK_INVALID_PERSONA_NAME; + } + break; + + case OPF_FONT: + if (type2 != SEXP_ATOM_STRING) { + return SEXP_CHECK_TYPE_MISMATCH; + } + + for (i = 0; i < Num_fonts; i++) { + if (!stricmp(CTEXT(node), Fonts[i].filename)) { + break; + } + } + + if (i == Num_fonts) { + return SEXP_CHECK_INVALID_FONT; + } break; + case OPF_SOUND_ENVIRONMENT: + if (type2 != SEXP_ATOM_STRING) { + return SEXP_CHECK_TYPE_MISMATCH; + } + + if (stricmp(CTEXT(node), SEXP_NONE_STRING) && ds_eax_get_preset_id(CTEXT(node)) < 0) { + return SEXP_CHECK_INVALID_SOUND_ENVIRONMENT; + } + break; + + case OPF_SOUND_ENVIRONMENT_OPTION: + if (type2 != SEXP_ATOM_STRING) { + return SEXP_CHECK_TYPE_MISMATCH; + } + + if (sexp_sound_environment_option_lookup(CTEXT(node)) < 0) { + return SEXP_CHECK_INVALID_SOUND_ENVIRONMENT_OPTION; + } + break; + + case OPF_EXPLOSION_OPTION: + if (type2 != SEXP_ATOM_STRING) { + return SEXP_CHECK_TYPE_MISMATCH; + } + + if (sexp_explosion_option_lookup(CTEXT(node)) < 0) { + return SEXP_CHECK_INVALID_EXPLOSION_OPTION; + } + break; + case OPF_KEYPRESS: if (type2 != SEXP_ATOM_STRING) return SEXP_CHECK_TYPE_MISMATCH; @@ -2553,24 +2642,26 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, i break; case OPF_BACKGROUND_BITMAP: - break; - case OPF_SUN_BITMAP: - break; - case OPF_NEBULA_STORM_TYPE: - break; - case OPF_NEBULA_POOF: - break; - case OPF_POST_EFFECT: - if (type2 != SEXP_ATOM_STRING) - { + if (type2 != SEXP_ATOM_STRING) { return SEXP_CHECK_TYPE_MISMATCH; } break; + case OPF_HUD_ELEMENT: + if (type2 != SEXP_ATOM_STRING) { + return SEXP_CHECK_TYPE_MISMATCH; + } else { + char *gauge = CTEXT(node); + if ( strcmp(SEXP_HUD_GAUGE_WARPOUT, gauge) == 0 ) { + break; + } + } + return SEXP_CHECK_INVALID_HUD_ELEMENT; + default: Error(LOCATION, "Unhandled argument format"); //Int3(); // currently unhandled argument format (so add it now) @@ -2860,6 +2951,10 @@ int get_sexp(char *token) Nebula_sexp_used = true; Dynamic_environment = true; break; + + case OP_MISSION_SET_SUBSPACE: + Dynamic_environment = true; + break; case OP_WARP_EFFECT: // type of warp is argument #11 @@ -2958,7 +3053,7 @@ int stuff_sexp_variable_list() // Goober5000 - This looks dangerous... these flags are needed for certain things, but it // looks like BLOCK_*_SIZE is the only thing that keeps a block from running off the end // of its boundary. - type = SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_BLOCK_EXP | SEXP_VARIABLE_BLOCK_HIT; + type = SEXP_VARIABLE_BLOCK; } else { type = SEXP_VARIABLE_UNKNOWN; Error(LOCATION, "SEXP variable '%s' is an unknown type!", var_name); @@ -3000,14 +3095,18 @@ int stuff_sexp_variable_list() Error(LOCATION, "Error parsing sexp variables - unknown persistence type encountered. You can continue from here without trouble."); } - count++; - // check if variable name already exists if ( (type & SEXP_VARIABLE_NUMBER) || (type & SEXP_VARIABLE_STRING) ) { Assert(get_index_sexp_variable_name(var_name) == -1); } - sexp_add_variable(default_value, var_name, type, index); + if ( type & SEXP_VARIABLE_BLOCK ) { + add_block_variable(default_value, var_name, type, index); + } + else { + count++; + sexp_add_variable(default_value, var_name, type, index); + } } Mp++; @@ -3015,6 +3114,85 @@ int stuff_sexp_variable_list() return count; } +bool has_special_explosion_block_index(ship *shipp, int *index) +{ + int current_index; + + for ( current_index = (MAX_SEXP_VARIABLES - BLOCK_EXP_SIZE) ; current_index >= (MAX_SEXP_VARIABLES - (BLOCK_EXP_SIZE * Num_special_expl_blocks)) ; current_index = (current_index - BLOCK_EXP_SIZE) ) { + if ( + (atoi(Block_variables[current_index+INNER_RAD].text) == shipp->special_exp_inner) && + (atoi(Block_variables[current_index+OUTER_RAD].text) == shipp->special_exp_outer) && + (atoi(Block_variables[current_index+DAMAGE].text) == shipp->special_exp_damage) && + (atoi(Block_variables[current_index+BLAST].text) == shipp->special_exp_blast) && + (atoi(Block_variables[current_index+PROPAGATE].text) == (shipp->use_shockwave ? 1:0) ) && + (atoi(Block_variables[current_index+SHOCK_SPEED].text) == shipp->special_exp_shockwave_speed) + ) { + *index = current_index; + return true; + } + } + + // if we got here, this ship's special explosions aren't represented in the Block_variables array + *index = current_index; + return false; +} + +bool generate_special_explosion_block_variables() +{ + ship *shipp; + ship_obj *sop; + int current_index; + bool already_added = false; + int num_sexp_variables; + int i; + + // since we're (re)generating the block variable index, we don't start off with any block variables + Num_special_expl_blocks = 0; + + // get the number of sexp_variables we currently have. We must not try to add a block variable with an index below this. + num_sexp_variables = sexp_variable_count(); + + for ( sop = GET_FIRST(&Ship_obj_list); sop != END_OF_LIST(&Ship_obj_list); sop = GET_NEXT(sop) ) { + shipp=&Ships[Objects[sop->objnum].instance]; + + if (!(shipp->use_special_explosion)) { + continue; + } + + already_added = has_special_explosion_block_index(shipp, ¤t_index); + + // if we can't add an index for this add this ship to the list of those which failed + if (current_index < num_sexp_variables) { + // fail list code goes here + continue; + } + + //if we haven't added this entry already, do so + if (!already_added) { + sprintf(Block_variables[current_index+INNER_RAD].text, "%d", shipp->special_exp_inner); + sprintf(Block_variables[current_index+OUTER_RAD].text, "%d", shipp->special_exp_outer); + sprintf(Block_variables[current_index+DAMAGE].text, "%d", shipp->special_exp_damage); + sprintf(Block_variables[current_index+BLAST].text, "%d", shipp->special_exp_blast); + sprintf(Block_variables[current_index+PROPAGATE].text, "%d", (shipp->use_shockwave ? 1:0) ); + sprintf(Block_variables[current_index+SHOCK_SPEED].text, "%d", shipp->special_exp_shockwave_speed); + + // add the names + for (i = current_index; i < (current_index + BLOCK_EXP_SIZE); i++ ) { + sprintf(Block_variables[i].variable_name, "%s", shipp->ship_name); + } + + Num_special_expl_blocks++; + } + } + + return true; +} + +int num_block_variables() +{ + return Num_special_expl_blocks * BLOCK_EXP_SIZE; +} + // void build_sexp_text_string(char *buffer, int node, int mode) { @@ -3741,13 +3919,29 @@ int sexp_number_compare(int n, int op) if (first_number != current_number) return SEXP_FALSE; break; + case OP_NOT_EQUAL: + if (first_number == current_number) return SEXP_FALSE; + break; + case OP_GREATER_THAN: if (first_number <= current_number) return SEXP_FALSE; break; + case OP_GREATER_OR_EQUAL: + if (first_number < current_number) return SEXP_FALSE; + break; + case OP_LESS_THAN: if (first_number >= current_number) return SEXP_FALSE; break; + + case OP_LESS_OR_EQUAL: + if (first_number > current_number) return SEXP_FALSE; + break; + + default: + Warning(LOCATION, "Unhandled comparison case! Operator = ", op); + break; } } @@ -4626,6 +4820,12 @@ int sexp_mission_time() return f2i(Missiontime); } +// next function returns the time into the mission, in milliseconds +int sexp_mission_time_msecs() +{ + return f2i(Missiontime * 1000); +} + // returns percent of length of distance to special warpout plane int sexp_special_warp_dist( int n) { @@ -4821,6 +5021,7 @@ void sexp_set_energy_pct (int node, int op_num) sindex = ship_name_lookup( shipname ); if ( sindex == -1 ){ // hmm.. if true, must not have arrived yet + node = CDR(node); continue; } @@ -7509,25 +7710,38 @@ int eval_in_sequence(int arg_handler_node, int condition_node) return val; } +void sexp_change_all_argument_validity(int n, bool invalidate) +{ + int arg_handler, arg_n; + + arg_handler = get_handler_for_x_of_operator(n); + + while (n != -1) + { + arg_n = CDR(arg_handler); + while (arg_n != -1) { + if (invalidate) { + Sexp_nodes[arg_n].flags &= ~SNF_ARGUMENT_VALID; + } + else { + Sexp_nodes[arg_n].flags |= SNF_ARGUMENT_VALID; + } + // iterate + arg_n = CDR(arg_n); + } + + // iterate + n = CDR(n); + } +} + // Goober5000 void sexp_change_argument_validity(int n, bool invalidate) { - int conditional, arg_handler, arg_n; + int arg_handler, arg_n; bool toggled; - conditional = n; - do { - // find the conditional sexp - conditional = find_parent_operator(conditional); - if (conditional == -1) - return; - } - while (!is_blank_argument_op(get_operator_const(CTEXT(conditional)))); - - // get the first op of the parent, which should be a *_of operator - arg_handler = CADR(conditional); - if (!is_blank_of_op(get_operator_const(CTEXT(arg_handler)))) - return; + arg_handler = get_handler_for_x_of_operator(n); // loop through arguments while (n != -1) @@ -7589,6 +7803,34 @@ void sexp_change_argument_validity(int n, bool invalidate) } } +int get_handler_for_x_of_operator(int n) +{ + int conditional, arg_handler; + + if (n < 0) { + return -1; + } + + conditional = n; + do { + // find the conditional sexp + conditional = find_parent_operator(conditional); + if (conditional == -1) { + return -1; + } + } + while (!is_blank_argument_op(get_operator_const(CTEXT(conditional)))); + + // get the first op of the parent, which should be a *_of operator + arg_handler = CADR(conditional); + if (!is_blank_of_op(get_operator_const(CTEXT(arg_handler)))) { + return -1; + } + + return arg_handler; + +} + // Goober5000 bool is_blank_argument_op(int op_const) { @@ -7684,7 +7926,7 @@ void sexp_ingame_ship_change_iff(ship *shipp, int new_team) shipp->team = new_team; // send a network packet if we need to - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (shipp->objnum >= 0)) + if( MULTIPLAYER_MASTER && (Net_player != NULL) && (shipp->objnum >= 0)) send_change_iff_packet(Objects[shipp->objnum].net_signature, new_team); } @@ -7754,7 +7996,7 @@ void sexp_ingame_ship_change_iff_color(ship *shipp, int observer_team, int obser shipp->ship_iff_color[observer_team][observed_team] = alternate_iff_color; // Like the rest of the change_iff_color functions copied with minor alterations from earlier change_iff functions. - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (shipp->objnum >= 0)) + if( MULTIPLAYER_MASTER && (Net_player != NULL) && (shipp->objnum >= 0)) send_change_iff_color_packet(Objects[shipp->objnum].net_signature, observer_team, observed_team, alternate_iff_color); } @@ -8010,7 +8252,7 @@ void sexp_change_ai_class(int n) ship_subsystem_set_new_ai_class(ship_num, CTEXT(n), new_ai_class); // send a network packet if we need to - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (Ships[ship_num].objnum >= 0)) + if( MULTIPLAYER_MASTER && (Net_player != NULL) && (Ships[ship_num].objnum >= 0)) { send_change_ai_class_packet(Objects[Ships[ship_num].objnum].net_signature, CTEXT(n), new_ai_class); } @@ -8022,7 +8264,7 @@ void sexp_change_ai_class(int n) ship_set_new_ai_class(ship_num, new_ai_class); // send a network packet if we need to - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && (Net_player->flags & NETINFO_FLAG_AM_MASTER) && (Ships[ship_num].objnum >= 0)) + if( MULTIPLAYER_MASTER && (Net_player != NULL) && (Ships[ship_num].objnum >= 0)) { send_change_ai_class_packet(Objects[Ships[ship_num].objnum].net_signature, NULL, new_ai_class); } @@ -8245,6 +8487,19 @@ void sexp_hud_set_max_targeting_range(int n) Hud_max_targeting_range = 0; } +/* Make sure that the Sexp_hud_display_* get added to the game_state +transitions in freespace.cpp (game_enter_state()). */ +int Sexp_hud_display_warpout = 0; + +void sexp_hud_display_gauge(int n) { + int show_for = eval_num(n); + char* gauge = CTEXT(CDR(n)); + + if ( stricmp(SEXP_HUD_GAUGE_WARPOUT, gauge) == 0 ) { + Sexp_hud_display_warpout = (show_for > 1)? timestamp(show_for) : (show_for); + } +} + // Goober5000 // trigger whether player uses the game AI for stuff void sexp_player_use_ai(int flag) @@ -8306,7 +8561,7 @@ void sexp_music_close() } // Goober5000 -void sexp_load_music(char* fname) +void sexp_load_music(char* fname, int type = -1) { if ( Cmdline_freespace_no_music ) { return; @@ -8317,9 +8572,14 @@ void sexp_load_music(char* fname) sexp_stop_music(); } + if ( type < 0 ) + { + type = ASF_MENUMUSIC; + } + if ( fname ) { - Sexp_music_handle = audiostream_open( fname, ASF_MENUMUSIC ); + Sexp_music_handle = audiostream_open( fname, type ); } } @@ -8354,7 +8614,9 @@ void sexp_play_sound_from_table(int n) // play sound effect --------------------------- - snd_play_3d( &Snds[sound_index], &origin, &View_position, 0.0f, NULL, 0, 1.0f, SND_PRIORITY_MUST_PLAY ); + if (sound_index >= 0) { + snd_play_3d( &Snds[sound_index], &origin, &View_position, 0.0f, NULL, 0, 1.0f, SND_PRIORITY_MUST_PLAY ); + } if (MULTIPLAYER_MASTER) { multi_start_packet(); @@ -8406,8 +8668,23 @@ void multi_sexp_close_sound_from_file() // Goober5000 void sexp_play_sound_from_file(int n) { + int loop = 0; + int soundfx = 0; + int type = ASF_MENUMUSIC; + + // third option, but needed when loading music - + soundfx = CDDR(n); + + if (soundfx >= 0) { + soundfx = eval_sexp(soundfx); + + if (soundfx > 0) { + type = ASF_SOUNDFX; + } + } + // load sound file ----------------------------- - sexp_load_music(CTEXT(n)); + sexp_load_music(CTEXT(n), type); if (MULTIPLAYER_MASTER) { multi_start_packet(); @@ -8415,7 +8692,9 @@ void sexp_play_sound_from_file(int n) } n = CDR(n); - int loop = eval_sexp(n); + if (n >= 0) { + loop = eval_sexp(n); + } // play sound file ----------------------------- sexp_start_music(loop); @@ -8439,6 +8718,193 @@ void multi_sexp_play_sound_from_file() sexp_start_music(loop); } +int sexp_sound_environment_option_lookup(char *text) +{ + int i; + + Assert(text != NULL); + if (text == NULL) { + return -1; + } + + for (i = 0; i < Num_sound_environment_options; i++) { + if (!strcmp(text, Sound_environment_option[i])) { + return i; + } + } + + return -1; +} + +// Taylor +void sexp_set_sound_environment(int node) +{ + int n = node; + sound_env env; + int preset_id = -1; + + char *preset = CTEXT(n); + n = CDR(n); + + if ( preset && !stricmp(preset, SEXP_NONE_STRING) ) { + sound_env_disable(); + return; + } + + preset_id = ds_eax_get_preset_id( preset ); + if (preset_id < 0) { + return; + } + + // fill in defaults for this preset, in case we don't set everything + if ( sound_env_get(&env, preset_id) ) { + return; + } + + while (n >= 0) { + int option = sexp_sound_environment_option_lookup(CTEXT(n)); + n = CDR(n); + + // watch out for bogus options + if (n < 0) { + break; + } + + float val = (float)eval_num(n) / 1000.0f; + n = CDR(n); + + if ( option == SEO_VOLUME ) { + env.volume = val; + } else if ( option == SEO_DECAY_TIME ) { + env.decay = val; + } else if ( option == SEO_DAMPING ) { + env.damping = val; + } + } + + sound_env_set(&env); +} + +// Taylor +void sexp_update_sound_environment(int node) +{ + int n = node; + + while (n >= 0) { + int option = sexp_sound_environment_option_lookup(CTEXT(n)); + n = CDR(n); + + // watch out for bogus options + if (n < 0) { + break; + } + + float val = (float)eval_num(n) / 1000.0f; + n = CDR(n); + + if ( option == SEO_VOLUME ) { + ds_eax_set_volume(val); + } else if ( option == SEO_DECAY_TIME ) { + ds_eax_set_decay_time(val); + } else if ( option == SEO_DAMPING ) { + ds_eax_set_damping(val); + } + } +} + +int sexp_explosion_option_lookup(char *text) +{ + int i; + + Assert(text != NULL); + if (text == NULL) { + return -1; + } + + for (i = 0; i < Num_explosion_options; i++) { + if (!strcmp(text, Explosion_option[i])) { + return i; + } + } + + return -1; +} + +// Goober5000 +void sexp_set_explosion_option(int node) +{ + int n = node, ship_num; + ship *shipp; + ship_info *sip; + shockwave_create_info *sci; + + // get ship + ship_num = ship_name_lookup(CTEXT(n)); + if (ship_num < 0) + return; + + shipp = &Ships[ship_num]; + sip = &Ship_info[shipp->ship_info_index]; + sci = &sip->shockwave; + + n = CDR(n); + + // if we haven't changed anything yet, create a new special-exp with the same values as a standard exp + if (!shipp->use_special_explosion) + { + shipp->special_exp_damage = sci->damage; + shipp->special_exp_blast = sci->blast; + shipp->special_exp_inner = sci->inner_rad; + shipp->special_exp_outer = sci->outer_rad; + shipp->special_exp_shockwave_speed = sci->speed; + + shipp->use_special_explosion = true; + shipp->use_shockwave = (sci->speed > 0); + } + + // process all options + while (n >= 0) + { + int option = sexp_explosion_option_lookup(CTEXT(n)); + n = CDR(n); + + // watch out for bogus options + if (n < 0) + break; + + int val = eval_num(n); + Assert(val >= 0); // should be true due to OPF_POSITIVE + n = CDR(n); + + if (option == EO_DAMAGE) { + shipp->special_exp_damage = val; + } else if (option == EO_BLAST) { + shipp->special_exp_blast = val; + } else if (option == EO_INNER_RADIUS) { + shipp->special_exp_inner = val; + } else if (option == EO_OUTER_RADIUS) { + shipp->special_exp_outer = val; + } else if (option == EO_SHOCKWAVE_SPEED) { + shipp->special_exp_shockwave_speed = val; + shipp->use_shockwave = (val > 0); + } + } + + // if all our values are the same as a standard exp, turn off the special exp + if ((shipp->special_exp_damage == (int) sci->damage) && (shipp->special_exp_blast == (int) sci->blast) && (shipp->special_exp_inner == (int) sci->inner_rad) + && (shipp->special_exp_outer == (int) sci->outer_rad) && (shipp->special_exp_shockwave_speed == (int) sci->speed)) + { + shipp->use_special_explosion = false; + shipp->use_shockwave = false; + + shipp->special_exp_damage = -1; + shipp->special_exp_blast = -1; + shipp->special_exp_inner = -1; + shipp->special_exp_outer = -1; + shipp->special_exp_shockwave_speed = -1; + } +} + // Goober5000 void sexp_explosion_effect(int n) /* From the SEXP help... @@ -8454,7 +8920,7 @@ void sexp_explosion_effect(int n) "\t7: Inner radius to apply damage (if 0, explosion will not be visible)\r\n" "\t8: Outer radius to apply damage (if 0, explosion will not be visible)\r\n" "\t9: Shockwave speed (if 0, there will be no shockwave)\r\n" - "\t10: Type (0 = medium, 1 = large1, 2 = large2)\r\n" + "\t10: Type (0 = medium, 1 = large1, 2 = large2)\r\n" (otherwise use the index in fireball.tbl - FUBAR) "\t11: Sound (index into sounds.tbl)\r\n" "\t12: EMP intensity (optional)\r\n" "\t13: EMP duration in seconds (optional)" }, @@ -8506,11 +8972,13 @@ void sexp_explosion_effect(int n) { fireball_type = FIREBALL_EXPLOSION_LARGE2; } - else - { + else if (eval_num(n) >= Num_fireball_types) { Warning(LOCATION, "explosion-effect type is out of range; quitting the explosion...\n"); return; } + else { + fireball_type = eval_num(n); + } n = CDR(n); sound_index = eval_num(n); @@ -8532,7 +9000,10 @@ void sexp_explosion_effect(int n) // play sound effect --------------------------- - snd_play_3d( &Snds[sound_index], &origin, &View_position, 0.0f, NULL, 0, 1.0f, SND_PRIORITY_MUST_PLAY ); + if (sound_index >= 0) + { + snd_play_3d( &Snds[sound_index], &origin, &View_position, 0.0f, NULL, 0, 1.0f, SND_PRIORITY_MUST_PLAY ); + } // create the fireball ------------------------- @@ -9681,6 +10152,29 @@ void sexp_mission_set_nebula(int n) stars_set_nebula(eval_num(n) > 0); } +/* freespace.cpp does not have these availiable externally, and we must call +them so that the main simulation loop does not have to constantly check for +Game_subspace_effect so that it could turn on the subspace sounds. + +Because these are in freespace.cpp there are also stubs of these functions +in fred.cpp as it does not deal with the game loop (obviously) but still +links against code.lib. */ +extern void game_start_subspace_ambient_sound(); +extern void game_stop_subspace_ambient_sound(); + +void sexp_mission_set_subspace(int n) +{ + if (eval_num(n) > 0) { + The_mission.flags |= MISSION_FLAG_SUBSPACE; + Game_subspace_effect = 1; + game_start_subspace_ambient_sound(); + } else { + The_mission.flags &= ~MISSION_FLAG_SUBSPACE; + Game_subspace_effect = 0; + game_stop_subspace_ambient_sound(); + } +} + void sexp_add_background_bitmap(int n) { int sexp_var; @@ -9884,6 +10378,17 @@ void sexp_nebula_toggle_poof(int n) // sexpression to end the mission! Fixed by EdrickV, implemented by Sesquipedalian void sexp_end_mission(int n) { + int ignore_player_mortality = 1; + + if (n != -1) { + ignore_player_mortality = is_sexp_true(n); + } + + // if the player is dead we may want to let the death screen handle things + if (!ignore_player_mortality && (Player_ship->flags && SF_DYING)) { + return; + } + send_debrief_event(); // Karajorma - callback all the clients here. @@ -10151,10 +10656,11 @@ void sexp_allow_weapon(int n) // Goober5000 // generic function for all those sexps that set flags -void sexp_deal_with_ship_flag(int node, int object_flag, int object_flag2, int ship_flag, int ship_flag2, int p_object_flag, int p_object_flag2, int set_it, bool send_multiplayer = false, bool include_players_in_ship_lookup = false) +void sexp_deal_with_ship_flag(int node, bool process_subsequent_nodes, int object_flag, int object_flag2, int ship_flag, int ship_flag2, int p_object_flag, int p_object_flag2, bool set_it, bool send_multiplayer = false, bool include_players_in_ship_lookup = false) { char *ship_name; int ship_index; + int n = node; if (send_multiplayer && MULTIPLAYER_MASTER) { multi_start_packet(); @@ -10167,14 +10673,16 @@ void sexp_deal_with_ship_flag(int node, int object_flag, int object_flag2, int s multi_send_int(ship_flag2); multi_send_int(p_object_flag); multi_send_int(p_object_flag2); - multi_send_bool(set_it ? true : false); + multi_send_bool(set_it); } // loop for all ships in the sexp - for (; node >= 0; node = CDR(node)) + // NB: if the flag is set, we will continue acting on nodes until we run out of them; + // if not, we will only act on the first one + for (; n >= 0; process_subsequent_nodes ? n = CDR(n) : n = -1) { // get ship name - ship_name = CTEXT(node); + ship_name = CTEXT(n); // check to see if ship destroyed or departed. In either case, do nothing. if (mission_log_get_time(LOG_SHIP_DEPARTED, ship_name, NULL, NULL) || mission_log_get_time(LOG_SELF_DESTRUCTED, ship_name, NULL, NULL) || mission_log_get_time(LOG_SHIP_DESTROYED, ship_name, NULL, NULL)) @@ -10370,7 +10878,7 @@ void multi_sexp_deal_with_ship_flag() // function to deal with breaking/fixing the warp engines on ships/wings. // --repairable is true when we are breaking the warp drive (can be repaired) // --damage_it is true when we are sabotaging it, one way or the other; false when fixing it -void sexp_deal_with_warp( int n, int repairable, int damage_it ) +void sexp_deal_with_warp( int n, bool repairable, bool damage_it ) { int ship_flag, p_object_flag; @@ -10385,7 +10893,7 @@ void sexp_deal_with_warp( int n, int repairable, int damage_it ) p_object_flag = P_SF_WARP_NEVER; } - sexp_deal_with_ship_flag(n, 0, 0, ship_flag, 0, p_object_flag, 0, damage_it); + sexp_deal_with_ship_flag(n, true, 0, 0, ship_flag, 0, p_object_flag, 0, damage_it); } // function which is used to tell the AI when it is okay to fire certain secondary @@ -10421,7 +10929,7 @@ void sexp_good_secondary_time(int n) void sexp_toggle_builtin_messages (int node, bool enable_messages) { char *ship_name; - int wingnum, shipnum, ship_index ; + int wingnum, shipnum, ship_index; // If no arguments were supplied then turn off all messages then bail if (node < 0) @@ -10439,14 +10947,12 @@ void sexp_toggle_builtin_messages (int node, bool enable_messages) } // iterate through all the nodes supplied - while (node != -1) - { - - // check that this isn't a request to silence command. + while (node >= 0) + { ship_name = CTEXT(node); - // if (ship_name[0] == '#' ) - if (!stricmp(ship_name, "#Command")) + // check that this isn't a request to silence command. + if ((*ship_name == '#') && !stricmp(&ship_name[1], The_mission.command_sender)) { // Either disable or enable messages from command if (enable_messages) @@ -10479,14 +10985,7 @@ void sexp_toggle_builtin_messages (int node, bool enable_messages) // If it isn't command then assume that we're dealing with a ship else { - if (enable_messages) - { - sexp_deal_with_ship_flag(node, 0, 0, 0, SF2_NO_BUILTIN_MESSAGES, 0, P2_SF2_NO_BUILTIN_MESSAGES, 0); - } - else - { - sexp_deal_with_ship_flag(node, 0, 0, 0, SF2_NO_BUILTIN_MESSAGES, 0, P2_SF2_NO_BUILTIN_MESSAGES, 1); - } + sexp_deal_with_ship_flag(node, false, 0, 0, 0, SF2_NO_BUILTIN_MESSAGES, 0, P2_SF2_NO_BUILTIN_MESSAGES, !enable_messages); } node = CDR(node); @@ -10942,37 +11441,37 @@ int sexp_goal_incomplete(int n) return SEXP_TRUE; } -// protects/unprotects a ship. The flag tells us whether or not the protect bit should be set (flag==1) -// or cleared (flag==0) -void sexp_protect_ships(int n, int flag) +// protects/unprotects a ship. The flag tells us whether or not the protect bit should be set (flag==true) +// or cleared (flag==false) +void sexp_protect_ships(int n, bool flag) { - sexp_deal_with_ship_flag(n, OF_PROTECTED, 0, 0, 0, P_OF_PROTECTED, 0, flag); + sexp_deal_with_ship_flag(n, true, OF_PROTECTED, 0, 0, 0, P_OF_PROTECTED, 0, flag); } -// protects/unprotects a ship. The flag tells us whether or not the protect bit should be set (flag==1) -// or cleared (flag==0) -void sexp_beam_protect_ships(int n, int flag ) +// protects/unprotects a ship. The flag tells us whether or not the protect bit should be set (flag==true) +// or cleared (flag==false) +void sexp_beam_protect_ships(int n, bool flag) { - sexp_deal_with_ship_flag(n, OF_BEAM_PROTECTED, 0, 0, 0, P_OF_BEAM_PROTECTED, 0, flag); + sexp_deal_with_ship_flag(n, true, OF_BEAM_PROTECTED, 0, 0, 0, P_OF_BEAM_PROTECTED, 0, flag); } // Goober5000 - sets the "dont collide invisible" flag on a list of ships -void sexp_dont_collide_invisible(int n, int dont_collide) +void sexp_dont_collide_invisible(int n, bool dont_collide) { - sexp_deal_with_ship_flag(n, 0, 0, 0, SF2_DONT_COLLIDE_INVIS, 0, P_SF2_DONT_COLLIDE_INVIS, dont_collide); + sexp_deal_with_ship_flag(n, true, 0, 0, 0, SF2_DONT_COLLIDE_INVIS, 0, P_SF2_DONT_COLLIDE_INVIS, dont_collide); } // Goober5000 - sets the vaporize flag on a list of ships -void sexp_ships_vaporize(int n, int vaporize) +void sexp_ships_vaporize(int n, bool vaporize) { - sexp_deal_with_ship_flag(n, 0, 0, SF_VAPORIZE, 0, P_SF_VAPORIZE, 0, vaporize); + sexp_deal_with_ship_flag(n, true, 0, 0, SF_VAPORIZE, 0, P_SF_VAPORIZE, 0, vaporize); } // sexpression to make ships "visible" and "invisible" to sensors. The visible parameter is true // when making ships visible, false otherwise -void sexp_ships_visible(int n, int visible) +void sexp_ships_visible(int n, bool visible) { - sexp_deal_with_ship_flag(n, 0, 0, SF_HIDDEN_FROM_SENSORS, 0, P_SF_HIDDEN_FROM_SENSORS, 0, !visible, true); + sexp_deal_with_ship_flag(n, true, 0, 0, SF_HIDDEN_FROM_SENSORS, 0, P_SF_HIDDEN_FROM_SENSORS, 0, !visible, true); // we also have to add any escort ships that were made visible for (; n >= 0; n = CDR(n)) @@ -10992,9 +11491,9 @@ void sexp_ships_visible(int n, int visible) } // Goober5000 -void sexp_ships_stealthy(int n, int stealthy) +void sexp_ships_stealthy(int n, bool stealthy) { - sexp_deal_with_ship_flag(n, 0, 0, 0, SF2_STEALTH, 0, P_SF2_STEALTH, stealthy, true); + sexp_deal_with_ship_flag(n, true, 0, 0, 0, SF2_STEALTH, 0, P_SF2_STEALTH, stealthy, true); // we also have to add any escort ships that were made visible if (!stealthy) @@ -11012,9 +11511,9 @@ void sexp_ships_stealthy(int n, int stealthy) } // Goober5000 -void sexp_friendly_stealth_invisible(int n, int invisible) +void sexp_friendly_stealth_invisible(int n, bool invisible) { - sexp_deal_with_ship_flag(n, 0, 0, 0, SF2_FRIENDLY_STEALTH_INVIS, 0, P_SF2_FRIENDLY_STEALTH_INVIS, invisible, true); + sexp_deal_with_ship_flag(n, true, 0, 0, 0, SF2_FRIENDLY_STEALTH_INVIS, 0, P_SF2_FRIENDLY_STEALTH_INVIS, invisible, true); // we also have to add any escort ships that were made visible if (!invisible) @@ -11144,14 +11643,14 @@ void sexp_ship_tag( int n, int tag ) } // sexpression to toggle invulnerability flag of ships. -void sexp_ships_invulnerable( int n, int invulnerable ) +void sexp_ships_invulnerable( int n, bool invulnerable ) { - sexp_deal_with_ship_flag(n, OF_INVULNERABLE, 0, 0, 0, P_OF_INVULNERABLE, 0, invulnerable); + sexp_deal_with_ship_flag(n, true, OF_INVULNERABLE, 0, 0, 0, P_OF_INVULNERABLE, 0, invulnerable); } -void sexp_ships_bomb_targetable(int n, int targetable) +void sexp_ships_bomb_targetable(int n, bool targetable) { - sexp_deal_with_ship_flag(n, OF_TARGETABLE_AS_BOMB, 0, 0, 0, 0, P2_OF_TARGETABLE_AS_BOMB, targetable, true); + sexp_deal_with_ship_flag(n, true, OF_TARGETABLE_AS_BOMB, 0, 0, 0, 0, P2_OF_TARGETABLE_AS_BOMB, targetable, true); } // Goober5000 @@ -11461,9 +11960,9 @@ void sexp_ship_vanish(int n) } } -void sexp_shields_off(int n, int shields_off ) //-Sesquipedalian +void sexp_shields_off(int n, bool shields_off ) //-Sesquipedalian { - sexp_deal_with_ship_flag(n, OF_NO_SHIELDS, 0, 0, 0, P_OF_NO_SHIELDS, 0, shields_off); + sexp_deal_with_ship_flag(n, true, OF_NO_SHIELDS, 0, 0, 0, P_OF_NO_SHIELDS, 0, shields_off); } // Goober5000 @@ -12346,7 +12845,7 @@ void set_primary_ammo (int ship_index, int requested_bank, int requested_ammo, i } // Is the number requested larger than the maximum allowed for that particular bank? - maximum_allowed = fl2i((shipp->weapons.primary_bank_capacity[requested_bank] + maximum_allowed = fl2i((Ship_info[shipp->ship_info_index].primary_bank_ammo_capacity[requested_bank] / Weapon_info[shipp->weapons.primary_bank_weapons[requested_bank]].cargo_size)+0.5); if (maximum_allowed < requested_ammo) { @@ -12615,21 +13114,21 @@ void sexp_set_weapon (int node, bool primary) void sexp_deal_with_afterburner_lock (int node, bool lock) { Assert (node != -1); - sexp_deal_with_ship_flag(node, 0, 0, 0, SF2_AFTERBURNER_LOCKED, 0, 0, (lock ? 1:0), true); + sexp_deal_with_ship_flag(node, true, 0, 0, 0, SF2_AFTERBURNER_LOCKED, 0, 0, (lock ? 1:0), true); } // Karajorma - locks or unlocks primary weapons on the requested ship void sexp_deal_with_primary_lock (int node, bool lock) { Assert (node != -1); - sexp_deal_with_ship_flag(node, 0, 0, 0, SF2_PRIMARIES_LOCKED, 0, P2_SF2_PRIMARIES_LOCKED, (lock ? 1:0), true); + sexp_deal_with_ship_flag(node, true, 0, 0, 0, SF2_PRIMARIES_LOCKED, 0, P2_SF2_PRIMARIES_LOCKED, (lock ? 1:0), true); } void sexp_deal_with_secondary_lock (int node, bool lock) { Assert (node != -1); - sexp_deal_with_ship_flag(node, 0, 0, 0, SF2_SECONDARIES_LOCKED, 0, P2_SF2_SECONDARIES_LOCKED, (lock ? 1:0), true); + sexp_deal_with_ship_flag(node, true, 0, 0, 0, SF2_SECONDARIES_LOCKED, 0, P2_SF2_SECONDARIES_LOCKED, (lock ? 1:0), true); } @@ -12811,7 +13310,7 @@ void ship_copy_damage(ship *target_shipp, ship *source_shipp) // copy hull... - target_shipp->special_hitpoint_index = source_shipp->special_hitpoint_index; + target_shipp->special_hitpoints = source_shipp->special_hitpoints; target_shipp->ship_max_hull_strength = source_shipp->ship_max_hull_strength; target_objp->hull_strength = source_objp->hull_strength; @@ -12852,7 +13351,7 @@ void parse_copy_damage(p_object *target_pobjp, ship *source_shipp) } // copy hull... - target_pobjp->special_hitpoint_index = source_shipp->special_hitpoint_index; + target_pobjp->special_hitpoints = source_shipp->special_hitpoints; target_pobjp->ship_max_hull_strength = source_shipp->ship_max_hull_strength; target_pobjp->initial_hull = fl2i(get_hull_pct(source_objp) * 100.0f); @@ -15050,7 +15549,7 @@ int sexp_return_player_data(int node, int type) case OP_RESPAWNS_LEFT: // Dogfight missions have no respawn limit - if ((Game_mode & GM_MULTIPLAYER) && !(Netgame.type_flags & NG_TYPE_DOGFIGHT)) { + if (MULTI_NOT_DOGFIGHT) { if ( Net_players[np_index].flags & NETINFO_FLAG_RESPAWNING) { // since the player hasn't actually respawned yet he hasn't used up a number or spawns equal to his deaths // so add an extra life back. @@ -16084,7 +16583,7 @@ void sexp_reset_camera(int node) void sexp_show_subtitle(int node) { //These should be set to the default if not required to be explicitly defined - int x_pos, y_pos, width=200; + int x_pos, y_pos, width=0; char *text, *imageanim=NULL; float display_time, fade_time=0.0f; int r=255, g=255, b=255; @@ -16093,9 +16592,13 @@ void sexp_show_subtitle(int node) bool post_shaded = false; x_pos = eval_num(node); + if (gr_screen.max_w != 1024) + x_pos = (int) ((x_pos / 1024.0f) * gr_screen.max_w); n = CDR(node); y_pos = eval_num(n); + if (gr_screen.max_h != 768) + y_pos = (int) ((y_pos / 768.0f) * gr_screen.max_h); n = CDR(n); text = CTEXT(n); @@ -16116,14 +16619,12 @@ void sexp_show_subtitle(int node) n = CDR(n); if(n != -1) { - if(Sexp_nodes[Sexp_nodes[n].first].value==SEXP_KNOWN_TRUE) - center_x = true; + center_x = is_sexp_true(n) != 0; n = CDR(n); if(n != -1) { - if(Sexp_nodes[Sexp_nodes[n].first].value==SEXP_KNOWN_TRUE) - center_y = true; + center_y = is_sexp_true(n) != 0; n = CDR(n); if(n != -1) @@ -16148,8 +16649,7 @@ void sexp_show_subtitle(int node) n = CDR(n); if ( n !=-1 ) { - if(Sexp_nodes[Sexp_nodes[n].first].value==SEXP_KNOWN_TRUE) - post_shaded = true; + post_shaded = is_sexp_true(n) != 0; } } } @@ -16171,7 +16671,190 @@ void sexp_show_subtitle(int node) color new_color; gr_init_alphacolor(&new_color, r, g, b, 255); - subtitle new_subtitle(x_pos, y_pos, text, display_time, imageanim, fade_time, &new_color, center_x, center_y, width, post_shaded); + subtitle new_subtitle(x_pos, y_pos, text, imageanim, display_time, fade_time, &new_color, -1, center_x, center_y, width, 0, post_shaded); + Subtitles.push_back(new_subtitle); +} + +void sexp_show_subtitle_text(int node) +{ + int n = node; + + char *text = CTEXT(n); + n = CDR(n); + + int x_pct = eval_num(n); + n = CDR(n); + + int y_pct = eval_num(n); + n = CDR(n); + + bool center_x = is_sexp_true(n) != 0; + n = CDR(n); + + bool center_y = is_sexp_true(n) != 0; + n = CDR(n); + + float display_time = eval_num(n) / 1000.0f; + n = CDR(n); + + float fade_time = 0.0f; + if (n >= 0) + { + fade_time = eval_num(n) / 1000.0f; + n = CDR(n); + } + + int width_pct = 0; + if (n >= 0) + { + width_pct = eval_num(n); + n = CDR(n); + } + + int red = 255; + if (n >= 0) + { + red = eval_num(n); + n = CDR(n); + } + + int green = 255; + if (n >= 0) + { + green = eval_num(n); + n = CDR(n); + } + + int blue = 255; + if (n >= 0) + { + blue = eval_num(n); + n = CDR(n); + } + + int fontnum = -1; + if (n >= 0) + { + char *font = CTEXT(n); + n = CDR(n); + + // perform font lookup + for (int i = 0; i < Num_fonts; i++) + { + if (!stricmp(font, Fonts[i].filename)) + { + fontnum = i; + break; + } + } + } + + bool post_shaded = false; + if (n >= 0) + { + post_shaded = is_sexp_true(n) != 0; + n = CDR(n); + } + + // check bounds + if (x_pct < -100) + x_pct = -100; + if (x_pct > 100) + x_pct = 100; + if (y_pct < -100) + y_pct = -100; + if (y_pct > 100) + y_pct = 100; + if (width_pct > 100) + width_pct = 100; + if (red > 255) + red = 255; + if (green > 255) + green = 255; + if (blue > 255) + blue = 255; + + color new_color; + gr_init_alphacolor(&new_color, red, green, blue, 255); + + // calculate pixel positions + int x_pos = gr_screen.max_w * (x_pct / 100.0f); + int y_pos = gr_screen.max_h * (y_pct / 100.0f); + int width = gr_screen.max_w * (width_pct / 100.0f); + + // add the subtitle + subtitle new_subtitle(x_pos, y_pos, text, NULL, display_time, fade_time, &new_color, fontnum, center_x, center_y, width, 0, post_shaded); + Subtitles.push_back(new_subtitle); +} + +void sexp_show_subtitle_image(int node) +{ + int n = node; + + char *image = CTEXT(n); + n = CDR(n); + + int x_pct = eval_num(n); + n = CDR(n); + + int y_pct = eval_num(n); + n = CDR(n); + + bool center_x = is_sexp_true(n) != 0; + n = CDR(n); + + bool center_y = is_sexp_true(n) != 0; + n = CDR(n); + + int width_pct = eval_num(n); + n = CDR(n); + + int height_pct = eval_num(n); + n = CDR(n); + + float display_time = eval_num(n) / 1000.0f; + n = CDR(n); + + float fade_time = 0.0f; + if (n >= 0) + { + fade_time = eval_num(n) / 1000.0f; + n = CDR(n); + } + + bool post_shaded = false; + if (n >= 0) + { + post_shaded = is_sexp_true(n) != 0; + n = CDR(n); + } + + // check bounds + if (x_pct < -100) + x_pct = -100; + if (x_pct > 100) + x_pct = 100; + if (y_pct < -100) + y_pct = -100; + if (y_pct > 100) + y_pct = 100; + if (width_pct < 0) + width_pct = 0; + if (width_pct > 100) + width_pct = 100; + if (height_pct < 0) + height_pct = 0; + if (height_pct > 100) + height_pct = 100; + + // calculate pixel positions + int x_pos = gr_screen.max_w * (x_pct / 100.0f); + int y_pos = gr_screen.max_h * (y_pct / 100.0f); + int width = gr_screen.max_w * (width_pct / 100.0f); + int height = gr_screen.max_h * (height_pct / 100.0f); + + // add the subtitle + subtitle new_subtitle(x_pos, y_pos, NULL, image, display_time, fade_time, NULL, -1, center_x, center_y, width, height, post_shaded); Subtitles.push_back(new_subtitle); } @@ -16448,9 +17131,12 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = sexp_and_in_sequence(node); break; + case OP_EQUALS: case OP_GREATER_THAN: case OP_LESS_THAN: - case OP_EQUALS: + case OP_NOT_EQUAL: + case OP_GREATER_OR_EQUAL: + case OP_LESS_OR_EQUAL: sexp_val = sexp_number_compare( node, op_num ); break; @@ -16646,6 +17332,10 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = sexp_mission_time(); break; + case OP_MISSION_TIME_MSECS: + sexp_val = sexp_mission_time_msecs(); + break; + case OP_TIME_DOCKED: sexp_val = sexp_time_docked(node); break; @@ -16816,6 +17506,13 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = eval_in_sequence( cur_node, referenced_node ); break; + // Karajorma + case OP_INVALIDATE_ALL_ARGUMENTS: + case OP_VALIDATE_ALL_ARGUMENTS: + sexp_change_all_argument_validity(cur_node, (op_num == OP_INVALIDATE_ALL_ARGUMENTS)); + sexp_val = SEXP_TRUE; + break; + // Goober5000 case OP_INVALIDATE_ARGUMENT: case OP_VALIDATE_ARGUMENT: @@ -17024,6 +17721,16 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = SEXP_TRUE; break; + case OP_SET_SOUND_ENVIRONMENT: + sexp_set_sound_environment(node); + sexp_val = SEXP_TRUE; + break; + + case OP_UPDATE_SOUND_ENVIRONMENT: + sexp_update_sound_environment(node); + sexp_val = SEXP_TRUE; + break; + case OP_HUD_DISABLE: sexp_hud_disable(node); sexp_val = SEXP_TRUE; @@ -17064,6 +17771,11 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = SEXP_TRUE; break; + case OP_HUD_DISPLAY_GAUGE: + sexp_hud_display_gauge(node); + sexp_val = SEXP_TRUE; + break; + // Goober5000 case OP_PLAYER_USE_AI: case OP_PLAYER_NOT_USE_AI: @@ -17195,6 +17907,11 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = SEXP_TRUE; break; + case OP_MISSION_SET_SUBSPACE: + sexp_mission_set_subspace(node); + sexp_val = SEXP_TRUE; + break; + case OP_ADD_BACKGROUND_BITMAP: sexp_add_background_bitmap(node); sexp_val = SEXP_TRUE; @@ -17258,6 +17975,11 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = SEXP_TRUE; break; + case OP_SET_EXPLOSION_OPTION: + sexp_set_explosion_option(node); + sexp_val = SEXP_TRUE; + break; + case OP_DONT_COLLIDE_INVISIBLE: case OP_COLLIDE_INVISIBLE: sexp_dont_collide_invisible( node, (op_num == OP_DONT_COLLIDE_INVISIBLE) ); @@ -18008,6 +18730,14 @@ int eval_sexp(int cur_node, int referenced_node) sexp_val = SEXP_TRUE; sexp_show_subtitle(node); break; + case OP_CUTSCENES_SHOW_SUBTITLE_TEXT: + sexp_val = SEXP_TRUE; + sexp_show_subtitle_text(node); + break; + case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE: + sexp_val = SEXP_TRUE; + sexp_show_subtitle_image(node); + break; case OP_CUTSCENES_SET_TIME_COMPRESSION: sexp_val = SEXP_TRUE; sexp_set_time_compression(node); @@ -18380,6 +19110,9 @@ int query_operator_return_type(int op) case OP_EQUALS: case OP_GREATER_THAN: case OP_LESS_THAN: + case OP_NOT_EQUAL: + case OP_GREATER_OR_EQUAL: + case OP_LESS_OR_EQUAL: case OP_STRING_EQUALS: case OP_STRING_GREATER_THAN: case OP_STRING_LESS_THAN: @@ -18492,6 +19225,7 @@ int query_operator_return_type(int op) case OP_TIME_WING_ARRIVED: case OP_TIME_WING_DEPARTED: case OP_MISSION_TIME: + case OP_MISSION_TIME_MSECS: case OP_TIME_DOCKED: case OP_TIME_UNDOCKED: case OP_AFTERBURNER_LEFT: @@ -18538,6 +19272,8 @@ int query_operator_return_type(int op) case OP_EVERY_TIME_ARGUMENT: case OP_INVALIDATE_ARGUMENT: case OP_VALIDATE_ARGUMENT: + case OP_INVALIDATE_ALL_ARGUMENTS: + case OP_VALIDATE_ALL_ARGUMENTS: case OP_DO_FOR_VALID_ARGUMENTS: case OP_CHANGE_IFF: case OP_CHANGE_AI_CLASS: @@ -18653,6 +19389,7 @@ int query_operator_return_type(int op) case OP_SET_SPECIAL_WARPOUT_NAME: case OP_SHIP_VAPORIZE: case OP_SHIP_NO_VAPORIZE: + case OP_SET_EXPLOSION_OPTION: case OP_DONT_COLLIDE_INVISIBLE: case OP_COLLIDE_INVISIBLE: case OP_CHANGE_SHIP_CLASS: @@ -18669,6 +19406,8 @@ int query_operator_return_type(int op) case OP_PLAY_SOUND_FROM_FILE: case OP_CLOSE_SOUND_FROM_FILE: case OP_PLAY_SOUND_FROM_TABLE: + case OP_SET_SOUND_ENVIRONMENT: + case OP_UPDATE_SOUND_ENVIRONMENT: case OP_EXPLOSION_EFFECT: case OP_WARP_EFFECT: case OP_SET_OBJECT_POSITION: @@ -18680,7 +19419,6 @@ int query_operator_return_type(int op) case OP_HUD_DISABLE: case OP_HUD_DISABLE_EXCEPT_MESSAGES: case OP_KAMIKAZE: - case OP_NOT_KAMIKAZE: case OP_TURRET_TAGGED_SPECIFIC: case OP_TURRET_TAGGED_CLEAR_SPECIFIC: case OP_LOCK_ROTATING_SUBSYSTEM: @@ -18731,6 +19469,8 @@ int query_operator_return_type(int op) case OP_CUTSCENES_RESET_FOV: case OP_CUTSCENES_RESET_CAMERA: case OP_CUTSCENES_SHOW_SUBTITLE: + case OP_CUTSCENES_SHOW_SUBTITLE_TEXT: + case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE: case OP_CUTSCENES_SET_TIME_COMPRESSION: case OP_CUTSCENES_RESET_TIME_COMPRESSION: case OP_CUTSCENES_FORCE_PERSPECTIVE: @@ -18775,6 +19515,8 @@ int query_operator_return_type(int op) case OP_SET_POST_EFFECT: case OP_CHANGE_IFF_COLOR: case OP_REMOVE_WEAPONS: + case OP_MISSION_SET_SUBSPACE: + case OP_HUD_DISPLAY_GAUGE: return OPR_NULL; case OP_AI_CHASE: @@ -18842,6 +19584,7 @@ int query_operator_argument_type(int op, int argnum) case OP_TRUE: case OP_FALSE: case OP_MISSION_TIME: + case OP_MISSION_TIME_MSECS: /* case OP_INT3: */ case OP_NOP: case OP_WAYPOINT_MISSED: @@ -18853,6 +19596,8 @@ int query_operator_argument_type(int op, int argnum) case OP_END_MISSION: case OP_FORCE_JUMP: case OP_RESET_ORDERS: + case OP_INVALIDATE_ALL_ARGUMENTS: + case OP_VALIDATE_ALL_ARGUMENTS: return OPF_NONE; case OP_AND: @@ -18869,6 +19614,9 @@ int query_operator_argument_type(int op, int argnum) case OP_EQUALS: case OP_GREATER_THAN: case OP_LESS_THAN: + case OP_NOT_EQUAL: + case OP_GREATER_OR_EQUAL: + case OP_LESS_OR_EQUAL: case OP_RAND: case OP_RAND_MULTIPLE: case OP_ABS: @@ -18891,6 +19639,7 @@ int query_operator_argument_type(int op, int argnum) case OP_TEAM_SCORE: case OP_HUD_SET_MAX_TARGETING_RANGE: case OP_MISSION_SET_NEBULA: //WMC + case OP_MISSION_SET_SUBSPACE: return OPF_POSITIVE; case OP_AI_WARP: // this operator is obsolete @@ -19404,6 +20153,39 @@ int query_operator_argument_type(int op, int argnum) case OP_CLOSE_SOUND_FROM_FILE: return OPF_BOOL; + case OP_SET_SOUND_ENVIRONMENT: + if (argnum == 0) + return OPF_SOUND_ENVIRONMENT; + + // fall through + argnum--; + + case OP_UPDATE_SOUND_ENVIRONMENT: + { + // every two, the value repeats + int a_mod = argnum % 2; + + if (a_mod == 0) + return OPF_SOUND_ENVIRONMENT_OPTION; + else + return OPF_POSITIVE; + } + + case OP_SET_EXPLOSION_OPTION: + { + // editing a ship + if (argnum == 0) + return OPF_SHIP; + + // every two, the value repeats + int a_mod = (argnum - 1) % 2; + + if (a_mod == 0) + return OPF_EXPLOSION_OPTION; + else + return OPF_POSITIVE; + } + case OP_HUD_DISABLE: case OP_HUD_DISABLE_EXCEPT_MESSAGES: return OPF_POSITIVE; @@ -19449,10 +20231,9 @@ int query_operator_argument_type(int op, int argnum) return OPF_MESSAGE; case OP_SEND_MESSAGE_LIST: - int a_mod; - + { // every four, the value repeats - a_mod = argnum % 4; + int a_mod = argnum % 4; // who from if(a_mod == 0) @@ -19463,6 +20244,7 @@ int query_operator_argument_type(int op, int argnum) return OPF_MESSAGE; else if(a_mod == 3) return OPF_POSITIVE; + } case OP_TRAINING_MSG: if (argnum < 2) @@ -20092,9 +20874,6 @@ int query_operator_argument_type(int op, int argnum) else return OPF_SHIP_WING; - case OP_NOT_KAMIKAZE: - return OPF_SHIP_WING; - case OP_NUM_SHIPS_IN_BATTLE: //phreak modified by FUBAR return OPF_SHIP_WING_TEAM; @@ -20217,19 +20996,45 @@ int query_operator_argument_type(int op, int argnum) case OP_CUTSCENES_SHOW_SUBTITLE: if(argnum < 2) return OPF_NUMBER; - else if(argnum == 2) + else if (argnum == 2) return OPF_STRING; - else if(argnum == 3) + else if (argnum == 3) return OPF_POSITIVE; - else if(argnum == 4) + else if (argnum == 4) return OPF_STRING; - else if(argnum == 5) + else if (argnum == 5) return OPF_POSITIVE; - else if(argnum < 8) + else if (argnum < 8) return OPF_BOOL; - else if(argnum < 12) + else if (argnum < 12) return OPF_POSITIVE; - else if(argnum == 12 ) + else if (argnum == 12 ) + return OPF_BOOL; + + case OP_CUTSCENES_SHOW_SUBTITLE_TEXT: + if (argnum == 0) + return OPF_STRING; + else if (argnum == 1 || argnum == 2) + return OPF_NUMBER; + else if (argnum == 3 || argnum == 4) + return OPF_BOOL; + else if (argnum >= 5 && argnum <= 10) + return OPF_POSITIVE; + else if (argnum == 11) + return OPF_FONT; + else if (argnum == 12) + return OPF_BOOL; + + case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE: + if (argnum == 0) + return OPF_STRING; + else if (argnum == 1 || argnum == 2) + return OPF_NUMBER; + else if (argnum == 3 || argnum == 4) + return OPF_BOOL; + else if (argnum >= 5 && argnum <= 8) + return OPF_POSITIVE; + else if (argnum == 9) return OPF_BOOL; // @@ -20287,6 +21092,13 @@ int query_operator_argument_type(int op, int argnum) return OPF_POSITIVE; else return OPF_SHIP_WING; + case OP_HUD_DISPLAY_GAUGE: + if ( argnum == 0 ) { + return OPF_POSITIVE; + } else { + return OPF_HUD_ELEMENT; + } + default: Int3(); } @@ -20294,28 +21106,12 @@ int query_operator_argument_type(int op, int argnum) return 0; } -void update_block_names(const char *old_name, const char *new_name) -{ - int i; - - for (i=0; i= 0) && (index < MAX_SEXP_VARIABLES) ); + + strcpy_s(Block_variables[index].text, text); + strcpy_s(Block_variables[index].variable_name, var_name); + Block_variables[index].type &= ~SEXP_VARIABLE_NOT_USED; + Block_variables[index].type = (type | SEXP_VARIABLE_SET); + +} // Adds an Sexp_variable to be used in a mission. // This should be called from within mission parse. @@ -20920,9 +21741,9 @@ void sexp_add_array_block_variable(int index, bool is_numeric) strcpy_s(Sexp_variables[index].variable_name, "variable array block"); if (is_numeric) - Sexp_variables[index].type = SEXP_VARIABLE_NUMBER | SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_SET; + Sexp_variables[index].type = SEXP_VARIABLE_NUMBER | SEXP_VARIABLE_SET; else - Sexp_variables[index].type = SEXP_VARIABLE_STRING | SEXP_VARIABLE_BLOCK | SEXP_VARIABLE_SET; + Sexp_variables[index].type = SEXP_VARIABLE_STRING | SEXP_VARIABLE_SET; } // Modifies and Sexp_variable to be used in a mission @@ -20933,7 +21754,19 @@ void sexp_modify_variable(char *text, int index, bool sexp_callback) Assert(Sexp_variables[index].type & SEXP_VARIABLE_SET); Assert( !MULTIPLAYER_CLIENT ); - strcpy_s(Sexp_variables[index].text, text); + if (strchr(text, '$') != NULL) + { + // we want to use the same variable substitution that's in messages etc. + char buf[TOKEN_LENGTH]; + strcpy_s(buf, text); + sexp_replace_variable_names_with_values(buf, TOKEN_LENGTH); + strcpy_s(Sexp_variables[index].text, buf); + } + else + { + // no variables, so no substitution + strcpy_s(Sexp_variables[index].text, text); + } Sexp_variables[index].type |= SEXP_VARIABLE_MODIFIED; // do multi_callback_here @@ -21251,7 +22084,7 @@ int sexp_variable_count() int count = 0; for (int i=0; i (MAX_SEXP_VARIABLES - num_blocks)) { - // not enough free space - return -1; - } - - // squeeze all variables to front of array - sexp_variable_sort(); - - // squeeze all block to end of array - sexp_variable_condense_block(); - - start = MAX_SEXP_VARIABLES - block_count - num_blocks; - - for (int idx=start; idxvar_count-1; idx--) { - if (Sexp_variables[idx].type & SEXP_VARIABLE_BLOCK) { - if (temp_idx > idx) { - Sexp_variables[temp_idx] = Sexp_variables[idx]; - Sexp_variables[idx].type = SEXP_VARIABLE_NOT_USED; - - // now we need to check that nothing actually used this block - for (i = 0; i < MAX_SHIPS; i++) { - if (Ships[i].special_exp_index == idx) { - Ships[i].special_exp_index = temp_idx; - } - if (Ships[i].special_hitpoint_index == idx) { - Ships[i].special_hitpoint_index = temp_idx; - } - } - } - temp_idx--; - } - } -} - - -void sexp_variable_block_free(const char *ship_name, int start_index, int block_type) -{ - int num_blocks; - - if (block_type & SEXP_VARIABLE_BLOCK_EXP) { - num_blocks = BLOCK_EXP_SIZE; - } else if (block_type & SEXP_VARIABLE_BLOCK_HIT) { - num_blocks = BLOCK_HIT_SIZE; - } else { - Int3(); // new type of block - return; - } - - for (int i=start_index; i<(start_index + num_blocks); i++) { - Assert(!stricmp(Sexp_variables[i].variable_name, ship_name)); - - Assert(Sexp_variables[i].type & block_type); - - Sexp_variables[i].type = SEXP_VARIABLE_NOT_USED; - } - - sexp_variable_condense_block(); + insertion_sort( (void *)Sexp_variables, (size_t)(MAX_SEXP_VARIABLES), sizeof(sexp_variable), sexp_var_compare ); } // evaluate number which may result from an operator or may be text @@ -21478,7 +22207,6 @@ int get_subcategory(int sexp_id) case OP_BEAM_PROTECT_SHIP: case OP_BEAM_UNPROTECT_SHIP: case OP_KAMIKAZE: - case OP_NOT_KAMIKAZE: case OP_PLAYER_USE_AI: case OP_PLAYER_NOT_USE_AI: case OP_ALLOW_TREASON: @@ -21606,6 +22334,8 @@ int get_subcategory(int sexp_id) case OP_PLAY_SOUND_FROM_TABLE: case OP_PLAY_SOUND_FROM_FILE: case OP_CLOSE_SOUND_FROM_FILE: + case OP_SET_SOUND_ENVIRONMENT: + case OP_UPDATE_SOUND_ENVIRONMENT: return CHANGE_SUBCATEGORY_MUSIC_AND_SOUND; case OP_ADD_REMOVE_ESCORT: @@ -21618,6 +22348,7 @@ int get_subcategory(int sexp_id) case OP_SHIP_VANISH: case OP_SHIP_VAPORIZE: case OP_SHIP_NO_VAPORIZE: + case OP_SET_EXPLOSION_OPTION: case OP_SHIELDS_ON: case OP_SHIELDS_OFF: case OP_SHIP_TAG: @@ -21643,6 +22374,7 @@ int get_subcategory(int sexp_id) case OP_NEBULA_TOGGLE_POOF: case OP_SET_AMBIENT_LIGHT: case OP_SET_POST_EFFECT: + case OP_MISSION_SET_SUBSPACE: return CHANGE_SUBCATEGORY_BACKGROUND_AND_NEBULA; case OP_HUD_DISABLE: @@ -21653,6 +22385,7 @@ int get_subcategory(int sexp_id) case OP_HUD_SET_FRAME: case OP_HUD_SET_COLOR: case OP_HUD_SET_MAX_TARGETING_RANGE: + case OP_HUD_DISPLAY_GAUGE: return CHANGE_SUBCATEGORY_HUD; case OP_CUTSCENES_SET_CUTSCENE_BARS: @@ -21672,6 +22405,8 @@ int get_subcategory(int sexp_id) case OP_CUTSCENES_RESET_FOV: case OP_CUTSCENES_RESET_CAMERA: case OP_CUTSCENES_SHOW_SUBTITLE: + case OP_CUTSCENES_SHOW_SUBTITLE_TEXT: + case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE: case OP_CUTSCENES_SET_TIME_COMPRESSION: case OP_CUTSCENES_RESET_TIME_COMPRESSION: case OP_CUTSCENES_FORCE_PERSPECTIVE: @@ -21957,11 +22692,23 @@ sexp_help_struct Sexp_help[] = { "Returns a boolean value. Takes 2 or more numeric arguments." }, { OP_GREATER_THAN, "Greater Than (Boolean operator)\r\n" - "\tTrue if the first argument is greater than the second argument.\r\n\r\n" + "\tTrue if the first argument is greater than the subsequent argument(s).\r\n\r\n" "Returns a boolean value. Takes 2 numeric arguments." }, { OP_LESS_THAN, "Less Than (Boolean operator)\r\n" - "\tTrue if the first argument is less than the second argument.\r\n\r\n" + "\tTrue if the first argument is less than the subsequent argument(s).\r\n\r\n" + "Returns a boolean value. Takes 2 numeric arguments." }, + + { OP_NOT_EQUAL, "Not Equal To (Boolean operator)\r\n" + "\tIs true if the first argument is not equal to any of the subsequent arguments.\r\n\r\n" + "Returns a boolean value. Takes 2 or more numeric arguments." }, + + { OP_GREATER_OR_EQUAL, "Greater Than Or Equal To (Boolean operator)\r\n" + "\tTrue if the first argument is greater than or equal to the subsequent argument(s).\r\n\r\n" + "Returns a boolean value. Takes 2 numeric arguments." }, + + { OP_LESS_OR_EQUAL, "Less Than Or Equal To (Boolean operator)\r\n" + "\tTrue if the first argument is less than or equal to the subsequent argument(s).\r\n\r\n" "Returns a boolean value. Takes 2 numeric arguments." }, // Goober5000 @@ -22230,7 +22977,11 @@ sexp_help_struct Sexp_help[] = { { OP_MISSION_TIME, "Mission time (Time operator)\r\n" "\tReturns the current time into the mission.\r\n\r\n" - "Returns a numeric value." }, + "Returns a numeric value. Takes no arguments." }, + + { OP_MISSION_TIME_MSECS, "Mission time, in milliseconds (Time operator)\r\n" + "\tReturns the current time into the mission, in milliseconds. Useful for more fine-grained timing than possible with normal second-based sexps. (Tip: when an event occurs, assign the result of mission-time-msecs to a variable. Then, in another event, wait until mission-time-msecs is greater than the value of that variable plus some delay amount. This second event should be chained or coupled with additional conditions so that it doesn't accidentally fire on an uninitialized variable!)\r\n\r\n" + "Returns a numeric value. Takes no arguments." }, { OP_TIME_DOCKED, "Time docked (Time operator)\r\n" "\tReturns the time the specified ships docked.\r\n\r\n" @@ -22443,6 +23194,17 @@ sexp_help_struct Sexp_help[] = { "Takes 1 or more arguments...\r\n" "\tAll:\tThe argument to restore to the preceding argument list." }, + // Karajorma + { OP_INVALIDATE_ALL_ARGUMENTS, "Invalidate-all-arguments (Conditional operator)\r\n" + "\tRemoves all argument from future consideration as " SEXP_ARGUMENT_STRING " special data items.\r\n" + "Takes no arguments." }, + + // Karajorma + { OP_VALIDATE_ALL_ARGUMENTS, "Validate-all-arguments (Conditional operator)\r\n" + "\tRestores all arguments for future consideration as " SEXP_ARGUMENT_STRING " special data items.\r\n" + "\tIf the argument hasn't been previously invalidated, it will do nothing.\r\n" + "Takes no arguments." }, + // Goober5000 - added wing capability { OP_CHANGE_IFF, "Change IFF (Action operator)\r\n" "\tSets the specified ship(s) or wing(s) to the specified team.\r\n" @@ -22662,7 +23424,7 @@ sexp_help_struct Sexp_help[] = { // Goober5000 { OP_CHANGE_SOUNDTRACK, "change-soundtrack\r\n" "\tChanges the mission music. Takes 1 argument...\r\n" - "\1: Name of the music selection (taken from music.tbl)" }, + "\t1: Name of the music selection (taken from music.tbl)" }, // Goober5000 { OP_PLAY_SOUND_FROM_TABLE, "play-sound-from-table\r\n" @@ -22675,9 +23437,10 @@ sexp_help_struct Sexp_help[] = { // Goober5000 { OP_PLAY_SOUND_FROM_FILE, "play-sound-from-file\r\n" "\tPlays a sound, such as a music soundtrack, from a file. Important: Only one sound at a time can be played with this sexp!\r\n" - "Takes 1 or 2 arguments...\r\n" + "Takes 1 to 3 arguments...\r\n" "\t1: Sound (file name)\r\n" - "\t2: Enter a non-zero number to loop. default is off (optional)." + "\t2: Enter a non-zero number to loop. default is off (optional).\r\n" + "\t3: Enter a non-zero number to use environment effects. default is off (optional)." }, // Goober5000 @@ -22685,6 +23448,32 @@ sexp_help_struct Sexp_help[] = { "\tCloses the currently playing sound started by play-sound-from-file, if there is any. Takes 1 argument...\r\n" "\t1: Fade (default is true)" }, + // Taylor + { OP_SET_SOUND_ENVIRONMENT, "set-sound-environment\r\n" + "Sets the EAX environment for all sound effects. Optionally sets one or more parameters specific to the environment. Takes 1 or more arguments...\r\n" + "\t1:\tSound environment name (a value of \"" SEXP_NONE_STRING "\" will disable the effects)\r\n" + "\t2:\tEnvironment option (optional)\r\n" + "\t3:\tEnvironment value x 1000, e.g. 10 is 0.01 (optional)\r\n" + "Use Add-Data to specify additional environment options in repeating option-value pairs, just like Send-Message-List can have additional messages in source-priority-message-delay groups.\r\n\r\n" + "IMPORTANT: each additional option in the list MUST HAVE two entries; any option without the two proper fields will be ignored, as will any successive options." }, + + // Taylor + { OP_UPDATE_SOUND_ENVIRONMENT, "update-sound-environment\r\n" + "Updates the current EAX environment with new values. Takes 2 or more arguments...\r\n" + "\t1:\tEnvironment option\r\n" + "\t2:\tEnvironment value x 1000, e.g. 10 is 0.01\r\n" + "Use Add-Data to specify additional environment options in repeating option-value pairs, just like Send-Message-List can have additional messages in source-priority-message-delay groups.\r\n\r\n" + "IMPORTANT: Each additional option in the list MUST HAVE two entries; any option without the two proper fields will be ignored, as will any successive options." }, + + // Goober5000 + { OP_SET_EXPLOSION_OPTION, "set-explosion-option\r\n" + "Sets an explosion option on a particular ship. Takes 3 or more arguments...\r\n" + "\t1:\tShip name\r\n" + "\t2:\tExplosion option\r\n" + "\t3:\tExplosion value (for shockwave speed, 0 will produce no shockwave)\r\n" + "Use Add-Data to specify additional explosion options in repeating option-value pairs, just like Send-Message-List can have additional messages in source-priority-message-delay groups.\r\n\r\n" + "IMPORTANT: Each additional option in the list MUST HAVE two entries; any option without the two proper fields will be ignored, as will any successive options." }, + // Goober5000 { OP_EXPLOSION_EFFECT, "explosion-effect\r\n" "\tCauses an explosion at a given origin, with the given parameters. " @@ -22698,7 +23487,8 @@ sexp_help_struct Sexp_help[] = { "\t7: Inner radius to apply damage (if 0, explosion will not be visible)\r\n" "\t8: Outer radius to apply damage (if 0, explosion will not be visible)\r\n" "\t9: Shockwave speed (if 0, there will be no shockwave)\r\n" - "\t10: Type (0 = medium, 1 = large1, 2 = large2)\r\n" + "\t10: Type - For backward compatibility 0 = medium, 1 = large1 (4th in table), 2 = large2 (5th in table)\r\n" + " 3 or greater link to respctive entry in fireball.tbl\r\n" "\t11: Sound (index into sounds.tbl)\r\n" "\t12: EMP intensity (optional)\r\n" "\t13: EMP duration in seconds (optional)" }, @@ -23392,10 +24182,15 @@ sexp_help_struct Sexp_help[] = { "\tTakes1 argument...\r\n" "\t1:\t0 for nebula off, 1 for nebula on" }, + { OP_MISSION_SET_SUBSPACE, "mission-set-subspace\r\n" + "\tTurns subspace on/off\r\n" + "\tTakes 1 argument...\r\n" + "\r1:\t0 for subspace off, 1 for subspace on" }, + //-Sesquipedalian { OP_END_MISSION, "end-mission\r\n" "\tEnds the mission as if the player had engaged his subspace drive, but without him doing so. Dumps the player back into a normal debriefing. Does not invoke red-alert status.\r\n" - "Takes no arguments." }, + "\t1:\t(optional)End Mission even if the player is dead (defaults to true)" }, // Goober5000 { OP_FORCE_JUMP, "force-jump\r\n" @@ -23669,15 +24464,15 @@ sexp_help_struct Sexp_help[] = { "\t2: Range, in meters\r\n" }, { OP_SEND_MESSAGE_LIST, "send-message-list\r\n" - "\tSends a series of delayed messages. All times are accumulated" + "\tSends a series of delayed messages. All times are accumulated.\r\n" "\t1:\tName of who the message is from.\r\n" "\t2:\tPriority of message (\"Low\", \"Normal\" or \"High\").\r\n" "\t3:\tName of message (from message editor).\r\n" "\t4:\tDelay from previous message in list (if any) in ms\r\n" - "Use Add-Data for multiple messages" - "IMPORTANT : each additional message in the list MUST HAVE 4 entries;\r\n" - "any message without the 4 proper fields will be ignored, as will any\r\n" - "successive messages"}, + "Use Add-Data for multiple messages.\r\n\r\n" + "IMPORTANT: Each additional message in the list MUST HAVE four entries; " + "any message without the four proper fields will be ignored, as will any " + "successive messages."}, { OP_CAP_WAYPOINT_SPEED, "cap-waypoint-speed\r\n" "\tSets the maximum speed of a ship while flying waypoints.\r\n" @@ -23926,12 +24721,6 @@ sexp_help_struct Sexp_help[] = { "\tRest: Names of ships to perform kamikaze\r\n" }, - //-Sesquipedalian - { OP_NOT_KAMIKAZE, "not-kamikaze\r\n" - "\tTells ships abort a kamikaze run Takes 1 or more arguments....\r\n" - "\tAll: Names of ships to abort kamikaze\r\n" - }, - //phreak { OP_TURRET_TAGGED_SPECIFIC, "turret-tagged-specific\r\n" "\tSpecific turrets on a ship only fire at tagged targets, as opposed to all turrets doing this using turret-tagged-only\r\n" @@ -24140,6 +24929,14 @@ sexp_help_struct Sexp_help[] = { "\1: Maximum targeting distance (0 for infinite)\r\n" }, + { OP_HUD_DISPLAY_GAUGE, "hud-display-gauge \r\n" + "\tCauses specified hud gauge to appear or disappear for so many milliseconds. Takes 1 argument...\r\n" + "\t1: Number of milliseconds that the warpout gauge should appear on the HUD." + " 0 will immediately cause the gauge to disappear.\r\n" + "\t2: Name of HUD element. Must be one of:\r\n" + "\t\t" SEXP_HUD_GAUGE_WARPOUT " - the \"Subspace drive active\" box that appears above the viewscreen.\r\n" + }, + // Goober5000 { OP_PLAYER_USE_AI, "player-use-ai\r\n" "\tCauses the player's ship to be controlled by the FreeSpace AI. Takes 0 arguments.\r\n" @@ -24227,39 +25024,39 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CUTSCENE_BARS, "set-cutscene-bars\r\n" - "\tShows bars at the top and bottom of screen " + "\tShows bars at the top and bottom of screen. " "Takes 0 or 1 arguments...\r\n" "\t1:\tMilliseconds for bars to slide in\r\n" }, { OP_CUTSCENES_UNSET_CUTSCENE_BARS, "unset-cutscene-bars\r\n" - "\tRemoves cutscene bars " + "\tRemoves cutscene bars. " "Takes 0 or 1 arguments...\r\n" "\t1:\tMilliseconds for bars to slide out\r\n" }, { OP_CUTSCENES_FADE_IN, "fade-in\r\n" - "\tFades in " + "\tFades in. " "Takes 0 or 1 arguments...\r\n" "\t1:\tTime to fade in (in milliseconds)\r\n" }, { OP_CUTSCENES_FADE_OUT, "fade-out\r\n" - "\tFades out " + "\tFades out. " "Takes 0 to 2 arguments...\r\n" "\t1:\tTime to fade in (in milliseconds)\r\n" "\t2:\tColor to fade to - 1 for white, 2 for red, default is black\r\n" }, { OP_CUTSCENES_SET_CAMERA, "set-camera\r\n" - "\tSets SEXP camera, or another specified cutscene camera " + "\tSets SEXP camera, or another specified cutscene camera. " "Takes 0 to 1 arguments...\r\n" "\t(optional)\r\n" "\t1:\tCamera name (created if nonexistent)\r\n" }, { OP_CUTSCENES_SET_CAMERA_FACING, "set-camera-facing\r\n" - "\tMakes the camera face the given point " + "\tMakes the camera face the given point. " "Takes 3 to 6 arguments...\r\n" "\t1:\tX position to face\r\n" "\t2:\tY position to face\r\n" @@ -24271,7 +25068,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CAMERA_FACING_OBJECT, "set-camera-facing-object\r\n" - "\tMakes the camera face the given object " + "\tMakes the camera face the given object. " "Takes 1 to 4 arguments...\r\n" "\t1:\tObject to face\r\n" "\t(optional)\r\n" @@ -24281,7 +25078,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CAMERA_FOV, "set-camera-fov\r\n" - "\tSets the camera field of view " + "\tSets the camera field of view. " "Takes 1 to 4 arguments...\r\n" "\t1:\tNew FOV (degrees)\r\n" "\t(optional)\r\n" @@ -24300,7 +25097,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CAMERA_POSITION, "set-camera-position\r\n" - "\tSets the camera position to a spot in mission space " + "\tSets the camera position to a spot in mission space. " "Takes 3 to 6 arguments...\r\n" "\t1:\tX position\r\n" "\t2:\tY position\r\n" @@ -24312,7 +25109,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CAMERA_ROTATION, "set-camera-rotation\r\n" - "\tSets the camera rotation " + "\tSets the camera rotation. " "Takes 3 to 6 arguments...\r\n" "\t1:\tPitch (degrees)\r\n" "\t2:\tBank (degrees)\r\n" @@ -24324,7 +25121,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_CAMERA_TARGET, "set-camera-target\r\n" - "\tSets the object and subystem camera should track. Camera orientation is offset from the target " + "\tSets the object and subystem camera should track. Camera orientation is offset from the target. " "Takes 1 to 2 arguments...\r\n" "\t1:\tShip to track\r\n" "\t(optional)\r\n" @@ -24332,7 +25129,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_SET_FOV, "set-fov\r\n" - "\tSets the field of view - overrides all camera settings " + "\tSets the field of view - overrides all camera settings. " "Takes 1 argument...\r\n" "\t1:\tNew FOV (degrees)\r\n" }, @@ -24344,36 +25141,69 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_RESET_FOV, "reset-fov\r\n" - "\tResets the field of view " + "\tResets the field of view. " }, { OP_CUTSCENES_RESET_CAMERA, "reset-camera\r\n" - "\tReleases cutscene camera control " + "\tReleases cutscene camera control. " "Takes 1 optional argument...\r\n" "\t(optional)\r\n" "\t1:\tReset camera data (Position, facing, FOV...) (default: false)" }, - { OP_CUTSCENES_SHOW_SUBTITLE, "show-subtitle\r\n" - "\tShows a subtitle " - "Takes 4 to 12 arguments...\r\n" + { OP_CUTSCENES_SHOW_SUBTITLE, "show-subtitle (deprecated)\r\n" + "\tDisplays a subtitle, either an image or a string of text. As this operator tries to combine two functions into one and does not adjust coordinates for screen formats, it has been deprecated.\r\n" + "Takes 4 to 13 arguments...\r\n" "\t1:\tX position (negative value to be from right of screen)\r\n" "\t2:\tY position (negative value to be from bottom of screen)\r\n" "\t3:\tText to display\r\n" "\t4:\tTime to be displayed, not including fadein/out\r\n" - "\t(optional) 5:\tImage name\r\n" - "\t(optional) 6:\tFade in time\r\n" - "\t(optional) 7:\tCenter horizontally?\r\n" - "\t(optional) 8:\tCenter vertically?\r\n" - "\t(optional) 9:\tWidth\r\n" - "\t(optional) 10:\tText red component (0-255)\r\n" - "\t(optional) 11:\tText green component (0-255)\r\n" - "\t(optional) 12:\tText blue component (0-255)\r\n" - "\t(optional) 13:\tDrawn after shading?" + "\t5:\tImage name (optional)\r\n" + "\t6:\tFade in time (optional)\r\n" + "\t7:\tCenter horizontally? (optional)\r\n" + "\t8:\tCenter vertically? (optional)\r\n" + "\t9:\tWidth (optional)\r\n" + "\t10:\tText red component (0-255) (optional)\r\n" + "\t11:\tText green component (0-255) (optional)\r\n" + "\t12:\tText blue component (0-255) (optional)\r\n" + "\t13:\tDrawn after shading? (optional)" + }, + + { OP_CUTSCENES_SHOW_SUBTITLE_TEXT, "show-subtitle-text\r\n" + "\tDisplays a subtitle in the form of text. Note that because of the constraints of the SEXP type system, textual subtitles are currently limited to 31 characters or fewer.\r\n" + "Takes 6 to 13 arguments...\r\n" + "\t1:\tText to display\r\n" + "\t2:\tX position, from 0 to 100% (positive measures from the left; negative measures from the right)\r\n" + "\t3:\tY position, from 0 to 100% (positive measures from the top; negative measures from the bottom)\r\n" + "\t4:\tCenter horizontally? (if true, overrides argument #2)\r\n" + "\t5:\tCenter vertically? (if true, overrides argument #3)\r\n" + "\t6:\tTime (in milliseconds) to be displayed, not including fade-in/fade-out\r\n" + "\t7:\tFade time (in milliseconds) to be used for both fade-in and fade-out (optional)\r\n" + "\t8:\tParagraph width, from 1 to 100% (optional; 0 uses default 200 pixels)\r\n" + "\t9:\tText red component (0-255) (optional)\r\n" + "\t10:\tText green component (0-255) (optional)\r\n" + "\t11:\tText blue component (0-255) (optional)\r\n" + "\t12:\tText font (optional)\r\n" + "\t13:\tDrawn after shading? (optional)" + }, + + { OP_CUTSCENES_SHOW_SUBTITLE_IMAGE, "show-subtitle-image\r\n" + "\tDisplays a subtitle in the form of an image.\r\n" + "Takes 8 to 10 arguments...\r\n" + "\t1:\tImage to display\r\n" + "\t2:\tX position, from 0 to 100% (positive measures from the left; negative measures from the right)\r\n" + "\t3:\tY position, from 0 to 100% (positive measures from the top; negative measures from the bottom)\r\n" + "\t4:\tCenter horizontally? (if true, overrides argument #2)\r\n" + "\t5:\tCenter vertically? (if true, overrides argument #3)\r\n" + "\t6:\tImage width, from 1 to 100% (0 uses original width)\r\n" + "\t7:\tImage height, from 1 to 100% (0 uses original height)\r\n" + "\t8:\tTime (in milliseconds) to be displayed, not including fade-in/fade-out\r\n" + "\t9:\tFade time (in milliseconds) to be used for both fade-in and fade-out (optional)\r\n" + "\t10:\tDrawn after shading? (optional)" }, { OP_CUTSCENES_SET_TIME_COMPRESSION, "set-time-compression\r\n" - "\tSets the time compression " + "\tSets the time compression and prevents it from being changed by the user. " "Takes 1 to 3 arguments...\r\n" "\t1:\tNew time compression (% of 1x)\r\n" "\t2:\tTime in ms for change to take\r\n" @@ -24381,11 +25211,12 @@ sexp_help_struct Sexp_help[] = { }, { OP_CUTSCENES_RESET_TIME_COMPRESSION, "reset-time-compression\r\n" - "\tResets the time compression; always call when done with set-time-compression " + "\tResets the time compression - that is to say, time compression is set back to 1x, " + "and the time compression controls are unlocked. Always call this when done with set-time-compression. " }, { OP_CUTSCENES_FORCE_PERSPECTIVE, "lock-perspective\r\n" - "\tPrevents or allows the player from changing the view mode " + "\tPrevents or allows the player from changing the view mode. " "Takes 1 or 2 arguments...\r\n" "\t1:\tTrue to lock the view mode, false to unlock it\r\n" "\t2:\tWhat view mode to lock; 0 for first-person, 1 for chase, 2 for external, 3 for top-down" @@ -24399,7 +25230,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_JUMP_NODE_SET_JUMPNODE_COLOR, "set-jumpnode-color\r\n" - "\tSets the color of a jump node " + "\tSets the color of a jump node. " "Takes 5 arguments...\r\n" "\t1:\tJump node to change color for\r\n" "\t2:\tRed value\r\n" @@ -24409,7 +25240,7 @@ sexp_help_struct Sexp_help[] = { }, { OP_JUMP_NODE_SET_JUMPNODE_MODEL, "set-jumpnode-model\r\n" - "\tSets the model of a jump node " + "\tSets the model of a jump node. " "Takes 3 arguments...\r\n" "\t1:\tJump node to change model for\r\n" "\t2:\tModel filename\r\n" @@ -24417,13 +25248,13 @@ sexp_help_struct Sexp_help[] = { }, { OP_JUMP_NODE_SHOW_JUMPNODE, "show-jumpnode\r\n" - "\tSets the model of a jump node " + "\tSets the model of a jump node. " "Takes 1 arguments..\r\n" "\t1:\tJump node to show\r\n" }, { OP_JUMP_NODE_HIDE_JUMPNODE, "hide-jumpnode\r\n" - "\tSets the model of a jump node " + "\tSets the model of a jump node. " "Takes 1 arguments...\r\n" "\t1:\tJump node to hide\r\n" }, diff --git a/code/parse/sexp.h b/code/parse/sexp.h index aa35046d5c..c5465b2ba0 100644 --- a/code/parse/sexp.h +++ b/code/parse/sexp.h @@ -13,6 +13,7 @@ #define _SEXP_H struct ship_subsys; +struct ship; // bumped to 30 by Goober5000 #define OPERATOR_LENGTH 30 // if this ever exceeds TOKEN_LENGTH, let JasonH know! @@ -112,6 +113,11 @@ struct ship_subsys; #define OPF_POST_EFFECT 67 // Hery - type of post-processing effect #define OPF_TARGET_PRIORITIES 68 // FUBAR - Target priority groups #define OPF_ARMOR_TYPES 69 // FUBAR - Armor type or +#define OPF_FONT 70 // Goober5000 - a FreeSpace font +#define OPF_HUD_ELEMENT 71 // A magic name of a specific HUD element +#define OPF_SOUND_ENVIRONMENT 72 // Goober5000 - one of EFX_presets, per Taylor +#define OPF_SOUND_ENVIRONMENT_OPTION 73 // Goober5000 - one of Taylor's options +#define OPF_EXPLOSION_OPTION 74 // Goober5000 // Operand return types #define OPR_NUMBER 1 // returns number @@ -225,6 +231,9 @@ struct ship_subsys; #define OP_STRING_EQUALS (0x000a | OP_CATEGORY_LOGICAL) #define OP_STRING_GREATER_THAN (0x000b | OP_CATEGORY_LOGICAL) #define OP_STRING_LESS_THAN (0x000c | OP_CATEGORY_LOGICAL) +#define OP_NOT_EQUAL (0x000d | OP_CATEGORY_LOGICAL) // Goober5000 +#define OP_GREATER_OR_EQUAL (0x000e | OP_CATEGORY_LOGICAL) // Goober5000 +#define OP_LESS_OR_EQUAL (0x000f | OP_CATEGORY_LOGICAL) // Goober5000 #define OP_GOAL_INCOMPLETE (0x0000 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) #define OP_GOAL_TRUE_DELAY (0x0001 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) @@ -262,12 +271,13 @@ struct ship_subsys; #define OP_TIME_WING_ARRIVED (0x0004 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) #define OP_TIME_WING_DEPARTED (0x0005 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) #define OP_MISSION_TIME (0x0006 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) -#define OP_TIME_DOCKED (0x0007 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) -#define OP_TIME_UNDOCKED (0x0008 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) +#define OP_MISSION_TIME_MSECS (0x0007 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) // Goober5000 +#define OP_TIME_DOCKED (0x0008 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) +#define OP_TIME_UNDOCKED (0x0009 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) #define OP_SHIELDS_LEFT (0x0000 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) #define OP_HITS_LEFT (0x0001 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) -#define OP_HITS_LEFT_SUBSYSTEM (0x0002 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) +#define OP_HITS_LEFT_SUBSYSTEM (0x0002 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // deprecated #define OP_SIM_HITS_LEFT (0x0003 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) #define OP_DISTANCE (0x0004 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) #define OP_DISTANCE_SUBSYSTEM (0x0005 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 @@ -345,6 +355,8 @@ struct ship_subsys; #define OP_IN_SEQUENCE (0x000a | OP_CATEGORY_CONDITIONAL) // Karajorma #define OP_VALIDATE_ARGUMENT (0x000b | OP_CATEGORY_CONDITIONAL) // Karajorma #define OP_DO_FOR_VALID_ARGUMENTS (0x000c | OP_CATEGORY_CONDITIONAL) // Karajorma +#define OP_INVALIDATE_ALL_ARGUMENTS (0x000d | OP_CATEGORY_CONDITIONAL) // Karajorma +#define OP_VALIDATE_ALL_ARGUMENTS (0x000e | OP_CATEGORY_CONDITIONAL) // Karajorma // sexpressions with side-effects @@ -457,7 +469,7 @@ struct ship_subsys; #define OP_CLOSE_SOUND_FROM_FILE (0x0064 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 #define OP_HUD_DISABLE (0x0065 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 #define OP_KAMIKAZE (0x0066 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian -#define OP_NOT_KAMIKAZE (0x0067 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian +#define OP_MISSION_SET_SUBSPACE (0x0067 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) #define OP_TURRET_TAGGED_SPECIFIC (0x0068 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak #define OP_TURRET_TAGGED_CLEAR_SPECIFIC (0x0069 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak #define OP_LOCK_ROTATING_SUBSYSTEM (0x006a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 @@ -492,7 +504,7 @@ struct ship_subsys; #define OP_CUTSCENES_SET_FOV (0x0085 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC #define OP_CUTSCENES_RESET_FOV (0x0086 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC #define OP_CUTSCENES_RESET_CAMERA (0x0087 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC -#define OP_CUTSCENES_SHOW_SUBTITLE (0x0088 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC +#define OP_CUTSCENES_SHOW_SUBTITLE (0x0088 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC / deprecated #define OP_CUTSCENES_SET_TIME_COMPRESSION (0x0089 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC #define OP_CUTSCENES_RESET_TIME_COMPRESSION (0x008a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC #define OP_CUTSCENES_FORCE_PERSPECTIVE (0x008b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC @@ -567,9 +579,16 @@ struct ship_subsys; #define OP_SET_VARIABLE_BY_INDEX (0x00cd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 #define OP_SET_POST_EFFECT (0x00ce | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Hery #define OP_TURRET_SET_OPTIMUM_RANGE (0x00cf | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR + #define OP_TURRET_SET_DIRECTION_PREFERENCE (0x00d0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR #define OP_TURRET_SET_TARGET_PRIORITIES (0x00d1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR #define OP_SET_ARMOR_TYPE (0x00d2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR +#define OP_CUTSCENES_SHOW_SUBTITLE_TEXT (0x00d3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 +#define OP_CUTSCENES_SHOW_SUBTITLE_IMAGE (0x00d4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 +#define OP_HUD_DISPLAY_GAUGE (0x00d5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) +#define OP_SET_SOUND_ENVIRONMENT (0x00d6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor +#define OP_UPDATE_SOUND_ENVIRONMENT (0x00d7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor +#define OP_SET_EXPLOSION_OPTION (0x00d8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 /* made obsolete by Goober5000 // debugging sexpressions @@ -735,8 +754,10 @@ char *CTEXT(int n); #define SEXP_VARIABLE_NOT_USED (1<<7) // (0x0080) #define SEXP_VARIABLE_BLOCK (1<<0) // (0x0001) +/* #define SEXP_VARIABLE_BLOCK_EXP (1<<1) // (0x0002) #define SEXP_VARIABLE_BLOCK_HIT (1<<2) // (0x0004) +*/ #define SEXP_VARIABLE_PLAYER_PERSISTENT (1<<3) // (0x0008) // Goober5000 - hopefully this should work and not conflict with anything @@ -832,6 +853,11 @@ char *CTEXT(int n); #define SEXP_CHECK_INVALID_PERSONA_NAME -139 #define SEXP_CHECK_INVALID_VARIABLE_TYPE -140 #define SEXP_CHECK_INVALID_SUBSYS_TYPE -141 +#define SEXP_CHECK_INVALID_FONT -142 +#define SEXP_CHECK_INVALID_HUD_ELEMENT -143 +#define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT -144 +#define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT_OPTION -145 +#define SEXP_CHECK_INVALID_EXPLOSION_OPTION -146 #define TRAINING_CONTEXT_SPEED (1<<0) #define TRAINING_CONTEXT_FLY_PATH (1<<1) @@ -900,6 +926,7 @@ extern int Num_sexp_nodes; extern sexp_node *Sexp_nodes; extern sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]; +extern sexp_variable Block_variables[MAX_SEXP_VARIABLES]; extern sexp_oper Operators[]; extern int Num_operators; @@ -988,10 +1015,9 @@ void sexp_variable_delete(int index); void sexp_variable_sort(); void sexp_fred_modify_variable(const char *text, const char *var_name, int index, int type); int sexp_add_variable(const char *text, const char *var_name, int type, int index=-1); -int sexp_variable_allocate_block(const char* block_name, int block_type); -void sexp_variable_condense_block(); -void sexp_variable_block_free(const char *ship_name, int start_index, int block_type); - +bool generate_special_explosion_block_variables(); +int num_block_variables(); +bool has_special_explosion_block_index(ship *shipp, int *index); // Karajorma void set_primary_ammo (int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1, bool update=true); @@ -1031,7 +1057,25 @@ extern int Num_submenus; //Outputs sexp.html file bool output_sexps(char *filepath); - void multi_sexp_eval(); +// Goober5000/Taylor +extern int Num_sound_environment_options; +extern char *Sound_environment_option[]; + +// Goober5000 +extern int Num_explosion_options; +extern char *Explosion_option[]; + +/** Global state variables for the hud-display-gauge sexp. +They all should be named Sexp_hud_display_*; +They all should follow the following symantics for the value of the +variable: +=0 don't show +=1 show until canceled +>1 timestamp when gauge should stop showing (set zero when expired) +\sa sexp_hud_display_warpout +*/ +extern int Sexp_hud_display_warpout; + #endif diff --git a/code/particle/particle.cpp b/code/particle/particle.cpp index d8b26245b3..347afc727f 100644 --- a/code/particle/particle.cpp +++ b/code/particle/particle.cpp @@ -263,7 +263,11 @@ void particle_move_all(float frametime) return; for (SCP_vector::iterator p = Particles.begin(); p != Particles.end(); ) { - p->age += frametime; + if (p->age == 0.0f) { + p->age = 0.00001f; + } else { + p->age += frametime; + } // if it's time expired, remove it if (p->age > p->max_life) { @@ -356,12 +360,21 @@ void particle_render_all() for (SCP_vector::iterator p = Particles.begin(); p != Particles.end(); ++p) { // skip back-facing particles (ripped from fullneb code) - if ( vm_vec_dot_to_point(&Eye_matrix.vec.fvec, &Eye_position, &p->pos) <= 0.0f ) { + // Wanderer - add support for attached particles + vec3d p_pos; + if (p->attached_objnum >= 0) { + vm_vec_unrotate(&p_pos, &p->pos, &Objects[p->attached_objnum].orient); + vm_vec_add2(&p_pos, &Objects[p->attached_objnum].pos); + } else { + p_pos = p->pos; + } + + if ( vm_vec_dot_to_point(&Eye_matrix.vec.fvec, &Eye_position, &p_pos) <= 0.0f ) { continue; } // calculate the alpha to draw at - alpha = get_current_alpha(&p->pos); + alpha = get_current_alpha(&p_pos); // if it's transparent then just skip it if (alpha <= 0.0f) { @@ -373,7 +386,7 @@ void particle_render_all() // if this is a tracer style particle, calculate tracer vectors if (p->tracer_length > 0.0f) { - ts = p->pos; + ts = p_pos; temp = p->velocity; vm_vec_normalize_quick(&temp); vm_vec_scale_add(&te, &ts, &temp, p->tracer_length); @@ -381,37 +394,17 @@ void particle_render_all() // don't bother rotating rotate = 0; } - // if this is an "attached" particle. move it - else if (p->attached_objnum >= 0) { - // offset the vector, and transform to view coords - // vm_vec_add(&te, &Objects[p->attached_objnum].pos, &p->pos); - - vm_vec_unrotate(&temp, &p->pos, &Objects[p->attached_objnum].orient); - vm_vec_add2(&temp, &Objects[p->attached_objnum].pos); - - flags = g3_rotate_vertex(&pos, &temp); - - if (flags) { - continue; - } - - if (!Cmdline_nohtl) - g3_transfer_vertex(&pos, &temp); - - // don't bother rotating again - rotate = 0; - } // rotate the vertex if (rotate) { - flags = g3_rotate_vertex( &pos, &p->pos ); + flags = g3_rotate_vertex( &pos, &p_pos ); if ( flags ) { continue; } if (!Cmdline_nohtl) - g3_transfer_vertex(&pos, &p->pos); + g3_transfer_vertex(&pos, &p_pos); } // pct complete for the particle @@ -429,7 +422,7 @@ void particle_render_all() if (p->type == PARTICLE_DEBUG) { gr_set_color( 255, 0, 0 ); - g3_draw_sphere_ez( &p->pos, p->radius ); + g3_draw_sphere_ez( &p_pos, p->radius ); } else { framenum = p->optional_data; diff --git a/code/physics/physics.cpp b/code/physics/physics.cpp index e627451519..0c1597dc7b 100644 --- a/code/physics/physics.cpp +++ b/code/physics/physics.cpp @@ -687,7 +687,20 @@ void physics_read_flying_controls( matrix * orient, physics_info * pi, control_i if ( pi->flags & PF_REDUCED_DAMP ) { ramp_time_const *= reduced_damp_ramp_time_expansion; } - pi->prev_ramp_vel.xyz.z = velocity_ramp( pi->prev_ramp_vel.xyz.z, goal_vel.xyz.z, ramp_time_const, sim_time); + pi->prev_ramp_vel.xyz.z = velocity_ramp(pi->prev_ramp_vel.xyz.z, goal_vel.xyz.z, ramp_time_const, sim_time); + + //Deternine the current dynamic glide cap, and ramp to it + //This is outside the normal "glide" block since we want the cap to adjust whether or not the ship is in glide mode + float dynamic_glide_cap_goal = 0.0; + if (pi->flags & PF_AFTERBURNER_ON) { + dynamic_glide_cap_goal = ( goal_vel.xyz.z >= 0.0f ) ? pi->afterburner_max_vel.xyz.z : pi->afterburner_max_reverse_vel; + } + else { + //Use the maximum value in X, Y, and Z (including overclocking) + dynamic_glide_cap_goal = MAX(MAX(pi->max_vel.xyz.x,pi->max_vel.xyz.y), pi->max_vel.xyz.z); + } + pi->cur_glide_cap = velocity_ramp(pi->cur_glide_cap, dynamic_glide_cap_goal, ramp_time_const, sim_time); + if ( pi->flags & PF_GLIDING ) { pi->desired_vel = pi->vel; @@ -699,19 +712,10 @@ void physics_read_flying_controls( matrix * orient, physics_info * pi, control_i //Having pi->glide_cap == 0 means we're using a dynamic glide cap float curGlideCap = 0.0f; - if (pi->glide_cap == 0.0f) { - //For dynamic glide capping, normal flight and afterburner have separate glide caps - if (pi->flags & PF_AFTERBURNER_ON) { - curGlideCap = pi->afterburner_max_vel.xyz.z; - } - else { - //Take the maximum value in X, Y, and Z (including overclocking) - curGlideCap = MAX(MAX(pi->max_vel.xyz.x,pi->max_vel.xyz.y), pi->max_vel.xyz.z); - } - } - else { + if (pi->glide_cap == 0.0f) + curGlideCap = pi->cur_glide_cap; + else curGlideCap = pi->glide_cap; - } //If we're near the (positive) glide cap, decay velocity where we aren't thrusting //This is a hack, but makes the flight feel a lot smoother diff --git a/code/physics/physics.h b/code/physics/physics.h index a805172afd..9255dcc22d 100644 --- a/code/physics/physics.h +++ b/code/physics/physics.h @@ -85,8 +85,8 @@ typedef struct physics_info { int shockwave_decay; // timestamp used to control how long ship affected after hit by shockwave int reduced_damp_decay; // timestamp used to control how long ship ship has reduced damp physics - vec3d glide_saved_vel; //WMC - the key variable for gliding. Saves the orientation that velocity will be applied on. float glide_cap; //Backslash - for 'newtonian'-style gliding, the cap on velocity (so that something can't accelerate to ridiculous speeds... unless allowed to) + float cur_glide_cap; //SUSHI: Used for dynamic glide cap, so we can use the ramping function on the glide cap float glide_accel_mult; //SUSHI: The acceleration multiplier for glide mode. A value < 0 means use glide ramping instead bool use_newtonian_damp; //SUSHI: Whether or not to use newtonian dampening float afterburner_max_reverse_vel; //SparK: This is the reverse afterburners top speed vector diff --git a/code/playerman/playercontrol.cpp b/code/playerman/playercontrol.cpp index a5ecd1df96..935f314587 100644 --- a/code/playerman/playercontrol.cpp +++ b/code/playerman/playercontrol.cpp @@ -87,7 +87,9 @@ void chase_angles_to_value(angles *ap, angles *bp, int scale) if ((ap->p == bp->p) && (ap->h == bp->h)) return; - sk = 1.0f - scale*flFrametime; + sk = 1.0f - scale*flRealframetime; + + CLAMP(sk, 0.0f, 1.0f); delta.p = ap->p - bp->p; delta.h = ap->h - bp->h; @@ -629,7 +631,11 @@ void read_keyboard_controls( control_info * ci, float frame_time, physics_info * if (!(Objects[Player->objnum].phys_info.flags & PF_GLIDING)) { //pmax_speed = Ship_info[Ships[Player_obj->instance].ship_info_index].max_speed; pmax_speed = Ships[Player_obj->instance].current_max_speed; - ci->forward_cruise_percent = (tspeed / pmax_speed) * 100.0f; + if (pmax_speed > 0.0f) { + ci->forward_cruise_percent = (tspeed / pmax_speed) * 100.0f; + } else { + ci->forward_cruise_percent = 0.0f; + } override_analog_throttle = 1; //if ( ci->forward_cruise_percent > 100.0f ) //HUD_printf ("Cannot travel that fast. Setting throttle to full."); @@ -757,7 +763,7 @@ void read_keyboard_controls( control_info * ci, float frame_time, physics_info * ci->fire_secondary_count++; // if we're a multiplayer client, set our accum bits now - if((Game_mode & GM_MULTIPLAYER) && (Net_player != NULL) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER)){ + if( MULTIPLAYER_CLIENT && (Net_player != NULL)){ Net_player->s_info.accum_buttons |= OOC_FIRE_SECONDARY; } } diff --git a/code/pngutils/pngutils.cpp b/code/pngutils/pngutils.cpp index 0322cd2e82..e7c0879d44 100644 --- a/code/pngutils/pngutils.cpp +++ b/code/pngutils/pngutils.cpp @@ -100,7 +100,7 @@ int png_read_header(char *real_filename, CFILE *img_cfp, int *w, int *h, int *bp { mprintf(("png_read_header: error creating info struct\n")); cfclose(png_file); - png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, NULL, NULL); return PNG_ERROR_READING; } @@ -108,7 +108,7 @@ int png_read_header(char *real_filename, CFILE *img_cfp, int *w, int *h, int *bp { mprintf(("png_read_header: something went wrong\n")); /* Free all of the memory associated with the png_ptr and info_ptr */ - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); cfclose(png_file); /* If we get here, we had a problem reading the file */ return PNG_ERROR_READING; @@ -128,7 +128,7 @@ int png_read_header(char *real_filename, CFILE *img_cfp, int *w, int *h, int *bp png_file = NULL; } - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); return PNG_ERROR_NONE; } @@ -183,7 +183,7 @@ int png_read_bitmap(char *real_filename, ubyte *image_data, ubyte *bpp, int dest { mprintf(("png_read_bitmap: info_ptr went wrong\n")); cfclose(png_file); - png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, NULL, NULL); return PNG_ERROR_READING; } @@ -191,7 +191,7 @@ int png_read_bitmap(char *real_filename, ubyte *image_data, ubyte *bpp, int dest { mprintf(("png_read_bitmap: something went wrong\n")); /* Free all of the memory associated with the png_ptr and info_ptr */ - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); cfclose(png_file); /* If we get here, we had a problem reading the file */ return PNG_ERROR_READING; @@ -199,7 +199,7 @@ int png_read_bitmap(char *real_filename, ubyte *image_data, ubyte *bpp, int dest png_set_read_fn(png_ptr, &png_file, png_scp_read_data); - png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_BGR | PNG_TRANSFORM_EXPAND, png_voidp_NULL); + png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_BGR | PNG_TRANSFORM_EXPAND, NULL); len = png_get_rowbytes(png_ptr, info_ptr); row_pointers = png_get_rows(png_ptr, info_ptr); @@ -212,7 +212,7 @@ int png_read_bitmap(char *real_filename, ubyte *image_data, ubyte *bpp, int dest memcpy(&image_data[i * len], row_pointers[i], len); } - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); cfclose(png_file); return PNG_ERROR_NONE; diff --git a/code/popup/popupdead.cpp b/code/popup/popupdead.cpp index 9c6baa79b8..b4d42ba18e 100644 --- a/code/popup/popupdead.cpp +++ b/code/popup/popupdead.cpp @@ -412,29 +412,10 @@ int popupdead_do_frame(float frametime) { int k, choice; -/* - if (Popupdead_skip_active) { - // do the skip mission popup, and thats all - if (popupdead_skip_do_frame() == 1) { - return 2; // fake the "go to briefing" choice - } else { - return -1; // fake no choice - } - } -*/ if ( !Popupdead_active ) { return -1; } - // don't let dude skip 3-09. hack. - if(Game_mode & GM_CAMPAIGN_MODE){ - if((Campaign.current_mission >= 0) && (Campaign.current_mission < MAX_CAMPAIGN_MISSIONS)){ - if ((Campaign.missions[Campaign.current_mission].name != NULL) && !stricmp(Campaign.missions[Campaign.current_mission].name, "sm3-09.fs2")) { - Popupdead_skip_already_shown = 1; - } - } - } - // maybe show skip mission popup if ((!Popupdead_skip_already_shown) && (Player->show_skip_popup) && (Game_mode & GM_NORMAL) && (Game_mode & GM_CAMPAIGN_MODE) && (Player->failures_this_session >= PLAYER_MISSION_FAILURE_LIMIT)) { int popup_choice = popup(0, 3, XSTR("Do Not Skip This Mission", 1473), diff --git a/code/radar/radarorb.cpp b/code/radar/radarorb.cpp index b563841e65..dd3d0d6fe3 100644 --- a/code/radar/radarorb.cpp +++ b/code/radar/radarorb.cpp @@ -312,7 +312,11 @@ void radar_plot_object_orb( object *objp ) return; } - vm_vec_normalize(&pos); + if (IS_VEC_NULL_SQ_SAFE(&pos)) { + vm_vec_make(&pos, 1.0f, 0.0f, 0.0f); + } else { + vm_vec_normalize(&pos); + } float scale = dist / Radar_bright_range; if (scale > 1.25f) scale = 1.25f; diff --git a/code/ship/afterburner.cpp b/code/ship/afterburner.cpp index c037b6d9c2..1575dd7d47 100644 --- a/code/ship/afterburner.cpp +++ b/code/ship/afterburner.cpp @@ -87,13 +87,6 @@ void afterburners_start(object *objp) Assert( shipp->ship_info_index >= 0 && shipp->ship_info_index < Num_ship_classes ); sip = &Ship_info[shipp->ship_info_index]; - // When the ship has no afterburner, leave without doing anything. - // Caller should have tested ship equipment before deciding to start afterburners. - if ( !(sip->flags & SIF_AFTERBURNER) ) { - nprintf(("Warning","Ship type %s does not have afterburner capability\n", sip->name)); - return; - } - // bail if afterburners are locked if (shipp->flags2 & SF2_AFTERBURNER_LOCKED) { return; @@ -121,6 +114,10 @@ void afterburners_start(object *objp) if (objp->phys_info.flags & PF_BOOSTER_ON) return; + if ( !(sip->flags & SIF_AFTERBURNER) ) { + return; + } + // Check if there is enough afterburner fuel if ( (shipp->afterburner_fuel < MIN_AFTERBURNER_FUEL_TO_ENGAGE) && !MULTIPLAYER_CLIENT ) { if ( objp == Player_obj ) { diff --git a/code/ship/ship.cpp b/code/ship/ship.cpp index c3698dea95..db9bbd7e02 100644 --- a/code/ship/ship.cpp +++ b/code/ship/ship.cpp @@ -565,6 +565,8 @@ void parse_engine_wash(bool replace) char *Warp_types[] = { "Default", + "Knossos", + "Babylon5", "Galactica", "Homeworld", "Hyperspace", @@ -1170,6 +1172,8 @@ int parse_ship_values(ship_info* sip, bool isTemplate, bool first_time, bool rep if (valid) strcpy_s(sip->cockpit_pof_file, temp); + else + WarningEx(LOCATION, "Ship %s\nCockpit POF file \"%s\" invalid!", sip->name, temp); } if(optional_string( "+Cockpit offset:" )) { @@ -1192,6 +1196,8 @@ int parse_ship_values(ship_info* sip, bool isTemplate, bool first_time, bool rep if (valid) strcpy_s(sip->pof_file, temp); + else + WarningEx(LOCATION, "Ship %s\nPOF file \"%s\" invalid!", sip->name, temp); } // ship class texture replacement - Goober5000 and taylor @@ -1253,6 +1259,8 @@ int parse_ship_values(ship_info* sip, bool isTemplate, bool first_time, bool rep if (valid) strcpy_s(sip->pof_file_hud, temp); + else + WarningEx(LOCATION, "Ship \"%s\" POF target file \"%s\" invalid!", sip->name, temp); } // optional hud target LOD if not using special hud model @@ -2590,6 +2598,12 @@ strcpy_s(parse_error_text, temp_error); iff_data[0] = iff_lookup(iff_1); iff_data[1] = iff_lookup(iff_2); + if (iff_data[0] == -1) + WarningEx(LOCATION, "Ship %s\nIFF colour seen by \"%s\" invalid!", sip->name, iff_1); + + if (iff_data[1] == -1) + WarningEx(LOCATION, "Ship %s\nIFF colour when IFF is \"%s\" invalid!", sip->name, iff_2); + // Set the color required_string("+As Color:"); stuff_int_list(iff_color_data, 3, RAW_INTEGER_TYPE); @@ -2607,8 +2621,8 @@ strcpy_s(parse_error_text, temp_error); override_strings = true; } - for(i = 0; i < num_groups; i++) { - for(j = 0; j < num_strings; j++) { + for(j = 0; j < num_strings; j++) { + for(i = 0; i < num_groups; i++) { if ( !stricmp(target_group_strings[j].c_str(), Ai_tp_list[i].name) ) { //so now the string from the list above as well as the ai priority group name match //clear it if override has been set @@ -2620,10 +2634,16 @@ strcpy_s(parse_error_text, temp_error); //find the index number of the current ship info type if (Ship_info[k].name == sip->name) { Ai_tp_list[i].ship_class.push_back(k); + break; } } + // found something, try next string + break; } } + if (i == num_groups) { + Warning(LOCATION,"Unidentified priority group '%s' set for ship class '%s'\n", target_group_strings[j].c_str(), sip->name); + } } } @@ -2768,6 +2788,9 @@ strcpy_s(parse_error_text, temp_error); if(optional_string("$Armor Type:")) { stuff_string(buf, F_NAME, SHIP_MULTITEXT_LENGTH); sp->armor_type_idx = armor_type_get_idx(buf); + + if (sp->armor_type_idx == -1) + WarningEx(LOCATION, "Ship %s, subsystem %s\nInvalid armor type %s!", sip->name, sp->subobj_name, buf); } // Get default primary bank weapons @@ -2803,6 +2826,9 @@ strcpy_s(parse_error_text, temp_error); stuff_string(name_tmp, F_NAME, sizeof(name_tmp)); // get and set index sp->engine_wash_pointer = get_engine_wash_pointer(name_tmp); + + if(sp->engine_wash_pointer == NULL) + WarningEx(LOCATION,"Invalid engine wash name %s specified for subsystem %s in ship class %s", name_tmp, sp->subobj_name, sip->name); } parse_sound("$AliveSnd:", &sp->alive_snd, sp->subobj_name); @@ -2875,8 +2901,12 @@ strcpy_s(parse_error_text, temp_error); if ( !stricmp(Ai_tp_list[j].name, tgt_priorities[i].c_str())) { sp->target_priority[i] = j; sp->num_target_priorities++; + break; } } + if (j == num_groups) { + Warning(LOCATION, "Unidentified target priority '%s' set for\nsubsystem '%s' in ship class '%s'.", tgt_priorities[i].c_str(), sp->subobj_name, sip->name); + } } } @@ -3206,8 +3236,8 @@ void parse_ship_type() override_strings = true; } - for(i = 0; i < num_groups; i++) { - for(j = 0; j < num_strings; j++) { + for(j = 0; j < num_strings; j++) { + for(i = 0; i < num_groups; i++) { if ( !stricmp(target_group_strings[j].c_str(), Ai_tp_list[i].name) ) { //so now the string from the list above as well as the ai priority group name match //clear it if override has been set @@ -3217,8 +3247,12 @@ void parse_ship_type() } //find the index number of the current ship info type Ai_tp_list[i].ship_type.push_back(ship_type_name_lookup(name_buf)); + break; } } + if (i == num_groups) { + Warning(LOCATION,"Unidentified priority group '%s' set for objecttype '%s'\n", target_group_strings[j].c_str(), stp->name); + } } } @@ -3282,6 +3316,10 @@ void parse_ship_type() stuff_boolean_flag(&stp->weapon_bools, STI_WEAP_NO_HUGE_IMPACT_EFF); } + if(optional_string("$Don't display class in briefing:")) { + stuff_boolean_flag(&stp->hud_bools, STI_HUD_NO_CLASS_DISPLAY); + } + if(optional_string("$Fog:")) { if(optional_string("+Start dist:")) { @@ -3342,7 +3380,6 @@ void parse_ship_type() if(optional_string("+Ignored on cripple by:")) { stuff_string_list(stp->ai_cripple_ignores_temp); } - } if(optional_string("$Explosion Animations:")) @@ -3631,6 +3668,24 @@ void ship_parse_post_cleanup() sip->flags2 |= SIF2_GENERATE_HUD_ICON; } } + + // check also target groups here + int n_tgt_groups = Ai_tp_list.size(); + + if (n_tgt_groups > 0) { + for(i = 0; i < n_tgt_groups; i++) { + if (!(Ai_tp_list[i].obj_flags || Ai_tp_list[i].sif_flags || Ai_tp_list[i].sif2_flags || Ai_tp_list[i].wif2_flags || Ai_tp_list[i].wif_flags)) { + //had none of these, check next + if ((Ai_tp_list[i].obj_type == -1)) { + //didn't have this one + if (!(Ai_tp_list[i].ship_class.size() || Ai_tp_list[i].ship_type.size() || Ai_tp_list[i].weapon_class.size())) { + // had nothing - time to issue a warning + Warning(LOCATION, "Target priority group '%s' had no targeting rules issued for it.\n", Ai_tp_list[i].name); + } + } + } + } + } } // Called once at the beginning of the game to parse ships.tbl and stuff the Ship_info[] @@ -3999,6 +4054,7 @@ void physics_ship_init(object *objp) if ( (pi->max_vel.xyz.x > 0.000001f) || (pi->max_vel.xyz.y > 0.000001f) ) pi->flags |= PF_SLIDE_ENABLED; + pi->cur_glide_cap = pi->max_vel.xyz.z; //Init dynamic glide cap stuff to the max vel. if ( sinfo->glide_cap > 0.000001f || sinfo->glide_cap < -0.000001f ) //Backslash pi->glide_cap = sinfo->glide_cap; else @@ -4075,6 +4131,8 @@ void ship_set_warp_effects(object *objp, ship_info *sip) switch(sip->warpin_type) { case WT_DEFAULT: + case WT_KNOSSOS: + case WT_DEFAULT_THEN_KNOSSOS: shipp->warpin_effect = new WE_Default(objp, WD_WARP_IN); break; case WT_IN_PLACE_ANIM: @@ -4096,6 +4154,8 @@ void ship_set_warp_effects(object *objp, ship_info *sip) switch(sip->warpout_type) { case WT_DEFAULT: + case WT_KNOSSOS: + case WT_DEFAULT_THEN_KNOSSOS: shipp->warpout_effect = new WE_Default(objp, WD_WARP_OUT); break; case WT_IN_PLACE_ANIM: @@ -4191,8 +4251,6 @@ void ship_set(int ship_index, int objnum, int ship_type) shipp->score = 0; shipp->assist_score_pct = 0; shipp->escort_priority = 0; - shipp->special_exp_index = -1; - shipp->special_hitpoint_index = -1; shipp->num_hits = 0; shipp->flags = 0; shipp->flags2 = 0; @@ -4386,11 +4444,9 @@ void ship_set(int ship_index, int objnum, int ship_type) physics_ship_init(objp); if (Fred_running) { shipp->ship_max_shield_strength = 100.0f; - shipp->ship_max_hull_strength = 100.0f; objp->shield_quadrant[0] = 100.0f; } else { shipp->ship_max_shield_strength = sip->max_shield_strength; - shipp->ship_max_hull_strength = sip->max_hull_strength; shield_set_strength(objp, shipp->ship_max_shield_strength); } @@ -4515,13 +4571,6 @@ void ship_set(int ship_index, int objnum, int ship_type) shipp->secondary_point_reload_pct[i][k] = 1.0f; } } - for(i = 0; isecondary_bank_weapons[i]].fire_wait == 0.0){ - shipp->reload_time[i] = 1.0f; - }else{ - shipp->reload_time[i] = 1.0f/Weapon_info[swp->secondary_bank_weapons[i]].fire_wait; - } - } for(i = 0; iprimary_rotate_rate[i] = 0.0f; shipp->primary_rotate_ang[i] = 0.0f; @@ -4849,6 +4898,8 @@ int subsys_set(int objnum, int ignore_subsys_info) ship_system->weapons.current_primary_bank = -1; ship_system->weapons.current_secondary_bank = -1; + ship_system->next_aim_pos_time = 0; + // Make turret flag checks and warnings @@ -5577,23 +5628,29 @@ void ship_render(object * obj) bank = &(model_get(sip->model_num))->missile_banks[i]; - num_secondaries_rendered = 0; - - for(k = 0; k < bank->num_slots; k++) - { - secondary_weapon_pos = bank->pnt[k]; - - if (num_secondaries_rendered >= shipp->weapons.secondary_bank_ammo[i]) - break; - - if(shipp->secondary_point_reload_pct[i][k] <= 0.0) - continue; + if (Weapon_info[swp->secondary_bank_weapons[i]].wi_flags2 & WIF2_EXTERNAL_WEAPON_LNCH) { + for(k = 0; k < bank->num_slots; k++) { + model_render(Weapon_info[swp->primary_bank_weapons[i]].external_model_num, &vmd_identity_matrix, &bank->pnt[k], render_flags); + } + } else { + num_secondaries_rendered = 0; - num_secondaries_rendered++; - - vm_vec_scale_add2(&secondary_weapon_pos, &vmd_z_vector, -(1.0f-shipp->secondary_point_reload_pct[i][k]) * model_get(Weapon_info[swp->secondary_bank_weapons[i]].external_model_num)->rad); + for(k = 0; k < bank->num_slots; k++) + { + secondary_weapon_pos = bank->pnt[k]; - model_render(Weapon_info[swp->secondary_bank_weapons[i]].external_model_num, &vmd_identity_matrix, &secondary_weapon_pos, render_flags); + if (num_secondaries_rendered >= shipp->weapons.secondary_bank_ammo[i]) + break; + + if(shipp->secondary_point_reload_pct[i][k] <= 0.0) + continue; + + num_secondaries_rendered++; + + vm_vec_scale_add2(&secondary_weapon_pos, &vmd_z_vector, -(1.0f-shipp->secondary_point_reload_pct[i][k]) * model_get(Weapon_info[swp->secondary_bank_weapons[i]].external_model_num)->rad); + + model_render(Weapon_info[swp->secondary_bank_weapons[i]].external_model_num, &vmd_identity_matrix, &secondary_weapon_pos, render_flags); + } } } g3_done_instance(true); @@ -6214,7 +6271,7 @@ void ship_blow_up_area_apply_blast( object *exp_objp) Assert( (shipp != NULL) && (sip != NULL) ); - if ((exp_objp->hull_strength <= KAMIKAZE_HULL_ON_DEATH) && (Ai_info[Ships[exp_objp->instance].ai_index].ai_flags & AIF_KAMIKAZE) && (shipp->special_exp_index < 0)) { + if ((exp_objp->hull_strength <= KAMIKAZE_HULL_ON_DEATH) && (Ai_info[Ships[exp_objp->instance].ai_index].ai_flags & AIF_KAMIKAZE) && (shipp->special_exp_damage == -1)) { float override = Ai_info[shipp->ai_index].kamikaze_damage; inner_rad = exp_objp->radius*2.0f; @@ -6223,19 +6280,12 @@ void ship_blow_up_area_apply_blast( object *exp_objp) max_blast = override * 5.0f; shockwave_speed = 100.0f; } else { - if (shipp->special_exp_index != -1) { - int start = shipp->special_exp_index; - int propagates; - inner_rad = (float) atoi(Sexp_variables[start+INNER_RAD].text); - outer_rad = (float) atoi(Sexp_variables[start+OUTER_RAD].text); - max_damage = (float) atoi(Sexp_variables[start+DAMAGE].text); - max_blast = (float) atoi(Sexp_variables[start+BLAST].text); - propagates = atoi(Sexp_variables[start+PROPAGATE].text); - if (propagates) { - shockwave_speed = (float) atoi(Sexp_variables[start+SHOCK_SPEED].text); - } else { - shockwave_speed = 0.0f; - } + if (shipp->use_special_explosion) { + inner_rad = (float)shipp->special_exp_inner; + outer_rad = (float)shipp->special_exp_outer; + max_damage = (float)shipp->special_exp_damage; + max_blast = (float)shipp->special_exp_blast; + shockwave_speed = (float)shipp->special_exp_shockwave_speed; } else { inner_rad = sip->shockwave.inner_rad; outer_rad = sip->shockwave.outer_rad; @@ -7511,7 +7561,7 @@ void ship_process_post(object * obj, float frametime) // Do AI. // for multiplayer people. return here if in multiplay and not the host - if ( (Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) ) { + if ( MULTIPLAYER_CLIENT ) { model_anim_handle_multiplayer( &Ships[num] ); return; } @@ -8179,6 +8229,7 @@ void ship_model_change(int n, int ship_type) // void change_ship_type(int n, int ship_type, int by_sexp) { + int i; ship_info *sip; ship_info *sip_orig; ship *sp; @@ -8199,7 +8250,7 @@ void change_ship_type(int n, int ship_type, int by_sexp) if (by_sexp) { // hull - if (sp->special_hitpoint_index != -1) { + if (sp->special_hitpoints) { hull_pct = objp->hull_strength / sp->ship_max_hull_strength; } else { Assert( Ship_info[sp->ship_info_index].max_hull_strength > 0.0f ); @@ -8207,7 +8258,7 @@ void change_ship_type(int n, int ship_type, int by_sexp) } // shield - if (sp->special_hitpoint_index != -1) { + if (sp->special_shield > 0) { shield_pct = shield_get_strength(objp) / sp->ship_max_shield_strength; } else if (Ship_info[sp->ship_info_index].max_shield_strength > 0.0f) { shield_pct = shield_get_strength(objp) / Ship_info[sp->ship_info_index].max_shield_strength; @@ -8263,8 +8314,8 @@ void change_ship_type(int n, int ship_type, int by_sexp) sp->ship_max_hull_strength = 100.0f; objp->hull_strength = 100.0f; } else { - if (sp->special_hitpoint_index != -1) { - sp->ship_max_hull_strength = (float) atoi(Sexp_variables[sp->special_hitpoint_index+HULL_STRENGTH].text); + if (sp->special_hitpoints > 0) { + sp->ship_max_hull_strength = (float)sp->special_hitpoints > 0; } else { sp->ship_max_hull_strength = sip->max_hull_strength; } @@ -8279,8 +8330,8 @@ void change_ship_type(int n, int ship_type, int by_sexp) sp->ship_max_shield_strength = 100.0f; objp->shield_quadrant[0] = 100.0f; } else { - if (sp->special_hitpoint_index != -1) { - sp->ship_max_shield_strength = (float) atoi(Sexp_variables[sp->special_hitpoint_index+SHIELD_STRENGTH].text); + if (sp->special_shield >= 0) { + sp->ship_max_shield_strength = (float)sp->special_shield; } else { sp->ship_max_shield_strength = sip->max_shield_strength; } @@ -8343,7 +8394,6 @@ void change_ship_type(int n, int ship_type, int by_sexp) // above removed by Goober5000 in favor of new ship_set_new_ai_class function :) ship_set_new_ai_class(n, sip->ai_class); - model_anim_set_initial_states(sp); //====================================================== @@ -8399,15 +8449,7 @@ void change_ship_type(int n, int ship_type, int by_sexp) swp->current_secondary_bank = 0; } -/* - Goober5000 (4/17/2005) - I'm commenting this out for the time being; it looks like a whole bunch of unneeded - code. It should be (and probably is) handled elsewhere, like ship_set or ship_create or something. Contact - me if you want to discuss this. - - ship_weapon *swp; - swp = &sp->weapons; - int i; - + // Bobboau's animation fixup for( i = 0; iprimary_animation_position[i] = false; } @@ -8415,15 +8457,6 @@ void change_ship_type(int n, int ship_type, int by_sexp) swp->secondary_animation_position[i] = false; } model_anim_set_initial_states(sp); - - for(i = 0; isecondary_bank_weapons[i]].fire_wait == 0.0){ - sp->reload_time[i] = 1.0f; - }else{ - sp->reload_time[i] = 1.0f/Weapon_info[swp->secondary_bank_weapons[i]].fire_wait; - } - } -*/ } #ifndef NDEBUG @@ -9230,6 +9263,14 @@ int ship_fire_primary(object * obj, int stream_weapons, int force) //mprintf(("I am going to fire a weapon %d times, from %d points, the last point fired was %d, and that will be point %d\n",numtimes,points,shipp->last_fired_point[bank_to_fire],shipp->last_fired_point[bank_to_fire]%num_slots)); for ( w = 0; w < numtimes; w++ ) { + polymodel *weapon_model = NULL; + if(winfo_p->external_model_num >= 0) + weapon_model = model_get(winfo_p->external_model_num); + + if (weapon_model) + if ((weapon_model->n_guns <= swp->external_model_fp_counter[bank_to_fire]) || (swp->external_model_fp_counter[bank_to_fire] < 0)) + swp->external_model_fp_counter[bank_to_fire] = 0; + for ( j = 0; j < points; j++ ) { int pt; //point if (winfo_p->wi_flags2 & WIF2_CYCLE){ @@ -9243,19 +9284,21 @@ int ship_fire_primary(object * obj, int stream_weapons, int force) } int sub_shots = 1; - polymodel *weapon_model = NULL; - if(winfo_p->external_model_num >= 0){ - weapon_model = model_get(winfo_p->external_model_num); - // Use 0 instead of bank_to_fire as index when checking the number of external weapon model firingpoints - if (weapon_model->n_guns) + // Use 0 instead of bank_to_fire as index when checking the number of external weapon model firingpoints + if (weapon_model && weapon_model->n_guns) + if (!(winfo_p->wi_flags2 & WIF2_EXTERNAL_WEAPON_FP)) sub_shots = weapon_model->gun_banks[0].num_slots; - } for(int s = 0; sgun_banks[bank_to_fire].pnt[pt]; // Use 0 instead of bank_to_fire as index to external weapon model firingpoints - if (weapon_model && weapon_model->n_guns) - vm_vec_add2(&pnt, &weapon_model->gun_banks[0].pnt[s]); + if (weapon_model && weapon_model->n_guns) { + if (winfo_p->wi_flags2 & WIF2_EXTERNAL_WEAPON_FP) { + vm_vec_add2(&pnt, &weapon_model->gun_banks[0].pnt[swp->external_model_fp_counter[bank_to_fire]]); + } else { + vm_vec_add2(&pnt, &weapon_model->gun_banks[0].pnt[s]); + } + } vm_vec_unrotate(&gun_point, &pnt, &obj->orient); vm_vec_add(&firing_pos, &gun_point, &obj->pos); @@ -9264,8 +9307,7 @@ int ship_fire_primary(object * obj, int stream_weapons, int force) if (!(sip->flags2 & SIF2_GUN_CONVERGENCE)) { if ((sip->aiming_flags & AIM_FLAG_AUTOAIM) && - aip->target_objnum != -1 && - Players[Player_num].lead_indicator_active == 1) + aip->target_objnum != -1) { // Fire weapon in target direction vec3d target_position, target_velocity_vec, predicted_target_pos; @@ -9283,6 +9325,9 @@ int ship_fire_primary(object * obj, int stream_weapons, int force) } target_velocity_vec = Objects[aip->target_objnum].phys_info.vel; + if (The_mission.ai_profile->flags & AIPF_USE_ADDITIVE_WEAPON_VELOCITY) + vm_vec_sub2(&target_velocity_vec, &obj->phys_info.vel); + dist_to_target = vm_vec_dist_quick(&target_position, &firing_pos); time_to_target = 0.0f; @@ -9448,6 +9493,7 @@ int ship_fire_primary(object * obj, int stream_weapons, int force) shipp->last_fired_point[bank_to_fire] = (shipp->last_fired_point[bank_to_fire] + 1) % num_slots; } } + swp->external_model_fp_counter[bank_to_fire]++; // shipp->last_fired_point[bank_to_fire] = (shipp->last_fired_point[bank_to_fire] + 1) % num_slots; } } @@ -10057,6 +10103,24 @@ int ship_fire_secondary( object *obj, int allow_swarm ) } shipp->secondary_point_reload_pct[bank][pnt_index] = 0.0f; pnt = pm->missile_banks[bank].pnt[pnt_index++]; + + polymodel *weapon_model = NULL; + if(wip->external_model_num >= 0){ + weapon_model = model_get(wip->external_model_num); + } + + if (weapon_model && weapon_model->n_guns) { + int external_bank = bank + MAX_SHIP_PRIMARY_BANKS; + if (wip->wi_flags2 & WIF2_EXTERNAL_WEAPON_FP) { + if ((weapon_model->n_guns <= swp->external_model_fp_counter[external_bank]) || (swp->external_model_fp_counter[external_bank] < 0)) + swp->external_model_fp_counter[external_bank] = 0; + vm_vec_add2(&pnt, &weapon_model->gun_banks[0].pnt[swp->external_model_fp_counter[external_bank]]); + swp->external_model_fp_counter[external_bank]++; + } else { + // make it use the 0 index slot + vm_vec_add2(&pnt, &weapon_model->gun_banks[0].pnt[0]); + } + } vm_vec_unrotate(&missile_point, &pnt, &obj->orient); vm_vec_add(&firing_pos, &missile_point, &obj->pos); @@ -13158,7 +13222,7 @@ char *ship_return_orders(char *outbuf, ship *sp) ai_info *aip; ai_goal *aigp; char *order_text; - char temp_name[256]; + char ship_name[NAME_LENGTH]; Assert(sp->ai_index >= 0); aip = &Ai_info[sp->ai_index]; @@ -13176,8 +13240,8 @@ char *ship_return_orders(char *outbuf, ship *sp) strcpy(outbuf, order_text); if ( aigp->ship_name ) { - strcpy_s(temp_name, aigp->ship_name); - end_string_at_first_hash_symbol(temp_name); + strcpy_s(ship_name, aigp->ship_name); + end_string_at_first_hash_symbol(ship_name); } switch (aigp->ai_mode ) { @@ -13185,7 +13249,7 @@ char *ship_return_orders(char *outbuf, ship *sp) case AI_GOAL_GUARD_WING: case AI_GOAL_CHASE_WING: if ( aigp->ship_name ) { - strcat(outbuf, temp_name); + strcat(outbuf, ship_name); strcat(outbuf, XSTR( "'s Wing", 494)); } else { strcpy(outbuf, XSTR( "no orders", 495)); @@ -13201,17 +13265,18 @@ char *ship_return_orders(char *outbuf, ship *sp) case AI_GOAL_EVADE_SHIP: case AI_GOAL_REARM_REPAIR: if ( aigp->ship_name ) { - strcat(outbuf, temp_name); + strcat(outbuf, ship_name); } else { strcpy(outbuf, XSTR( "no orders", 495)); } break; case AI_GOAL_DESTROY_SUBSYSTEM: { - char name[NAME_LENGTH]; if ( aip->targeted_subsys != NULL ) { - sprintf(outbuf, XSTR( "atk %s %s", 496), temp_name, hud_targetbox_truncate_subsys_name(aip->targeted_subsys->system_info->subobj_name)); - strcat(outbuf, name); //what is this for? + char subsys_name[NAME_LENGTH]; + strcpy(subsys_name, aip->targeted_subsys->system_info->subobj_name); + hud_targetbox_truncate_subsys_name(subsys_name); + sprintf(outbuf, XSTR( "atk %s %s", 496), ship_name, subsys_name); } else { strcpy(outbuf, XSTR( "no orders", 495) ); } @@ -13507,7 +13572,7 @@ warn_player_done: int ship_index; // multiplayer tvt - this is client side. - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM) && (Net_player != NULL)){ + if(MULTI_TEAM && (Net_player != NULL)){ ship_index = ship_get_random_player_wing_ship( SHIP_GET_UNSILENCED, 0.0f, -1, 0, Net_player->p_info.team ); } else { ship_index = ship_get_random_player_wing_ship( SHIP_GET_UNSILENCED ); @@ -13682,7 +13747,7 @@ void ship_maybe_ask_for_help(ship *sp) return; // determine team filter if TvT - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) + if(MULTI_TEAM) multi_team_filter = sp->team; // handle awacs ship as a special case @@ -13744,7 +13809,6 @@ void ship_maybe_lament() #define PLAYER_MAX_SCREAMS 10 // play a death scream for a ship -extern int Cmdline_wcsaga; void ship_scream(ship *sp) { int multi_team_filter = -1; @@ -13754,7 +13818,7 @@ void ship_scream(ship *sp) return; // multiplayer tvt - if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) + if (MULTI_TEAM) multi_team_filter = sp->team; // Bail if the ship is silenced @@ -13765,10 +13829,7 @@ void ship_scream(ship *sp) message_send_builtin_to_player(MESSAGE_WINGMAN_SCREAM, sp, MESSAGE_PRIORITY_HIGH, MESSAGE_TIME_IMMEDIATE, 0, 0, -1, multi_team_filter); Player->allow_scream_timestamp = timestamp(PLAYER_SCREAM_INTERVAL); - - // Goober5000 - if (!Cmdline_wcsaga || Player_ship->team == sp->team) - Player->scream_count++; + Player->scream_count++; sp->flags |= SF_SHIP_HAS_SCREAMED; @@ -13780,7 +13841,6 @@ void ship_scream(ship *sp) // ship has just died, maybe play a scream. // // NOTE: this is only called for ships that are not the player ship -extern int Cmdline_wcsaga; void ship_maybe_scream(ship *sp) { // bail if screaming is disabled @@ -13790,28 +13850,21 @@ void ship_maybe_scream(ship *sp) // if screaming is enabled, skip all checks if (!(sp->flags2 & SF2_ALWAYS_DEATH_SCREAM)) { - // for WCSaga, only do a subset of the checks - if (Cmdline_wcsaga) - { - // only scream 50% of the time - if (rand() & 1) - return; + // only scream 50% of the time + if (rand() & 1) + return; - // check if enough time has elapsed since last scream; if not, leave - if (!timestamp_elapsed(Player->allow_scream_timestamp)) - return; - } - // otherwise do all checks - else + // check if enough time has elapsed since last scream; if not, leave + if (!timestamp_elapsed(Player->allow_scream_timestamp)) + return; + + // for WCSaga, only do a subset of the checks + if (!(The_mission.ai_profile->flags2 & AIPF2_PERFORM_LESS_SCREAM_CHECKS)) { // bail if this ship isn't from the player wing if (!(sp->flags & SF_FROM_PLAYER_WING)) return; - // only scream 50% of the time - if (rand() & 1) - return; - // first check if the player has reached the maximum number of screams for a mission if (Player->scream_count >= PLAYER_MAX_SCREAMS) return; @@ -13819,10 +13872,6 @@ void ship_maybe_scream(ship *sp) // if on different teams (i.e. team v. team games in multiplayer), no scream if (Player_ship->team != sp->team) return; - - // check if enough time has elapsed since last scream; if not, leave - if (!timestamp_elapsed(Player->allow_scream_timestamp)) - return; } } @@ -13881,7 +13930,7 @@ void ship_maybe_tell_about_low_ammo(ship *sp) if (swp->primary_bank_ammo[i] / swp->primary_bank_start_ammo[i] < 0.3f) { // multiplayer tvt - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) { + if(MULTI_TEAM) { multi_team_filter = sp->team; } @@ -13973,7 +14022,7 @@ void ship_maybe_tell_about_rearm(ship *sp) int multi_team_filter = -1; // multiplayer tvt - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) + if(MULTI_TEAM) multi_team_filter = sp->team; @@ -14838,8 +14887,8 @@ float ship_get_exp_damage(object* objp) ship *shipp = &Ships[objp->instance]; - if (shipp->special_exp_index != -1) { - damage = (float) atoi(Sexp_variables[shipp->special_exp_index+DAMAGE].text); + if (shipp->special_exp_damage >= 0) { + damage = (float)shipp->special_exp_damage; } else { damage = Ship_info[shipp->ship_info_index].shockwave.damage; } @@ -14857,10 +14906,10 @@ float ship_get_exp_outer_rad(object *ship_objp) float outer_rad; Assert(ship_objp->type == OBJ_SHIP); - if (Ships[ship_objp->instance].special_exp_index == -1) { + if (Ships[ship_objp->instance].special_exp_outer == -1) { outer_rad = Ship_info[Ships[ship_objp->instance].ship_info_index].shockwave.outer_rad; } else { - outer_rad = (float) atoi(Sexp_variables[Ships[ship_objp->instance].special_exp_index+OUTER_RAD].text); + outer_rad = (float)Ships[ship_objp->instance].special_exp_outer; } return outer_rad; @@ -15498,7 +15547,7 @@ int ship_starting_wing_lookup(char *wing_name) int ship_squadron_wing_lookup(char *wing_name) { // TvT uses a different set of wing names from everything else - if ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM)) + if (MULTI_TEAM) { for (int i = 0; i < MAX_TVT_WINGS; i++) { @@ -16076,8 +16125,12 @@ void parse_ai_target_priorities() for(j = 0; j < MAX_WEAPON_TYPES ; j++) { if ( !stricmp(Weapon_info[j].name, temp_strings[i].c_str()) ) { temp_priority.weapon_class.push_back(j); + break; } } + if (j == MAX_WEAPON_TYPES) { + Warning(LOCATION, "Unidentified weapon class '%s' set for target priority group '%s'\n", temp_strings[i].c_str(), temp_priority.name); + } } } @@ -16089,8 +16142,12 @@ void parse_ai_target_priorities() for (j = 0; j < num_ai_tgt_obj_flags; j++) { if ( !stricmp(ai_tgt_obj_flags[j].name, temp_strings[i].c_str()) ) { temp_priority.obj_flags |= ai_tgt_obj_flags[j].def; + break; } } + if (j == num_ai_tgt_obj_flags) { + Warning(LOCATION, "Unidentified object flag '%s' set for target priority group '%s'\n", temp_strings[i].c_str(), temp_priority.name); + } } } @@ -16106,8 +16163,12 @@ void parse_ai_target_priorities() } else { temp_priority.sif2_flags |= ai_tgt_ship_flags[j].def; } + break; } } + if (j == num_ai_tgt_ship_flags) { + Warning(LOCATION, "Unidentified ship class flag '%s' set for target priority group '%s'\n", temp_strings[i].c_str(), temp_priority.name); + } } } @@ -16123,8 +16184,12 @@ void parse_ai_target_priorities() } else { temp_priority.wif2_flags |= ai_tgt_weapon_flags[j].def; } + break; } } + if (j == num_ai_tgt_weapon_flags) { + Warning(LOCATION, "Unidentified weapon class flag '%s' set for target priority group '%s'\n", temp_strings[i].c_str(), temp_priority.name); + } } } @@ -16147,6 +16212,7 @@ ai_target_priority init_ai_target_priorities() temp_priority.ship_class.clear(); temp_priority.ship_type.clear(); temp_priority.sif_flags = 0; + temp_priority.sif2_flags = 0; temp_priority.weapon_class.clear(); temp_priority.wif2_flags = 0; temp_priority.wif_flags = 0; diff --git a/code/ship/ship.h b/code/ship/ship.h index 2a1daab86a..15f6b67bcc 100644 --- a/code/ship/ship.h +++ b/code/ship/ship.h @@ -141,6 +141,7 @@ typedef struct ship_weapon { int secondary_animation_done_time[MAX_SHIP_SECONDARY_BANKS]; int burst_counter[MAX_SHIP_PRIMARY_BANKS + MAX_SHIP_SECONDARY_BANKS]; + int external_model_fp_counter[MAX_SHIP_PRIMARY_BANKS + MAX_SHIP_SECONDARY_BANKS]; } ship_weapon; //************************************************************** @@ -182,7 +183,7 @@ public: //Get char *GetNamePtr(){return Name;} - bool IsName(char *in_name){return (strnicmp(in_name,Name,strlen(Name)) == 0);} + bool IsName(char *in_name){return (stricmp(in_name,Name)==0);} float GetDamage(float damage_applied, int in_damage_type_idx); float GetShieldPiercePCT(int damage_type_idx); int GetPiercingType(int damage_type_idx); @@ -302,6 +303,12 @@ typedef struct ship_subsys { // target priority setting for turrets int target_priority[32]; int num_target_priorities; + + //SUSHI: Fields for max_turret_aim_update_delay + //Only used when targeting small ships + fix next_aim_pos_time; + vec3d last_aim_enemy_pos; + vec3d last_aim_enemy_vel; } ship_subsys; // structure for subsystems which tells us the total count of a particular type of subsystem (i.e. @@ -466,9 +473,16 @@ typedef struct ship { int next_hit_spark; int num_hits; // Note, this is the number of spark emitter positions! ship_spark sparks[MAX_SHIP_HITS]; - - int special_exp_index; - int special_hitpoint_index; + + bool use_special_explosion; + int special_exp_damage; // new special explosion/hitpoints system + int special_exp_blast; + int special_exp_inner; + int special_exp_outer; + bool use_shockwave; + int special_exp_shockwave_speed; + int special_hitpoints; + int special_shield; float ship_max_shield_strength; float ship_max_hull_strength; @@ -664,7 +678,6 @@ typedef struct ship { int bay_doors_parent_shipnum; // our parent ship, what we are entering/leaving float secondary_point_reload_pct[MAX_SHIP_SECONDARY_BANKS][MAX_SLOTS]; //after fireing a secondary it takes some time for that secondary weapon to reload, this is how far along in that proces it is (from 0 to 1) - float reload_time[MAX_SHIP_SECONDARY_BANKS]; //how many seconds it will take for any point in a bank to reload float primary_rotate_rate[MAX_SHIP_PRIMARY_BANKS]; float primary_rotate_ang[MAX_SHIP_PRIMARY_BANKS]; @@ -844,6 +857,7 @@ typedef struct thruster_particles { #define STI_HUD_HOTKEY_ON_LIST (1<<0) #define STI_HUD_TARGET_AS_THREAT (1<<1) #define STI_HUD_SHOW_ATTACK_DIRECTION (1<<2) +#define STI_HUD_NO_CLASS_DISPLAY (1<<3) #define STI_SHIP_SCANNABLE (1<<0) #define STI_SHIP_WARP_PUSHES (1<<1) @@ -965,10 +979,12 @@ typedef struct man_thruster { } man_thruster; //Warp type defines -#define WT_DEFAULT 0 -#define WT_IN_PLACE_ANIM 1 -#define WT_SWEEPER 2 -#define WT_HYPERSPACE 3 +#define WT_DEFAULT 0 +#define WT_KNOSSOS 1 +#define WT_DEFAULT_THEN_KNOSSOS 2 +#define WT_IN_PLACE_ANIM 3 +#define WT_SWEEPER 4 +#define WT_HYPERSPACE 5 // The real FreeSpace ship_info struct. typedef struct ship_info { diff --git a/code/ship/shipfx.cpp b/code/ship/shipfx.cpp index af2c5a4682..3026550535 100644 --- a/code/ship/shipfx.cpp +++ b/code/ship/shipfx.cpp @@ -1579,10 +1579,11 @@ void shipfx_flash_create(object *objp, int model_num, vec3d *gun_pos, vec3d *gun if((Weapon_info[weapon_info_index].wi_flags & WIF_MFLASH) && !(Weapon_info[weapon_info_index].wi_flags & WIF_FLAK)){ // spiffy new flash stuff - vec3d real_pos; - vm_vec_unrotate(&real_pos, gun_pos,&objp->orient); - vm_vec_add2(&real_pos, &objp->pos); - mflash_create(&real_pos, gun_dir, &objp->phys_info, Weapon_info[weapon_info_index].muzzle_flash); + vec3d real_dir; + vm_vec_rotate(&real_dir, gun_dir,&objp->orient); + //vm_vec_add2(&real_pos, &objp->pos); + //mflash_create(&real_pos, gun_dir, &objp->phys_info, Weapon_info[weapon_info_index].muzzle_flash); + mflash_create(gun_pos, &real_dir, &objp->phys_info, Weapon_info[weapon_info_index].muzzle_flash, objp); } if ( pm->num_lights < 1 ) return; @@ -3852,18 +3853,14 @@ int WE_Default::warpStart() HUD_printf(NOX("Subspace drive engaged")); } - int portal_objnum; - if (direction == WD_WARP_IN) - portal_objnum = shipp->special_warpin_objnum; - else if (direction == WD_WARP_OUT) - portal_objnum = shipp->special_warpout_objnum; - else - portal_objnum = -1; - portal_objp = NULL; - if(portal_objnum >= 0 && shipfx_special_warp_objnum_valid(portal_objnum)) + if ((direction == WD_WARP_IN) && shipfx_special_warp_objnum_valid(shipp->special_warpin_objnum)) { - portal_objp = &Objects[portal_objnum]; + portal_objp = &Objects[shipp->special_warpin_objnum]; + } + else if ((direction == WD_WARP_OUT) && shipfx_special_warp_objnum_valid(shipp->special_warpout_objnum)) + { + portal_objp = &Objects[shipp->special_warpout_objnum]; } float warpout_speed = 0.0f; @@ -3895,7 +3892,7 @@ int WE_Default::warpStart() if (direction == WD_WARP_OUT) { // maybe special warpout - int fireball_type = ((portal_objp != NULL) || Cmdline_tbp) ? FIREBALL_KNOSSOS : FIREBALL_WARP; + int fireball_type = ((portal_objp != NULL) || (sip->warpout_type == WT_KNOSSOS) || (sip->warpout_type == WT_DEFAULT_THEN_KNOSSOS)) ? FIREBALL_KNOSSOS : FIREBALL_WARP; // create fireball warp_objnum = fireball_create(&pos, fireball_type, FIREBALL_WARP_EFFECT, OBJ_INDEX(objp), radius, 1, NULL, warp_time, shipp->ship_info_index, NULL, 0, 0, sip->warpout_snd_start, sip->warpout_snd_end); @@ -3903,7 +3900,7 @@ int WE_Default::warpStart() else if (direction == WD_WARP_IN) { // maybe special warpin - int fireball_type = (portal_objp != NULL) ? FIREBALL_KNOSSOS : FIREBALL_WARP; + int fireball_type = ((portal_objp != NULL) || (sip->warpin_type == WT_KNOSSOS)) ? FIREBALL_KNOSSOS : FIREBALL_WARP; // create fireball warp_objnum = fireball_create(&pos, fireball_type, FIREBALL_WARP_EFFECT, OBJ_INDEX(objp), radius, 0, NULL, warp_time, shipp->ship_info_index, NULL, 0, 0, sip->warpin_snd_start, sip->warpin_snd_end); @@ -3921,6 +3918,8 @@ int WE_Default::warpStart() return 0; } + // G5K 6/26/2010 this should no longer be needed + /* // maybe negate if special warp effect fvec = Objects[warp_objnum].orient.vec.fvec; if (portal_objp != NULL) @@ -3933,6 +3932,7 @@ int WE_Default::warpStart() vm_vec_negate(&fvec); } } + */ stage_time_start = total_time_start = timestamp(); if(direction == WD_WARP_IN) diff --git a/code/ship/shiphit.cpp b/code/ship/shiphit.cpp index ae9a6f001b..af1476a9b0 100644 --- a/code/ship/shiphit.cpp +++ b/code/ship/shiphit.cpp @@ -2120,7 +2120,7 @@ static void ship_do_damage(object *ship_obj, object *other_obj, vec3d *hitpos, f // DB - removed 1/12/99 - scoring code properly bails if MULTIPLAYER_CLIENT // in multiplayer, if I am not the host, get out of this function here!! - //if ( (Game_mode & GM_MULTIPLAYER) && !(Net_player->flags & NETINFO_FLAG_AM_MASTER) ) { + //if ( MULTIPLAYER_CLIENT ) { //return; //} @@ -2285,7 +2285,7 @@ void ship_apply_local_damage(object *ship_obj, object *other_obj, vec3d *hitpos, // If got hit by a weapon, tell the AI so it can react. Only do this line in single player, // or if I am the master in a multiplayer game - if ( other_obj->type == OBJ_WEAPON && ( !(Game_mode & GM_MULTIPLAYER) || ((Game_mode & GM_MULTIPLAYER) && (Net_player->flags & NETINFO_FLAG_AM_MASTER)) )) { + if ( other_obj->type == OBJ_WEAPON && ( !(Game_mode & GM_MULTIPLAYER) || MULTIPLAYER_MASTER )) { // If weapon hits ship on same team and that ship not targeted and parent of weapon not player, // don't do damage. // Ie, player can always do damage. AI can only damage team if that ship is targeted. diff --git a/code/sound/acm.h b/code/sound/acm.h index aa6aa524b9..75203f5b07 100644 --- a/code/sound/acm.h +++ b/code/sound/acm.h @@ -19,10 +19,6 @@ #include "globalincs/pstypes.h" int ACM_convert_ADPCM_to_PCM(WAVEFORMATEX *pwfxSrc, ubyte *src, int src_len, ubyte **dest, int max_dest_bytes, int *dest_len, unsigned int *src_bytes_used, unsigned short dest_bps=16); -int ACM_init(); -void ACM_close(); -int ACM_is_inited(); - int ACM_stream_open(WAVEFORMATEX *pwfxSrc, WAVEFORMATEX *pwfxDest, void **stream, int dest_bps=16); int ACM_stream_close(void *stream); diff --git a/code/sound/audiostr.cpp b/code/sound/audiostr.cpp index 870de3ae14..297e08ebc5 100644 --- a/code/sound/audiostr.cpp +++ b/code/sound/audiostr.cpp @@ -8,7 +8,6 @@ #include #endif -#define NEED_STRHDL // for STRHTL struct in audiostr.h #include "globalincs/pstypes.h" #include "sound/openal.h" @@ -17,6 +16,9 @@ #include "sound/acm.h" #include "cfile/cfile.h" #include "sound/sound.h" +#include "sound/acm.h" +#include "cfile/cfile.h" +#include "sound/sound.h" #include "sound/ogg/ogg.h" #include "io/timer.h" @@ -33,7 +35,7 @@ #define MAX_AUDIO_STREAMS 30 // constants -#define BIGBUF_SIZE 88200 +#define BIGBUF_SIZE 176400 ubyte *Wavedata_load_buffer = NULL; // buffer used for cueing audiostreams ubyte *Wavedata_service_buffer = NULL; // buffer used for servicing audiostreams @@ -41,7 +43,7 @@ CRITICAL_SECTION Global_service_lock; typedef bool (*TIMERCALLBACK)(ptr_u); -#define COMPRESSED_BUFFER_SIZE 88200 +#define COMPRESSED_BUFFER_SIZE 176400 ubyte *Compressed_buffer = NULL; // Used to load in compressed data during a cueing interval ubyte *Compressed_service_buffer = NULL; // Used to read in compressed data during a service interval @@ -501,7 +503,21 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) m_wfmt.wFormatTag = WAVE_FORMAT_PCM; m_wfmt.nChannels = (WORD) m_snd_info.vorbis_file.vi->channels; m_wfmt.nSamplesPerSec = m_snd_info.vorbis_file.vi->rate; - m_wfmt.wBitsPerSample = 16; + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + m_wfmt.wBitsPerSample = Ds_float_supported ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + m_wfmt.wBitsPerSample = 16; + break; + + default: + m_wfmt.wBitsPerSample = 8; + break; + } + m_wfmt.cbSize = 0; m_wfmt.nBlockAlign = (ushort)(( m_wfmt.nChannels * m_wfmt.wBitsPerSample ) / 8); @@ -510,31 +526,9 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) m_nBlockAlign = m_wfmt.nBlockAlign; m_nUncompressedAvgDataRate = m_wfmt.nAvgBytesPerSec; - m_al_format = AL_FORMAT_MONO8; - - if (m_wfmt.nChannels == 1) { - if (m_wfmt.wBitsPerSample == 8) { - m_al_format = AL_FORMAT_MONO8; - } else if (m_wfmt.wBitsPerSample == 16) { - m_al_format = AL_FORMAT_MONO16; - } - } else if (m_wfmt.nChannels == 2) { - if (m_wfmt.wBitsPerSample == 8) { - m_al_format = AL_FORMAT_STEREO8; - } else if (m_wfmt.wBitsPerSample == 16) { - m_al_format = AL_FORMAT_STEREO16; - } - } - // location of start of file in VP m_data_offset = 0; m_nDataSize = m_data_bytes_left = ((int)ov_pcm_total(&m_snd_info.vorbis_file, -1) * m_wfmt.nBlockAlign); - - // Cue for streaming - Cue(); - - // successful open - goto OPEN_DONE; } else { mprintf(("AUDIOSTR => OGG reading error: Not a valid Vorbis file!\n")); } @@ -571,7 +565,7 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) audiostr_read_word(m_snd_info.cfp, &pcmwf.wf.nBlockAlign); audiostr_read_word(m_snd_info.cfp, &pcmwf.wBitsPerSample); - if (pcmwf.wf.wFormatTag != WAVE_FORMAT_PCM) + if (pcmwf.wf.wFormatTag == WAVE_FORMAT_ADPCM) audiostr_read_word(m_snd_info.cfp, &cbExtra); // Allocate memory for WAVEFORMATEX structure + extra bytes @@ -616,8 +610,7 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) // At this stage, examine source format, and set up WAVEFORATEX structure for DirectSound. // Since DirectSound only supports PCM, force this structure to be PCM compliant. We will // need to convert data on the fly later if our souce is not PCM - switch (m_pwfmt_original->wFormatTag) - { + switch (m_pwfmt_original->wFormatTag) { case WAVE_FORMAT_PCM: m_wave_format = WAVE_FORMAT_PCM; m_wfmt.wBitsPerSample = m_pwfmt_original->wBitsPerSample; @@ -625,10 +618,30 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) case WAVE_FORMAT_ADPCM: m_wave_format = WAVE_FORMAT_ADPCM; - m_wfmt.wBitsPerSample = 16; - m_bits_per_sample_uncompressed = 16; + m_wfmt.wBitsPerSample = (Ds_sound_quality) ? 16: 8; + m_bits_per_sample_uncompressed = m_wfmt.wBitsPerSample; break; + case WAVE_FORMAT_IEEE_FLOAT: { + m_wave_format = WAVE_FORMAT_IEEE_FLOAT; + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + m_wfmt.wBitsPerSample = (Ds_float_supported) ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + m_wfmt.wBitsPerSample = 16; + break; + + default: + m_wfmt.wBitsPerSample = 8; + break; + } + + break; + } + default: nprintf(("SOUND", "SOUND => Not supporting %d format for playing wave files\n", m_pwfmt_original->wFormatTag)); //Int3(); @@ -650,34 +663,20 @@ bool WaveFile::Open(char *pszFilename, bool keep_ext) m_nUncompressedAvgDataRate = m_wfmt.nAvgBytesPerSec; Assert( (m_wfmt.nChannels == 1) || (m_wfmt.nChannels == 2) ); - - m_al_format = AL_FORMAT_MONO8; - - if (m_wfmt.nChannels == 1) { - if (m_wfmt.wBitsPerSample == 8) { - m_al_format = AL_FORMAT_MONO8; - } else if (m_wfmt.wBitsPerSample == 16) { - m_al_format = AL_FORMAT_MONO16; - } - } else if (m_wfmt.nChannels == 2) { - if (m_wfmt.wBitsPerSample == 8) { - m_al_format = AL_FORMAT_STEREO8; - } else if (m_wfmt.wBitsPerSample == 16) { - m_al_format = AL_FORMAT_STEREO16; - } - } - - // Cue for streaming - Cue (); - - // Successful open - goto OPEN_DONE; } // something unkown??? else { Int3(); } + m_al_format = openal_get_format(m_wfmt.wBitsPerSample, m_wfmt.nChannels); + + if (m_al_format != AL_INVALID_VALUE) { + // Cue for streaming + Cue(); + + goto OPEN_DONE; + } OPEN_ERROR: // Handle all errors here @@ -768,7 +767,7 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) dest_buf = pbDest; break; - case WAVE_FORMAT_ADPCM: + case WAVE_FORMAT_ADPCM: { if ( !m_hStream_open ) { if ( !ACM_stream_open(m_pwfmt_original, &m_wfxDest, (void**)&m_hStream, m_bits_per_sample_uncompressed) ) { m_hStream_open = 1; @@ -792,13 +791,31 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) num_bytes_desired = ACM_query_source_size((void*)m_hStream, cbSize); // nprintf(("Alan","Num bytes desired: %d\n", num_bytes_desired)); } + break; + } case OGG_FORMAT_VORBIS: num_bytes_desired = cbSize; dest_buf = pbDest; break; + case WAVE_FORMAT_IEEE_FLOAT: { + num_bytes_desired = cbSize; + + if (m_wfmt.wBitsPerSample == 32) { + dest_buf = pbDest; + } else { + if (service) { + dest_buf = Compressed_service_buffer; + } else { + dest_buf = Compressed_buffer; + } + } + + break; + } + default: nprintf(("SOUND", "SOUND => Not supporting %d format for playing wave files\n", m_wave_format)); Int3(); @@ -829,8 +846,17 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) // OGG reading is special if ( m_wave_format == OGG_FORMAT_VORBIS ) { + int sign = (m_wfmt.wBitsPerSample == 8) ? 0 : 1; + int sample_size = sizeof(float) * m_wfmt.nChannels; + while ( !m_abort_next_read && ((uint)actual_read < num_bytes_read)) { - rc = ov_read(&m_snd_info.vorbis_file, (char *)dest_buf + actual_read, num_bytes_read - actual_read, byte_order, m_wfmt.wBitsPerSample / 8, 1, §ion); + float **pcm; + + if (m_wfmt.wBitsPerSample == 32) { + rc = ov_read_float(&m_snd_info.vorbis_file, &pcm, (num_bytes_read - actual_read) / sample_size, §ion); + } else { + rc = ov_read(&m_snd_info.vorbis_file, (char *)dest_buf + actual_read, num_bytes_read - actual_read, byte_order, m_wfmt.wBitsPerSample / 8, sign, §ion); + } // fail if the bitstream changes, shouldn't get this far if that's the case though if ((last_section != -1) && (last_section != section)) { @@ -839,8 +865,21 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) } if ( rc > 0 ) { + if (m_wfmt.wBitsPerSample == 32) { + float *out_p = (float*)((ubyte*)dest_buf + actual_read); + + for (int i = 0; i < rc; i++) { + for (int j = 0; j < m_wfmt.nChannels; j++) { + *out_p++ = pcm[j][i]; + } + } + + actual_read += (rc * m_wfmt.nBlockAlign); + } else { + actual_read += rc; + } + last_section = section; - actual_read += rc; } else if ( rc == 0 ) { break; } else if ( rc < 0 ) { @@ -854,6 +893,60 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) } } } + // IEEE FLOAT is special too, downsampling can give short buffers + else if (m_wave_format == WAVE_FORMAT_IEEE_FLOAT) { + while ( !m_abort_next_read && ((uint)actual_read < num_bytes_read) ) { + rc = mmioRead(m_snd_info.cfp, (char *)dest_buf, num_bytes_read); + + if (rc <= 0) { + break; + } + +#if BYTE_ORDER == BIG_ENDIAN + // need to byte-swap before any later conversions + float *swap_tmp; + + for (int i = 0; i < rc; i += sizeof(float)) { + swap_tmp = (float *)((ubyte*)dest_buf + i); + *swap_tmp = INTEL_FLOAT(swap_tmp); + } +#endif + + if (m_wfmt.wBitsPerSample == 32) { + actual_read = rc; + } else if (m_wfmt.wBitsPerSample == 16) { + float *in_p = (float*)dest_buf; + short *out_p = (short*)((ubyte*)uncompressed_wave_data + actual_read); + + int end = rc / sizeof(float); + + for (int i = 0; i < end; i++) { + int i_val = (int)(in_p[i] * 32767.0f + 0.5f); + CLAMP(i_val, -32768, 32767); + + *out_p++ = (short)i_val; + } + + actual_read += (rc >> 1); + } else { + Assert( m_wfmt.wBitsPerSample == 8 ); + + float *in_p = (float*)dest_buf; + ubyte *out_p = (ubyte*)((ubyte*)uncompressed_wave_data + actual_read); + + int end = num_bytes_read / sizeof(float); + + for (int i = 0; i < end; i++) { + int i_val = (int)(in_p[i] * 127.0f + 0.5f) + 128; + CLAMP(i_val, 0, 255); + + *out_p++ = (ubyte)i_val; + } + + actual_read += (rc >> 2); + } + } + } // standard WAVE reading else { actual_read = mmioRead( m_snd_info.cfp, (char *)dest_buf, num_bytes_read ); @@ -908,6 +1001,7 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) m_data_bytes_left -= num_bytes_read; m_nBytesPlayed += num_bytes_read; uncompressed_bytes_written = num_bytes_read; + #if BYTE_ORDER == BIG_ENDIAN if ( m_wave_format == WAVE_FORMAT_PCM ) { // swap 16-bit sound data @@ -921,6 +1015,7 @@ int WaveFile::Read(ubyte *pbDest, uint cbSize, int service) } } #endif + goto READ_DONE; } @@ -1026,6 +1121,12 @@ bool AudioStream::Create (char *pszFilename) OpenAL_ErrorPrint( alSourcef(m_source_id, AL_GAIN, 1.0f) ); OpenAL_ErrorPrint( alSourcef(m_source_id, AL_PITCH, 1.0f) ); + // maybe set EFX + if ( (type == ASF_SOUNDFX) && ds_eax_is_inited() ) { + extern ALuint AL_EFX_aux_id; + OpenAL_ErrorPrint( alSource3i(m_source_id, AL_AUXILIARY_SEND_FILTER, AL_EFX_aux_id, 0, AL_FILTER_NULL) ); + } + // Cue for playback Cue(); Snd_sram += (m_cbBufSize * MAX_STREAM_BUFFERS); @@ -1502,9 +1603,6 @@ void audiostream_init() if ( Audiostream_inited == 1 ) return; - if ( !ACM_is_inited() ) - return; - // Allocate memory for the buffer which holds the uncompressed wave data that is streamed from the // disk during a load/cue if ( Wavedata_load_buffer == NULL ) { @@ -1656,6 +1754,7 @@ int audiostream_open( char *filename, int type ) } else { return i; } + } } void audiostream_close_file(int i, int fade) diff --git a/code/sound/ds.cpp b/code/sound/ds.cpp index 064a0e4e81..9340b724ee 100644 --- a/code/sound/ds.cpp +++ b/code/sound/ds.cpp @@ -20,37 +20,6 @@ #include "sound/dscap.h" -/* -// presets -//#define EAX_PRESET_GENERIC EAX_ENVIRONMENT_GENERIC,0.5F,1.493F,0.5F -#define EAX_PRESET_GENERIC EAX_ENVIRONMENT_GENERIC,0.2F,0.2F,1.0F -#define EAX_PRESET_PADDEDCELL EAX_ENVIRONMENT_PADDEDCELL,0.25F,0.1F,0.0F -#define EAX_PRESET_ROOM EAX_ENVIRONMENT_ROOM,0.417F,0.4F,0.666F -#define EAX_PRESET_BATHROOM EAX_ENVIRONMENT_BATHROOM,0.653F,1.499F,0.166F -#define EAX_PRESET_LIVINGROOM EAX_ENVIRONMENT_LIVINGROOM,0.208F,0.478F,0.0F -#define EAX_PRESET_STONEROOM EAX_ENVIRONMENT_STONEROOM,0.5F,2.309F,0.888F -#define EAX_PRESET_AUDITORIUM EAX_ENVIRONMENT_AUDITORIUM,0.403F,4.279F,0.5F -#define EAX_PRESET_CONCERTHALL EAX_ENVIRONMENT_CONCERTHALL,0.5F,3.961F,0.5F -#define EAX_PRESET_CAVE EAX_ENVIRONMENT_CAVE,0.5F,2.886F,1.304F -#define EAX_PRESET_ARENA EAX_ENVIRONMENT_ARENA,0.361F,7.284F,0.332F -#define EAX_PRESET_HANGAR EAX_ENVIRONMENT_HANGAR,0.5F,10.0F,0.3F -#define EAX_PRESET_CARPETEDHALLWAY EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153F,0.259F,2.0F -#define EAX_PRESET_HALLWAY EAX_ENVIRONMENT_HALLWAY,0.361F,1.493F,0.0F -#define EAX_PRESET_STONECORRIDOR EAX_ENVIRONMENT_STONECORRIDOR,0.444F,2.697F,0.638F -#define EAX_PRESET_ALLEY EAX_ENVIRONMENT_ALLEY,0.25F,1.752F,0.776F -#define EAX_PRESET_FOREST EAX_ENVIRONMENT_FOREST,0.111F,3.145F,0.472F -#define EAX_PRESET_CITY EAX_ENVIRONMENT_CITY,0.111F,2.767F,0.224F -#define EAX_PRESET_MOUNTAINS EAX_ENVIRONMENT_MOUNTAINS,0.194F,7.841F,0.472F -#define EAX_PRESET_QUARRY EAX_ENVIRONMENT_QUARRY,1.0F,1.499F,0.5F -#define EAX_PRESET_PLAIN EAX_ENVIRONMENT_PLAIN,0.097F,2.767F,0.224F -#define EAX_PRESET_PARKINGLOT EAX_ENVIRONMENT_PARKINGLOT,0.208F,1.652F,1.5F -#define EAX_PRESET_SEWERPIPE EAX_ENVIRONMENT_SEWERPIPE,0.652F,2.886F,0.25F -#define EAX_PRESET_UNDERWATER EAX_ENVIRONMENT_UNDERWATER,1.0F,1.499F,0.0F -#define EAX_PRESET_DRUGGED EAX_ENVIRONMENT_DRUGGED,0.875F,8.392F,1.388F -#define EAX_PRESET_DIZZY EAX_ENVIRONMENT_DIZZY,0.139F,17.234F,0.666F -#define EAX_PRESET_PSYCHOTIC EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F -*/ - typedef struct sound_buffer { ALuint buf_id; // OpenAL buffer id @@ -85,145 +54,78 @@ static int Ds_eax_inited = 0; static int AL_play_position = 0; -#ifndef AL_BYTE_LOKI -// in case it's not defined by older/other drivers -#define AL_BYTE_LOKI 0x100C -#endif +// NOTE: these can't be static +int Ds_sound_quality = DS_SQ_MEDIUM; +int Ds_float_supported = 0; -// not define by older OpenAL versions -#ifndef AL_BYTE_OFFSET -#define AL_BYTE_OFFSET 0x1026 -#endif -#define EFX_EAXREVERB_PRESET_GENERIC { 1.0f, 1.0f, 0.316228f, 0.891251f, 1.0f, 1.49f, 0.83f, 1.0f, 0.050003f, 0.007f, {0.0f, 0.0f, 0.0f}, 1.258925f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_PADDEDCELL { 0.171500f, 1.0f, 0.316228f, 0.001f, 1.0f, 0.17f, 0.10f, 1.0f, 0.250035f, 0.001f, {0.0f, 0.0f, 0.0f}, 1.269112f, 0.002f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_ROOM { 0.428687f, 1.0f, 0.316228f, 0.592925f, 1.0f, 0.40f, 0.83f, 1.0f, 0.150314f, 0.002f, {0.0f, 0.0f, 0.0f}, 1.062919f, 0.003f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_BATHROOM { 0.171500f, 1.0f, 0.316228f, 0.251189f, 1.0f, 1.49f, 0.54f, 1.0f, 0.653131f, 0.007f, {0.0f, 0.0f, 0.0f}, 3.273407f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_LIVINGROOM { 0.976563f, 1.0f, 0.316228f, 0.001f, 1.0f, 0.50f, 0.10f, 1.0f, 0.205116f, 0.003f, {0.0f, 0.0f, 0.0f}, 0.280543f, 0.004f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_STONEROOM { 1.0f, 1.0f, 0.316228f, 0.707946f, 1.0f, 2.31f, 0.64f, 1.0f, 0.441062f, 0.012f, {0.0f, 0.0f, 0.0f}, 1.100272f, 0.017f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_AUDITORIUM { 1.0f, 1.0f, 0.316228f, 0.578096f, 1.0f, 4.32f, 0.59f, 1.0f, 0.403181f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.716968f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_CONCERTHALL { 1.0f, 1.0f, 0.316228f, 0.562341f, 1.0f, 3.92f, 0.70f, 1.0f, 0.242661f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.997700f, 0.029f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_CAVE { 1.0f, 1.0f, 0.316228f, 1.0f, 1.0f, 2.91f, 1.30f, 1.0f, 0.500035f, 0.015f, {0.0f, 0.0f, 0.0f}, 0.706318f, 0.022f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } -#define EFX_EAXREVERB_PRESET_ARENA { 1.0f, 1.0f, 0.316228f, 0.447713f, 1.0f, 7.24f, 0.33f, 1.0f, 0.261216f, 0.02f, {0.0f, 0.0f, 0.0f}, 1.018591f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_HANGAR { 1.0f, 1.0f, 0.316228f, 0.316228f, 1.0f, 10.05f, 0.23f, 1.0f, 0.500035f, 0.02f, {0.0f, 0.0f, 0.0f}, 1.256030f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_CARPETEDHALLWAY { 0.428687f, 1.0f, 0.316228f, 0.01f, 1.0f, 0.30f, 0.10f, 1.0f, 0.121479f, 0.002f, {0.0f, 0.0f, 0.0f}, 0.153109f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_HALLWAY { 0.364500f, 1.0f, 0.316228f, 0.707946f, 1.0f, 1.49f, 0.59f, 1.0f, 0.245754f, 0.007f, {0.0f, 0.0f, 0.0f}, 1.661499f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_STONECORRIDOR { 1.0f, 1.0f, 0.316228f, 0.761202f, 1.0f, 2.70f, 0.79f, 1.0f, 0.247172f, 0.013f, {0.0f, 0.0f, 0.0f}, 1.575796f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_ALLEY { 1.0f, 0.30f, 0.316228f, 0.732825f, 1.0f, 1.49f, 0.86f, 1.0f, 0.250035f, 0.007f, {0.0f, 0.0f, 0.0f}, 0.995405f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.125f, 0.95f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_FOREST { 1.0f, 0.30f, 0.316228f, 0.022387f, 1.0f, 1.49f, 0.54f, 1.0f, 0.052481f, 0.162f, {0.0f, 0.0f, 0.0f}, 0.768245f, 0.088f, {0.0f, 0.0f, 0.0f}, 0.125f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_CITY { 1.0f, 0.50f, 0.316228f, 0.398107f, 1.0f, 1.49f, 0.67f, 1.0f, 0.073030f, 0.007f, {0.0f, 0.0f, 0.0f}, 0.142725f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_MOUNTAINS { 1.0f, 0.27f, 0.316228f, 0.056234f, 1.0f, 1.49f, 0.21f, 1.0f, 0.040738f, 0.30f, {0.0f, 0.0f, 0.0f}, 0.191867f, 0.10f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } -#define EFX_EAXREVERB_PRESET_QUARRY { 1.0f, 1.0f, 0.316228f, 0.316228f, 1.0f, 1.49f, 0.83f, 1.0f, 0.0f, 0.061f, {0.0f, 0.0f, 0.0f}, 1.778279f, 0.025f, {0.0f, 0.0f, 0.0f}, 0.125f, 0.70f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_PLAIN { 1.0f, 0.21f, 0.316228f, 0.10f, 1.0f, 1.49f, 0.50f, 1.0f, 0.058479f, 0.179f, {0.0f, 0.0f, 0.0f}, 0.108893f, 0.10f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_PARKINGLOT { 1.0f, 1.0f, 0.316228f, 1.0f, 1.0f, 1.65f, 1.50f, 1.0f, 0.208209f, 0.008f, {0.0f, 0.0f, 0.0f}, 0.265155f, 0.012f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } -#define EFX_EAXREVERB_PRESET_SEWERPIPE { 0.307063f, 0.80f, 0.316228f, 0.316228f, 1.0f, 2.81f, 0.14f, 1.0f, 1.638702f, 0.014f, {0.0f, 0.0f, 0.0f}, 3.247133f, 0.021f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_UNDERWATER { 0.364500f, 1.0f, 0.316228f, 0.01f, 1.0f, 1.49f, 0.10f, 1.0f, 0.596348f, 0.007f, {0.0f, 0.0f, 0.0f}, 7.079458f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 1.18f, 0.348f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 } -#define EFX_EAXREVERB_PRESET_DRUGGED { 0.428687f, 0.50f, 0.316228f, 1.0f, 1.0f, 8.39f, 1.39f, 1.0f, 0.875992f, 0.002f, {0.0f, 0.0f, 0.0f}, 3.108136f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 1.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } -#define EFX_EAXREVERB_PRESET_DIZZY { 0.364500f, 0.60f, 0.316228f, 0.630957f, 1.0f, 17.23f, 0.56f, 1.0f, 0.139155f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.493742f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.81f, 0.31f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } -#define EFX_EAXREVERB_PRESET_PSYCHOTIC { 0.062500f, 0.50f, 0.316228f, 0.840427f, 1.0f, 7.56f, 0.91f, 1.0f, 0.486407f, 0.02f, {0.0f, 0.0f, 0.0f}, 2.437811f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 4.00f, 1.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } - -#ifndef EFXEAXREVERBPROPERTIES_DEFINED -#define EFXEAXREVERBPROPERTIES_DEFINED -typedef struct +// this is so stupid - required to get VC6 to use the following array initializer +EFXREVERBPROPERTIES::EFXREVERBPROPERTIES(const EFXREVERBPROPERTIES_list &list) { - float flDensity; - float flDiffusion; - float flGain; - float flGainHF; - float flGainLF; - float flDecayTime; - float flDecayHFRatio; - float flDecayLFRatio; - float flReflectionsGain; - float flReflectionsDelay; - float flReflectionsPan[3]; - float flLateReverbGain; - float flLateReverbDelay; - float flLateReverbPan[3]; - float flEchoTime; - float flEchoDepth; - float flModulationTime; - float flModulationDepth; - float flAirAbsorptionGainHF; - float flHFReference; - float flLFReference; - float flRoomRolloffFactor; - int iDecayHFLimit; -} EFXEAXREVERBPROPERTIES, *LPEFXEAXREVERBPROPERTIES; -#endif + name = list.name; -EFXEAXREVERBPROPERTIES EFX_Presets[] = { - EFX_EAXREVERB_PRESET_GENERIC, - EFX_EAXREVERB_PRESET_PADDEDCELL, - EFX_EAXREVERB_PRESET_ROOM, - EFX_EAXREVERB_PRESET_BATHROOM, - EFX_EAXREVERB_PRESET_LIVINGROOM, - EFX_EAXREVERB_PRESET_STONEROOM, - EFX_EAXREVERB_PRESET_AUDITORIUM, - EFX_EAXREVERB_PRESET_CONCERTHALL, - EFX_EAXREVERB_PRESET_CAVE, - EFX_EAXREVERB_PRESET_ARENA, - EFX_EAXREVERB_PRESET_HANGAR, - EFX_EAXREVERB_PRESET_CARPETEDHALLWAY, - EFX_EAXREVERB_PRESET_HALLWAY, - EFX_EAXREVERB_PRESET_STONECORRIDOR, - EFX_EAXREVERB_PRESET_ALLEY, - EFX_EAXREVERB_PRESET_FOREST, - EFX_EAXREVERB_PRESET_CITY, - EFX_EAXREVERB_PRESET_MOUNTAINS, - EFX_EAXREVERB_PRESET_QUARRY, - EFX_EAXREVERB_PRESET_PLAIN, - EFX_EAXREVERB_PRESET_PARKINGLOT, - EFX_EAXREVERB_PRESET_SEWERPIPE, - EFX_EAXREVERB_PRESET_UNDERWATER, - EFX_EAXREVERB_PRESET_DRUGGED, - EFX_EAXREVERB_PRESET_DIZZY, - EFX_EAXREVERB_PRESET_PSYCHOTIC + flDensity = list.flDensity; + flDiffusion = list.flDiffusion; + flGain = list.flGain; + flGainHF = list.flGainHF; + flGainLF = list.flGainLF; + flDecayTime = list.flDecayTime; + flDecayHFRatio = list.flDecayHFRatio; + flDecayLFRatio = list.flDecayLFRatio; + flReflectionsGain = list.flReflectionsGain; + flReflectionsDelay = list.flReflectionsDelay; + flReflectionsPan[0] = list.flReflectionsPan[0]; + flReflectionsPan[1] = list.flReflectionsPan[1]; + flReflectionsPan[2] = list.flReflectionsPan[2]; + flLateReverbGain = list.flLateReverbGain; + flLateReverbDelay = list.flLateReverbDelay; + flLateReverbPan[0] = list.flLateReverbPan[0]; + flLateReverbPan[1] = list.flLateReverbPan[1]; + flLateReverbPan[2] = list.flLateReverbPan[2]; + flEchoTime = list.flEchoTime; + flEchoDepth = list.flEchoDepth; + flModulationTime = list.flModulationTime; + flModulationDepth = list.flModulationDepth; + flAirAbsorptionGainHF = list.flAirAbsorptionGainHF; + flHFReference = list.flHFReference; + flLFReference = list.flLFReference; + flRoomRolloffFactor = list.flRoomRolloffFactor; + + iDecayHFLimit = list.iDecayHFLimit; +} + +static const EFXREVERBPROPERTIES_list EFX_Reverb_Defaults[EAX_ENVIRONMENT_COUNT] = +{ + { "Generic", 1.0f, 1.0f, 0.316228f, 0.891251f, 1.0f, 1.49f, 0.83f, 1.0f, 0.050003f, 0.007f, {0.0f, 0.0f, 0.0f}, 1.258925f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Padded cell", 0.171500f, 1.0f, 0.316228f, 0.001f, 1.0f, 0.17f, 0.10f, 1.0f, 0.250035f, 0.001f, {0.0f, 0.0f, 0.0f}, 1.269112f, 0.002f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Room", 0.428687f, 1.0f, 0.316228f, 0.592925f, 1.0f, 0.40f, 0.83f, 1.0f, 0.150314f, 0.002f, {0.0f, 0.0f, 0.0f}, 1.062919f, 0.003f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Bathroom", 0.171500f, 1.0f, 0.316228f, 0.251189f, 1.0f, 1.49f, 0.54f, 1.0f, 0.653131f, 0.007f, {0.0f, 0.0f, 0.0f}, 3.273407f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Living room", 0.976563f, 1.0f, 0.316228f, 0.001f, 1.0f, 0.50f, 0.10f, 1.0f, 0.205116f, 0.003f, {0.0f, 0.0f, 0.0f}, 0.280543f, 0.004f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Stone room", 1.0f, 1.0f, 0.316228f, 0.707946f, 1.0f, 2.31f, 0.64f, 1.0f, 0.441062f, 0.012f, {0.0f, 0.0f, 0.0f}, 1.100272f, 0.017f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Auditorium", 1.0f, 1.0f, 0.316228f, 0.578096f, 1.0f, 4.32f, 0.59f, 1.0f, 0.403181f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.716968f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Concert hall", 1.0f, 1.0f, 0.316228f, 0.562341f, 1.0f, 3.92f, 0.70f, 1.0f, 0.242661f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.997700f, 0.029f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Cave", 1.0f, 1.0f, 0.316228f, 1.0f, 1.0f, 2.91f, 1.30f, 1.0f, 0.500035f, 0.015f, {0.0f, 0.0f, 0.0f}, 0.706318f, 0.022f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 }, + { "Arena", 1.0f, 1.0f, 0.316228f, 0.447713f, 1.0f, 7.24f, 0.33f, 1.0f, 0.261216f, 0.02f, {0.0f, 0.0f, 0.0f}, 1.018591f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Hangar", 1.0f, 1.0f, 0.316228f, 0.316228f, 1.0f, 10.05f, 0.23f, 1.0f, 0.500035f, 0.02f, {0.0f, 0.0f, 0.0f}, 1.256030f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Carpeted hallway", 0.428687f, 1.0f, 0.316228f, 0.01f, 1.0f, 0.30f, 0.10f, 1.0f, 0.121479f, 0.002f, {0.0f, 0.0f, 0.0f}, 0.153109f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Hallway", 0.364500f, 1.0f, 0.316228f, 0.707946f, 1.0f, 1.49f, 0.59f, 1.0f, 0.245754f, 0.007f, {0.0f, 0.0f, 0.0f}, 1.661499f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Stone corridor", 1.0f, 1.0f, 0.316228f, 0.761202f, 1.0f, 2.70f, 0.79f, 1.0f, 0.247172f, 0.013f, {0.0f, 0.0f, 0.0f}, 1.575796f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Alley", 1.0f, 0.30f, 0.316228f, 0.732825f, 1.0f, 1.49f, 0.86f, 1.0f, 0.250035f, 0.007f, {0.0f, 0.0f, 0.0f}, 0.995405f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.125f, 0.95f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Forest", 1.0f, 0.30f, 0.316228f, 0.022387f, 1.0f, 1.49f, 0.54f, 1.0f, 0.052481f, 0.162f, {0.0f, 0.0f, 0.0f}, 0.768245f, 0.088f, {0.0f, 0.0f, 0.0f}, 0.125f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "City", 1.0f, 0.50f, 0.316228f, 0.398107f, 1.0f, 1.49f, 0.67f, 1.0f, 0.073030f, 0.007f, {0.0f, 0.0f, 0.0f}, 0.142725f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Mountains", 1.0f, 0.27f, 0.316228f, 0.056234f, 1.0f, 1.49f, 0.21f, 1.0f, 0.040738f, 0.30f, {0.0f, 0.0f, 0.0f}, 0.191867f, 0.10f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 }, + { "Quarry", 1.0f, 1.0f, 0.316228f, 0.316228f, 1.0f, 1.49f, 0.83f, 1.0f, 0.0f, 0.061f, {0.0f, 0.0f, 0.0f}, 1.778279f, 0.025f, {0.0f, 0.0f, 0.0f}, 0.125f, 0.70f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Plain", 1.0f, 0.21f, 0.316228f, 0.10f, 1.0f, 1.49f, 0.50f, 1.0f, 0.058479f, 0.179f, {0.0f, 0.0f, 0.0f}, 0.108893f, 0.10f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Parking lot", 1.0f, 1.0f, 0.316228f, 1.0f, 1.0f, 1.65f, 1.50f, 1.0f, 0.208209f, 0.008f, {0.0f, 0.0f, 0.0f}, 0.265155f, 0.012f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 }, + { "Sewer pipe", 0.307063f, 0.80f, 0.316228f, 0.316228f, 1.0f, 2.81f, 0.14f, 1.0f, 1.638702f, 0.014f, {0.0f, 0.0f, 0.0f}, 3.247133f, 0.021f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 0.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Underwater", 0.364500f, 1.0f, 0.316228f, 0.01f, 1.0f, 1.49f, 0.10f, 1.0f, 0.596348f, 0.007f, {0.0f, 0.0f, 0.0f}, 7.079458f, 0.011f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 1.18f, 0.348f, 0.994260f, 5000.0f, 250.0f, 0.0f, 1 }, + { "Drugged", 0.428687f, 0.50f, 0.316228f, 1.0f, 1.0f, 8.39f, 1.39f, 1.0f, 0.875992f, 0.002f, {0.0f, 0.0f, 0.0f}, 3.108136f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 0.25f, 1.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 }, + { "Dizzy", 0.364500f, 0.60f, 0.316228f, 0.630957f, 1.0f, 17.23f, 0.56f, 1.0f, 0.139155f, 0.02f, {0.0f, 0.0f, 0.0f}, 0.493742f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 1.0f, 0.81f, 0.31f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 }, + { "Psychotic", 0.062500f, 0.50f, 0.316228f, 0.840427f, 1.0f, 7.56f, 0.91f, 1.0f, 0.486407f, 0.02f, {0.0f, 0.0f, 0.0f}, 2.437811f, 0.03f, {0.0f, 0.0f, 0.0f}, 0.25f, 0.0f, 4.00f, 1.0f, 0.994260f, 5000.0f, 250.0f, 0.0f, 0 } }; +SCP_vector EFX_presets; -#ifndef ALC_EXT_EFX -#define AL_FILTER_TYPE 0x8001 -#define AL_EFFECT_TYPE 0x8001 -#define AL_FILTER_NULL 0x0000 -#define AL_FILTER_LOWPASS 0x0001 -#define AL_EFFECT_NULL 0x0000 -#define AL_EFFECT_EAXREVERB 0x8000 -#define AL_EFFECT_REVERB 0x0001 -#define AL_EFFECT_ECHO 0x0004 -#define ALC_EFX_MAJOR_VERSION 0x20001 -#define ALC_EFX_MINOR_VERSION 0x20002 -#define ALC_MAX_AUXILIARY_SENDS 0x20003 - -#define AL_AUXILIARY_SEND_FILTER 0x20006 - -#define AL_EAXREVERB_DENSITY 0x0001 -#define AL_EAXREVERB_DIFFUSION 0x0002 -#define AL_EAXREVERB_GAIN 0x0003 -#define AL_EAXREVERB_GAINHF 0x0004 -#define AL_EAXREVERB_GAINLF 0x0005 -#define AL_EAXREVERB_DECAY_TIME 0x0006 -#define AL_EAXREVERB_DECAY_HFRATIO 0x0007 -#define AL_EAXREVERB_DECAY_LFRATIO 0x0008 -#define AL_EAXREVERB_REFLECTIONS_GAIN 0x0009 -#define AL_EAXREVERB_REFLECTIONS_DELAY 0x000A -#define AL_EAXREVERB_REFLECTIONS_PAN 0x000B -#define AL_EAXREVERB_LATE_REVERB_GAIN 0x000C -#define AL_EAXREVERB_LATE_REVERB_DELAY 0x000D -#define AL_EAXREVERB_LATE_REVERB_PAN 0x000E -#define AL_EAXREVERB_ECHO_TIME 0x000F -#define AL_EAXREVERB_ECHO_DEPTH 0x0010 -#define AL_EAXREVERB_MODULATION_TIME 0x0011 -#define AL_EAXREVERB_MODULATION_DEPTH 0x0012 -#define AL_EAXREVERB_AIR_ABSORPTION_GAINHF 0x0013 -#define AL_EAXREVERB_HFREFERENCE 0x0014 -#define AL_EAXREVERB_LFREFERENCE 0x0015 -#define AL_EAXREVERB_ROOM_ROLLOFF_FACTOR 0x0016 -#define AL_EAXREVERB_DECAY_HFLIMIT 0x0017 - -#define AL_EFFECTSLOT_NULL 0x0000 -#define AL_EFFECTSLOT_EFFECT 0x0001 -#endif typedef ALvoid (AL_APIENTRY * ALGENFILTERS) (ALsizei, ALuint*); typedef ALvoid (AL_APIENTRY * ALDELETEFILTERS) (ALsizei, ALuint*); @@ -233,6 +135,7 @@ typedef ALvoid (AL_APIENTRY * ALDELETEEFFECTS) (ALsizei, ALuint*); typedef ALvoid (AL_APIENTRY * ALEFFECTI) (ALuint, ALenum, ALint); typedef ALvoid (AL_APIENTRY * ALEFFECTF) (ALuint, ALenum, ALfloat); typedef ALvoid (AL_APIENTRY * ALEFFECTFV) (ALuint, ALenum, ALfloat*); +typedef ALvoid (AL_APIENTRY * ALGETEFFECTF) (ALuint, ALenum, ALfloat*); typedef ALvoid (AL_APIENTRY * ALGENAUXILIARYEFFECTSLOTS) (ALsizei, ALuint*); typedef ALvoid (AL_APIENTRY * ALDELETEAUXILIARYEFFECTSLOTS) (ALsizei, ALuint*); @@ -251,6 +154,7 @@ ALDELETEEFFECTS v_alDeleteEffects = NULL; ALEFFECTI v_alEffecti = NULL; ALEFFECTF v_alEffectf = NULL; ALEFFECTFV v_alEffectfv = NULL; +ALGETEFFECTF v_alGetEffectf = NULL; ALGENAUXILIARYEFFECTSLOTS v_alGenAuxiliaryEffectSlots = NULL; ALDELETEAUXILIARYEFFECTSLOTS v_alDeleteAuxiliaryEffectSlots = NULL; @@ -263,10 +167,10 @@ ALAUXILIARYEFFECTSLOTFV v_alAuxiliaryEffectSlotfv = NULL; ALCdevice *ds_sound_device = NULL; ALCcontext *ds_sound_context = NULL; -static ALuint AL_EFX_aux_id = 0; +ALuint AL_EFX_aux_id = 0; static ALuint AL_EFX_effect_id = 0; - +static int Ds_active_env = -1; @@ -287,11 +191,11 @@ static void al_efx_load_preset(unsigned int presetid) return; } - if (presetid >= EAX_ENVIRONMENT_COUNT) { + if (presetid >= EFX_presets.size()) { return; } - EFXEAXREVERBPROPERTIES *prop = &EFX_Presets[presetid]; + EFXREVERBPROPERTIES *prop = &EFX_presets[presetid]; OpenAL_ErrorPrint( v_alEffectf(AL_EFX_effect_id, AL_EAXREVERB_DENSITY, prop->flDensity) ); OpenAL_ErrorPrint( v_alEffectf(AL_EFX_effect_id, AL_EAXREVERB_DIFFUSION, prop->flDiffusion) ); @@ -316,6 +220,8 @@ static void al_efx_load_preset(unsigned int presetid) OpenAL_ErrorPrint( v_alEffectf(AL_EFX_effect_id, AL_EAXREVERB_LFREFERENCE, prop->flLFReference) ); OpenAL_ErrorPrint( v_alEffectf(AL_EFX_effect_id, AL_EAXREVERB_ROOM_ROLLOFF_FACTOR, prop->flRoomRolloffFactor) ); OpenAL_ErrorPrint( v_alEffecti(AL_EFX_effect_id, AL_EAXREVERB_DECAY_HFLIMIT, prop->iDecayHFLimit) ); + + Ds_active_env = presetid; } @@ -375,12 +281,26 @@ int ds_parse_sound(CFILE* fp, ubyte **dest, uint *dest_size, WAVEFORMATEX **head (*header)->wFormatTag = OGG_FORMAT_VORBIS; (*header)->nChannels = (ushort)ovf->vi->channels; (*header)->nSamplesPerSec = ovf->vi->rate; - (*header)->wBitsPerSample = 16; //OGGs always decoded at 16 bits here - (*header)->nBlockAlign = (ushort)(ovf->vi->channels * 2); - (*header)->nAvgBytesPerSec = ovf->vi->rate * ovf->vi->channels * 2; + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + (*header)->wBitsPerSample = Ds_float_supported ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + (*header)->wBitsPerSample = 16; + break; + + default: + (*header)->wBitsPerSample = 8; + break; + } + + (*header)->nBlockAlign = (ushort)(((*header)->wBitsPerSample / 8) * ovf->vi->channels); + (*header)->nAvgBytesPerSec = ovf->vi->rate * (*header)->nBlockAlign; //WMC - Total samples * channels * bits/sample - *dest_size = (uint)(ov_pcm_total(ovf, -1) * ovf->vi->channels * 2); + *dest_size = (uint)(ov_pcm_total(ovf, -1) * (*header)->nBlockAlign); } else { Assert( 0 ); return -1; @@ -424,7 +344,57 @@ int ds_parse_sound(CFILE* fp, ubyte **dest, uint *dest_size, WAVEFORMATEX **head PCM_header.wf.nBlockAlign = cfread_ushort(fp); PCM_header.wBitsPerSample = cfread_ushort(fp); - if (PCM_header.wf.wFormatTag != WAVE_FORMAT_PCM) + // should be either: WAVE_FORMAT_PCM, WAVE_FORMAT_ADPCM, WAVE_FORMAT_IEEE_FLOAT + switch (PCM_header.wf.wFormatTag) { + case WAVE_FORMAT_PCM: { + if ( (PCM_header.wBitsPerSample != 8) && (PCM_header.wBitsPerSample != 16) ) { + nprintf(("Sound", "SOUND ==> %d-bit PCM is not supported!\n", PCM_header.wBitsPerSample)); + return -1; + } + + // fix block align + PCM_header.wf.nBlockAlign = (PCM_header.wBitsPerSample / 8) * PCM_header.wf.nChannels; + + break; + } + + case WAVE_FORMAT_IEEE_FLOAT: { + if (PCM_header.wBitsPerSample != 32) { + nprintf(("Sound", "SOUND ==> %d-bit FLOAT PCM is not supported!\n", PCM_header.wBitsPerSample)); + return -1; + } + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + PCM_header.wBitsPerSample = Ds_float_supported ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + PCM_header.wBitsPerSample = 16; + break; + + default: + PCM_header.wBitsPerSample = 8; + break; + } + + // fix block align + PCM_header.wf.nBlockAlign = (PCM_header.wBitsPerSample / 8) * PCM_header.wf.nChannels; + + break; + } + + case WAVE_FORMAT_ADPCM: + // block align doesn't get fixed here + break; + + default: { + nprintf(("Sound", "SOUND ==> Format '%d' is not supported!\n", PCM_header.wf.wFormatTag)); + return -1; + } + } + + if (PCM_header.wf.wFormatTag == WAVE_FORMAT_ADPCM) cbExtra = cfread_ushort(fp); // Allocate memory for WAVEFORMATEX structure + extra bytes @@ -437,7 +407,8 @@ int ds_parse_sound(CFILE* fp, ubyte **dest, uint *dest_size, WAVEFORMATEX **head if (cbExtra != 0) cfread( ((ubyte *)(*header) + sizeof(WAVEFORMATEX)), cbExtra, 1, fp); } else { - Assert(0); // malloc failed + // malloc failed + return -1; } got_fmt = true; @@ -494,6 +465,7 @@ int ds_parse_sound_info(char *real_filename, sound_info *s_info) char filename[MAX_FILENAME_LEN]; const int NUM_EXT = 2; const char *audio_ext[NUM_EXT] = { ".ogg", ".wav" }; + int rval = -1; if ( (real_filename == NULL) || (s_info == NULL) ) @@ -526,21 +498,37 @@ int ds_parse_sound_info(char *real_filename, sound_info *s_info) // we only support one logical bitstream if ( ov_streams(&ovf) != 1 ) { nprintf(( "Sound", "SOUND ==> OGG reading error: We don't support bitstream changes!\n" )); - return -1; + ov_clear(&ovf); + goto Done; } s_info->format = OGG_FORMAT_VORBIS; s_info->n_channels = (ushort)ovf.vi->channels; s_info->sample_rate = ovf.vi->rate; - s_info->bits = 16; //OGGs always decoded at 16 bits here - s_info->n_block_align = (ushort)(ovf.vi->channels * 2); - s_info->avg_bytes_per_sec = ovf.vi->rate * ovf.vi->channels * 2; - s_info->size = (uint)(ov_pcm_total(&ovf, -1) * ovf.vi->channels * 2); + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + s_info->bits = Ds_float_supported ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + s_info->bits = 16; + break; + + default: + s_info->bits = 8; + break; + } + + s_info->n_block_align = (ushort)((s_info->bits / 8) * s_info->n_channels); + s_info->avg_bytes_per_sec = s_info->sample_rate * s_info->n_block_align; + + s_info->size = (uint)(ov_pcm_total(&ovf, -1) * s_info->n_block_align); ov_clear(&ovf); // we're all good, can leave now + rval = 0; goto Done; } } @@ -576,12 +564,62 @@ int ds_parse_sound_info(char *real_filename, sound_info *s_info) PCM_header.wf.nBlockAlign = cfread_ushort(fp); PCM_header.wBitsPerSample = cfread_ushort(fp); + // should be either: WAVE_FORMAT_PCM, WAVE_FORMAT_ADPCM, WAVE_FORMAT_IEEE_FLOAT + switch (PCM_header.wf.wFormatTag) { + case WAVE_FORMAT_PCM: { + if ( (PCM_header.wBitsPerSample != 8) && (PCM_header.wBitsPerSample != 16) ) { + nprintf(("Sound", "SOUND ==> %d-bit PCM is not supported!\n", PCM_header.wBitsPerSample)); + goto Done; + } + + // fix block align + PCM_header.wf.nBlockAlign = (PCM_header.wBitsPerSample / 8) * PCM_header.wf.nChannels; + + break; + } + + case WAVE_FORMAT_IEEE_FLOAT: { + if (PCM_header.wBitsPerSample != 32) { + nprintf(("Sound", "SOUND ==> %d-bit FLOAT PCM is not supported!\n", PCM_header.wBitsPerSample)); + goto Done; + } + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + PCM_header.wBitsPerSample = Ds_float_supported ? 32 : 16; + break; + + case DS_SQ_MEDIUM: + PCM_header.wBitsPerSample = 16; + break; + + default: + PCM_header.wBitsPerSample = 8; + break; + } + + // fix block align + PCM_header.wf.nBlockAlign = (PCM_header.wBitsPerSample / 8) * PCM_header.wf.nChannels; + + break; + } + + case WAVE_FORMAT_ADPCM: + // block align doesn't get fixed here + break; + + default: { + nprintf(("Sound", "SOUND ==> Format '%d' is not supported!\n", PCM_header.wf.wFormatTag)); + goto Done; + } + } + s_info->format = PCM_header.wf.wFormatTag; s_info->n_channels = PCM_header.wf.nChannels; s_info->sample_rate = PCM_header.wf.nSamplesPerSec; s_info->bits = PCM_header.wBitsPerSample; - s_info->n_block_align = PCM_header.wf.nBlockAlign; s_info->avg_bytes_per_sec = PCM_header.wf.nAvgBytesPerSec; + s_info->n_block_align = PCM_header.wf.nBlockAlign; got_fmt = true; @@ -597,18 +635,18 @@ int ds_parse_sound_info(char *real_filename, sound_info *s_info) break; } - if (got_fmt && got_data) + if (got_fmt && got_data) { + rval = 0; goto Done; + } cfseek( fp, next_chunk, CF_SEEK_SET ); } } - return -1; - Done: cfclose(fp); - return 0; + return rval; } // --------------------------------------------------------------------------------------- @@ -679,10 +717,10 @@ int ds_load_buffer(int *sid, int *final_size, void *header, sound_info *si, int ALenum format; ALsizei size; - ALint bits, bps; + ALint bits, bps, n_channels = si->n_channels; ALuint frequency; ALvoid *data = NULL; - int byte_order = 0, section, last_section = -1; + int sign, byte_order = 0, section, last_section = -1; // the below two covnert_ variables are only used when the wav format is not // PCM. DirectSound only takes PCM sound data, so we must convert to PCM if required @@ -694,11 +732,13 @@ int ds_load_buffer(int *sid, int *final_size, void *header, sound_info *si, int switch (si->format) { - case WAVE_FORMAT_PCM: + case WAVE_FORMAT_PCM: { Assert( si->data != NULL ); + bits = si->bits; bps = si->avg_bytes_per_sec; size = si->size; + #if BYTE_ORDER == BIG_ENDIAN // swap 16-bit sound data if (bits == 16) { @@ -710,14 +750,20 @@ int ds_load_buffer(int *sid, int *final_size, void *header, sound_info *si, int } } #endif - data = si->data; - break; - case WAVE_FORMAT_ADPCM: + data = si->data; + + break; + } + + case WAVE_FORMAT_ADPCM: { Assert( si->data != NULL ); - // this ADPCM decoder decodes to 16-bit only so keep that in mind - nprintf(( "Sound", "SOUND ==> converting sound from ADPCM to PCM\n" )); - rc = ACM_convert_ADPCM_to_PCM(pwfx, si->data, si->size, &convert_buffer, 0, &convert_len, &src_bytes_used, 16); + + bits = (Ds_sound_quality == DS_SQ_LOW) ? 8 : 16; + + nprintf(( "Sound", "SOUND ==> Converting sound from ADPCM to PCM\n" )); + + rc = ACM_convert_ADPCM_to_PCM(pwfx, si->data, si->size, &convert_buffer, 0, &convert_len, &src_bytes_used, bits); if ( rc == -1 ) { return -1; @@ -727,85 +773,240 @@ int ds_load_buffer(int *sid, int *final_size, void *header, sound_info *si, int return -1; // ACM conversion failed? } - bits = 16; bps = (((si->n_channels * bits) / 8) * si->sample_rate); size = convert_len; data = convert_buffer; nprintf(( "Sound", "SOUND ==> Coverted sound from ADPCM to PCM successfully\n" )); - break; - case OGG_FORMAT_VORBIS: + break; + } + + case WAVE_FORMAT_IEEE_FLOAT: { + Assert( si->data != NULL ); + + bits = si->bits; + +#if BYTE_ORDER == BIG_ENDIAN + // need to byte-swap before any later conversions + float *swap_tmp; + + for (uint i = 0; i < si->size; i += sizeof(float)) { + swap_tmp = (float *)(si->data + i); + *swap_tmp = INTEL_FLOAT(swap_tmp); + } +#endif + + if (bits == 32) { + bps = si->avg_bytes_per_sec; + size = si->size; + + data = si->data; + } else if (bits == 16) { + bps = si->avg_bytes_per_sec >> 1; + size = si->size >> 1; + + convert_buffer = (ubyte*)vm_malloc_q(size); + + if (convert_buffer == NULL) { + return -1; + } + + float *in_p = (float*)si->data; + short *out_p = (short*)convert_buffer; + + int end = si->size / sizeof(float); + + for (int i = 0; i < end; i++) { + int i_val = (int)(in_p[i] * 32767.0f + 0.5f); + CLAMP(i_val, -32768, 32767); + + *out_p++ = (short)i_val; + } + + data = convert_buffer; + } else { + bps = si->avg_bytes_per_sec >> 2; + size = si->size >> 2; + + convert_buffer = (ubyte*)vm_malloc_q(size); + + if (convert_buffer == NULL) { + return -1; + } + + float *in_p = (float*)si->data; + ubyte *out_p = (ubyte*)convert_buffer; + + int end = si->size / sizeof(float); + + for (int i = 0; i < end; i++) { + int i_val = (int)(in_p[i] * 127.0f + 0.5f) + 128; + CLAMP(i_val, 0, 255); + + *out_p++ = (ubyte)i_val; + } + + data = convert_buffer; + } + + break; + } + + case OGG_FORMAT_VORBIS: { nprintf(( "Sound", "SOUND ==> converting sound from OGG to PCM\n" )); + sign = (si->bits == 8) ? 0 : 1; #if BYTE_ORDER == BIG_ENDIAN byte_order = 1; #endif src_bytes_used = 0; - convert_buffer = (ubyte*)vm_malloc(si->size); - Assert(convert_buffer != NULL); - if (convert_buffer == NULL) + convert_buffer = (ubyte*)vm_malloc_q(si->size); + + if (convert_buffer == NULL) { return -1; + } while (src_bytes_used < si->size) { - rc = ov_read(&si->ogg_info, (char *) convert_buffer + src_bytes_used, si->size - src_bytes_used, byte_order, si->bits / 8, 1, §ion); + float **pcm; + + if (si->bits == 32) { + rc = ov_read_float(&si->ogg_info, &pcm, 1024, §ion); + } else { + rc = ov_read(&si->ogg_info, (char *) convert_buffer + src_bytes_used, si->size - src_bytes_used, byte_order, si->bits / 8, sign, §ion); + } // fail if the bitstream changes, shouldn't get this far if that's the case though if ((last_section != -1) && (last_section != section)) { nprintf(( "Sound", "SOUND ==> OGG reading error: We don't support bitstream changes!\n" )); + ov_clear(&si->ogg_info); vm_free(convert_buffer); convert_buffer = NULL; return -1; } if (rc == OV_EBADLINK) { + ov_clear(&si->ogg_info); vm_free(convert_buffer); convert_buffer = NULL; + return -1; } else if (rc == 0) { break; } else if (rc > 0) { + if (si->bits == 32) { + float *out_p = (float*)(convert_buffer + src_bytes_used); + + for (int i = 0; i < rc; i++) { + for (int j = 0; j < si->n_channels; j++) { + *out_p++ = pcm[j][i]; + } + } + + src_bytes_used += (rc * si->n_block_align); + } else { + src_bytes_used += rc; + } + last_section = section; - src_bytes_used += rc; } } bits = si->bits; - bps = (((si->n_channels * bits) / 8) * si->sample_rate); + bps = si->avg_bytes_per_sec; size = (int)src_bytes_used; + data = convert_buffer; // we're done with ogg stuff so clean it up ov_clear(&si->ogg_info); - nprintf(( "Sound", "SOUND ==> Coverted sound from OGG to PCM successfully\n" )); + nprintf(( "Sound", "SOUND ==> Coverted sound from OGG successfully\n" )); + break; + } default: return -1; } + // if this is supposed to play in 3D then make sure it's mono + if ( (flags & DS_3D) && (n_channels > 1) ) { + ubyte *mono_buffer = NULL; + + mono_buffer = (ubyte*)vm_malloc_q(size); + + if (mono_buffer == NULL) { + if (convert_buffer) { + vm_free(convert_buffer); + } + + return -1; + } + + if (bits == 32) { + float *in_p = (float*)data; + float *out_p = (float*)mono_buffer; + + int end = size / sizeof(float); + + for (int i = 0; i < end; i += 2) { + float i_val = (in_p[i] + in_p[i+1]) * 0.5f; + CLAMP(i_val, -1.0f, 1.0f); + + *out_p++ = i_val; + } + } else if (bits == 16) { + short *in_p = (short*)data; + short *out_p = (short*)mono_buffer; + + int end = size / sizeof(short); + + for (int i = 0; i < end; i += 2) { + int i_val = (in_p[i] + in_p[i+1]) >> 1; + CLAMP(i_val, -32768, 32767); + + *out_p++ = (short)i_val; + } + } else { + Assert( bits == 8 ); + + ubyte *in_p = (ubyte*)data; + ubyte *out_p = (ubyte*)mono_buffer; + + for (int i = 0; i < size; i += 2) { + int i_val = (in_p[i] + in_p[i+1]) >> 1; + CLAMP(i_val, 0, 255); + + *out_p++ = (ubyte)i_val; + } + } + + n_channels = 1; + size >>= 1; + bps >>= 1; + + data = mono_buffer; + + if (convert_buffer) { + vm_free(convert_buffer); + convert_buffer = NULL; + } + + nprintf(("Sound", "SOUND ==> Converted 3D sound from stereo to mono\n")); + } + /* format is now in pcm */ frequency = si->sample_rate; - if (bits == 16) { - if (si->n_channels == 2) { - format = AL_FORMAT_STEREO16; - } else if (si->n_channels == 1) { - format = AL_FORMAT_MONO16; - } else { - return -1; + format = openal_get_format(bits, n_channels); + + if (format == AL_INVALID_VALUE) { + if (convert_buffer) { + vm_free(convert_buffer); } - } else if (bits == 8) { - if (si->n_channels == 2) { - format = AL_FORMAT_STEREO8; - } else if (si->n_channels == 1) { - format = AL_FORMAT_MONO8; - } else { - return -1; - } - } else { + return -1; } @@ -815,16 +1016,23 @@ int ds_load_buffer(int *sid, int *final_size, void *header, sound_info *si, int *final_size = size; } - OpenAL_ErrorCheck( alBufferData(pi, format, data, size, frequency), return -1 ); + OpenAL_ErrorCheck( alBufferData(pi, format, data, size, frequency), { if (convert_buffer) vm_free(convert_buffer); return -1; } ); sound_buffers[*sid].buf_id = pi; sound_buffers[*sid].channel_id = -1; sound_buffers[*sid].frequency = frequency; sound_buffers[*sid].bits_per_sample = bits; - sound_buffers[*sid].nchannels = si->n_channels; + sound_buffers[*sid].nchannels = n_channels; sound_buffers[*sid].nseconds = size / bps; sound_buffers[*sid].nbytes = size; + // update sound_info struct with any changed data + si->bits = bits; + si->n_channels = n_channels; + si->size = size; + si->n_block_align = (bits / 8) * n_channels; + si->avg_bytes_per_sec = bps; + if ( convert_buffer ) vm_free( convert_buffer ); @@ -863,15 +1071,36 @@ void ds_init_buffers() // // returns: -1 => init failed // 0 => init success -int ds_init(int use_eax, unsigned int sample_rate) +int ds_init() { ALfloat list_orien[] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f }; - ALCint attrList[] = { ALC_FREQUENCY, sample_rate, 0 }; - - Ds_use_eax = use_eax; + ALCint attrList[] = { ALC_FREQUENCY, 22050, 0 }; + unsigned int sample_rate = 22050; mprintf(("Initializing OpenAL...\n")); + Ds_sound_quality = os_config_read_uint("Sound", "Quality", DS_SQ_MEDIUM); + CLAMP(Ds_sound_quality, DS_SQ_LOW, DS_SQ_HIGH); + + switch (Ds_sound_quality) { + case DS_SQ_HIGH: + sample_rate = 48000; + break; + + case DS_SQ_MEDIUM: + sample_rate = 44100; + break; + + default: + sample_rate = 22050; + break; + } + + sample_rate = os_config_read_uint("Sound", "SampleRate", sample_rate); + + attrList[1] = sample_rate; + + std::string playback_device; std::string capture_device; @@ -903,12 +1132,20 @@ int ds_init(int use_eax, unsigned int sample_rate) // make sure we can actually use AL_BYTE_LOKI (Mac/Win OpenAL doesn't have it) if ( alIsExtensionPresent( (const ALchar*)"AL_LOKI_play_position" ) == AL_TRUE ) { - mprintf((" Using extension \"AL_LOKI_play_position\".\n")); + mprintf((" Found extension \"AL_LOKI_play_position\".\n")); AL_play_position = 1; } - if ( alcIsExtensionPresent(ds_sound_device, (const ALchar*)"ALC_EXT_EFX") == AL_FALSE ) { - Ds_use_eax = 0; + if ( alIsExtensionPresent( (const ALchar*)"AL_EXT_float32" ) == AL_TRUE ) { + mprintf((" Found extension \"AL_EXT_float32\".\n")); + Ds_float_supported = 1; + } + + Ds_use_eax = 0; + + if ( alcIsExtensionPresent(ds_sound_device, (const ALchar*)"ALC_EXT_EFX") == AL_TRUE ) { + mprintf((" Found extension \"ALC_EXT_EFX\".\n")); + Ds_use_eax = os_config_read_uint("Sound", "EnableEFX", Fred_running); } if (Ds_use_eax == 1) { @@ -917,11 +1154,23 @@ int ds_init(int use_eax, unsigned int sample_rate) } } + // the presets always need to be available to FRED + if ( !Ds_use_eax && Fred_running ) { + EFX_presets.reserve(EAX_ENVIRONMENT_COUNT); + + for (int i = 0; i < EAX_ENVIRONMENT_COUNT; i++) { + EFX_presets.push_back( EFX_Reverb_Defaults[i] ); + } + } + // setup default listener position/orientation // this is needed for 2D pan OpenAL_ErrorPrint( alListener3f(AL_POSITION, 0.0, 0.0, 0.0) ); OpenAL_ErrorPrint( alListenerfv(AL_ORIENTATION, list_orien) ); + // disable doppler (FIXME) + OpenAL_ErrorPrint( alDopplerFactor(0.0f) ); + ds_init_channels(); ds_init_buffers(); @@ -1278,25 +1527,9 @@ int ds_lock_data(int sid, unsigned char *data, int size) return -1; } - ALenum format; + ALenum format = openal_get_format(sound_buffers[sid].bits_per_sample, sound_buffers[sid].nchannels); - if (sound_buffers[sid].bits_per_sample == 16) { - if (sound_buffers[sid].nchannels == 2) { - format = AL_FORMAT_STEREO16; - } else if (sound_buffers[sid].nchannels == 1) { - format = AL_FORMAT_MONO16; - } else { - return -1; - } - } else if (sound_buffers[sid].bits_per_sample == 8) { - if (sound_buffers[sid].nchannels == 2) { - format = AL_FORMAT_STEREO8; - } else if (sound_buffers[sid].nchannels == 1) { - format = AL_FORMAT_MONO8; - } else { - return -1; - } - } else { + if (format == AL_INVALID_VALUE) { return -1; } @@ -1947,6 +2180,7 @@ int ds_eax_set_all(unsigned long id, float vol, float damping, float decay) // special disabled case if ( (id == EAX_ENVIRONMENT_GENERIC) && (vol == 0.0f) && (damping == 0.0f) && (decay == 0.0f) ) { v_alAuxiliaryEffectSloti(AL_EFX_aux_id, AL_EFFECTSLOT_EFFECT, AL_EFFECT_NULL); + Ds_active_env = -1; return 0; } @@ -1965,15 +2199,125 @@ int ds_eax_set_all(unsigned long id, float vol, float damping, float decay) return 0; } +int ds_eax_get_preset_id(const char *name) +{ + if ( !name || !strlen(name) ) { + return -1; + } + + size_t count = EFX_presets.size(); + + for (size_t i = 0; i < count; i++) { + if ( !stricmp(name, EFX_presets[i].name.c_str()) ) { + return i; + } + } + + return -1; +} + +int ds_eax_get_prop(EFXREVERBPROPERTIES **props, const char *name, const char *template_name) +{ + Assert( props != NULL ); + Assert( name != NULL ); + Assert( strlen(name) > 0 ); + + int template_id = -1; + + int id = ds_eax_get_preset_id(name); + + if (id >= 0) { + *props = &EFX_presets[id]; + } else { + id = EFX_presets.size(); + + EFXREVERBPROPERTIES n_prop; + + if ( (template_name != NULL) && (strlen(template_name) > 0) ) { + template_id = ds_eax_get_preset_id(template_name); + } + + if (template_id >= 0) { + n_prop = EFX_presets[template_id]; + n_prop.name = name; + } else { + n_prop.name = name; + n_prop.flDensity = 1.0f; + n_prop.flDiffusion = 1.0f; + n_prop.flGain = 0.32f; + n_prop.flGainHF = 0.89f; + n_prop.flGainLF = 0.0f; + n_prop.flDecayTime = 1.49f; + n_prop.flDecayHFRatio = 0.83f; + n_prop.flDecayLFRatio = 1.0f; + n_prop.flReflectionsGain = 0.05f; + n_prop.flReflectionsDelay = 0.007f; + n_prop.flReflectionsPan[0] = 0.0f; + n_prop.flReflectionsPan[1] = 0.0f; + n_prop.flReflectionsPan[2] = 0.0f; + n_prop.flLateReverbGain = 1.26f; + n_prop.flLateReverbDelay = 0.011f; + n_prop.flLateReverbPan[0] = 0.0f; + n_prop.flLateReverbPan[1] = 0.0f; + n_prop.flLateReverbPan[2] = 0.0f; + n_prop.flEchoTime = 0.25f; + n_prop.flEchoDepth = 0.0f; + n_prop.flModulationTime = 0.25f; + n_prop.flModulationDepth = 0.0f; + n_prop.flAirAbsorptionGainHF = 0.994f; + n_prop.flHFReference = 5000.0f; + n_prop.flLFReference = 250.0f; + n_prop.flRoomRolloffFactor = 0.0f; + n_prop.iDecayHFLimit = AL_TRUE; + } + + EFX_presets.push_back( n_prop ); + + *props = &EFX_presets[id]; + } + + if ( !stricmp(name, "default") ) { + extern unsigned int SND_ENV_DEFAULT; + SND_ENV_DEFAULT = id; + } + + return 0; +} + // Get up the parameters for the current environment // // er: (output) hold environment parameters +// id: if set will get specified preset env, otherwise current env // // returns: 0 if successful, otherwise return -1 // -int ds_eax_get_all(EAX_REVERBPROPERTIES *er) +int ds_eax_get_all(EAX_REVERBPROPERTIES *er, int id) { - return -1; + if ( !er ) { + return -1; + } + + if (id < 0) { + if (Ds_active_env < 0) { + return -1; + } + + er->environment = Ds_active_env; + + OpenAL_ErrorPrint( v_alGetEffectf(AL_EFX_effect_id, AL_EAXREVERB_GAIN, &er->fVolume) ); + OpenAL_ErrorPrint( v_alGetEffectf(AL_EFX_effect_id, AL_EAXREVERB_DECAY_TIME, &er->fDecayTime_sec) ); + OpenAL_ErrorPrint( v_alGetEffectf(AL_EFX_effect_id, AL_EAXREVERB_DECAY_HFRATIO, &er->fDamping) ); + } else if (id < (int)EFX_presets.size()) { + er->environment = (unsigned int)id; + + er->fVolume = EFX_presets[id].flGain; + er->fDecayTime_sec = EFX_presets[id].flDecayTime; + er->fDamping = EFX_presets[id].flDecayHFRatio; + } else { + return -1; + } + + return 0; } // Close down EAX, freeing any allocated resources @@ -2014,6 +2358,7 @@ int ds_eax_init() v_alEffecti = (ALEFFECTI) al_load_function("alEffecti"); v_alEffectf = (ALEFFECTF) al_load_function("alEffectf"); v_alEffectfv = (ALEFFECTFV) al_load_function("alEffectfv"); + v_alGetEffectf = (ALGETEFFECTF) al_load_function("alGetEffectf"); v_alGenAuxiliaryEffectSlots = (ALGENAUXILIARYEFFECTSLOTS) al_load_function("alGenAuxiliaryEffectSlots"); v_alDeleteAuxiliaryEffectSlots = (ALDELETEAUXILIARYEFFECTSLOTS) al_load_function("alDeleteAuxiliaryEffectSlots"); @@ -2057,11 +2402,17 @@ int ds_eax_init() return -1; } - ds_eax_set_all(EAX_ENVIRONMENT_GENERIC, 0.0f, 0.0f, 0.0f); + // add default presets + EFX_presets.reserve(EAX_ENVIRONMENT_COUNT); + + for (int i = 0; i < EAX_ENVIRONMENT_COUNT; i++) { + EFX_presets.push_back( EFX_Reverb_Defaults[i] ); + } Ds_eax_inited = 1; - mprintf(( " Using extension \"ALC_EXT_EFX\".\n" )); + // disabled by default + ds_eax_set_all(EAX_ENVIRONMENT_GENERIC, 0.0f, 0.0f, 0.0f); return 0; } diff --git a/code/sound/ds.h b/code/sound/ds.h index 588e11815d..1bfd29a58f 100644 --- a/code/sound/ds.h +++ b/code/sound/ds.h @@ -28,12 +28,22 @@ #define MAX_PITCH 100000 +// User specified sound quality +#define DS_SQ_LOW 0 +#define DS_SQ_MEDIUM 1 +#define DS_SQ_HIGH 2 + +extern int Ds_sound_quality; +extern int Ds_float_supported; + // limits placed on how many concurrent sounds of the same type can play simultaneously #define DS_MUST_PLAY 0 #define DS_LIMIT_ONE 1 #define DS_LIMIT_TWO 2 #define DS_LIMIT_THREE 3 +#define DS_3D (1<<0) + typedef struct sound_info { int format; // WAVE_FORMAT_* defines from mmreg.h OggVorbis_File ogg_info; @@ -49,7 +59,7 @@ typedef struct sound_info { extern int ds_initialized; -int ds_init(int use_eax, unsigned int sample_rate); +int ds_init(); void ds_close(); int ds_parse_sound(CFILE *fp, ubyte **dest, uint *dest_size, WAVEFORMATEX **header, bool ogg = false, OggVorbis_File *ovf = NULL); int ds_parse_sound_info(char *real_filename, sound_info *s_info); @@ -93,6 +103,75 @@ void ds_do_frame(); // -------------------- // use this structure for get/set all properties... + +// used for const array of default values +typedef struct EFXREVERBPROPERTIES_list +{ + char *name; + + float flDensity; + float flDiffusion; + float flGain; + float flGainHF; + float flGainLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + float flReflectionsGain; + float flReflectionsDelay; + float flReflectionsPan[3]; + float flLateReverbGain; + float flLateReverbDelay; + float flLateReverbPan[3]; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionGainHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + int iDecayHFLimit; +} EFXREVERBPROPERTIES_list; + +typedef struct EFXREVERBPROPERTIES +{ + SCP_string name; + + float flDensity; + float flDiffusion; + float flGain; + float flGainHF; + float flGainLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + float flReflectionsGain; + float flReflectionsDelay; + float flReflectionsPan[3]; + float flLateReverbGain; + float flLateReverbDelay; + float flLateReverbPan[3]; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionGainHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + int iDecayHFLimit; + + EFXREVERBPROPERTIES() + { + } + + EFXREVERBPROPERTIES(const EFXREVERBPROPERTIES_list &list); +} EFXREVERBPROPERTIES; + +extern SCP_vector EFX_presets; + + typedef struct { unsigned int environment; // 0 to EAX_ENVIRONMENT_COUNT-1 @@ -141,6 +220,9 @@ enum int ds_eax_init(); void ds_eax_close(); +int ds_eax_get_preset_id(const char *name); +int ds_eax_get_prop(EFXREVERBPROPERTIES **props, const char *name, const char *template_name = NULL); + int ds_eax_set_preset(unsigned long envid); int ds_eax_set_volume(float volume); @@ -148,7 +230,7 @@ int ds_eax_set_decay_time(float seconds); int ds_eax_set_damping(float damp); int ds_eax_set_environment(unsigned long envid); int ds_eax_set_all(unsigned long id, float volume, float damping, float decay); -int ds_eax_get_all(EAX_REVERBPROPERTIES *er); +int ds_eax_get_all(EAX_REVERBPROPERTIES *er, int id = -1); int ds_eax_is_inited(); #endif /* __DS_H__ */ diff --git a/code/sound/ds3d.cpp b/code/sound/ds3d.cpp index 38b7e399d9..bbc8459197 100644 --- a/code/sound/ds3d.cpp +++ b/code/sound/ds3d.cpp @@ -46,7 +46,7 @@ int ds3d_update_buffer(int channel, float min, float max, vec3d *pos, vec3d *vel if (vel) { OpenAL_ErrorPrint( alSource3f(source_id, AL_VELOCITY, vel->xyz.x, vel->xyz.y, vel->xyz.z) ); - OpenAL_ErrorPrint( alSourcef(source_id, AL_DOPPLER_FACTOR, 1.0f) ); + // OpenAL_ErrorPrint( alSourcef(source_id, AL_DOPPLER_FACTOR, 1.0f) ); } else { OpenAL_ErrorPrint( alSource3f(source_id, AL_VELOCITY, 0.0f, 0.0f, 0.0f) ); OpenAL_ErrorPrint( alSourcef(source_id, AL_DOPPLER_FACTOR, 0.0f) ); diff --git a/code/sound/rtvoice.cpp b/code/sound/rtvoice.cpp index ed8725a116..9c4aca51ac 100644 --- a/code/sound/rtvoice.cpp +++ b/code/sound/rtvoice.cpp @@ -13,7 +13,6 @@ #include "sound/sound.h" #include "sound/ds.h" #include "sound/dscap.h" -#include "vcodec/codec1.h" #include "sound/rtvoice.h" @@ -35,7 +34,6 @@ static rtv_format Rtv_formats[MAX_RTV_FORMATS] = {1, 8, 44100}, }; -static int Rtv_do_compression=1; // flag to indicate whether compression should be done static int Rtv_recording_format; // recording format, index into Rtv_formats[] static int Rtv_playback_format; // playback format, index into Rtv_formats[] @@ -55,7 +53,7 @@ typedef struct rtv_out_buffer } rtv_out_buffer; static rtv_out_buffer Rtv_output_buffers[MAX_RTV_OUT_BUFFERS]; // data for output buffers -static struct t_CodeInfo Rtv_code_info; // Parms will need to be transmitted with packets +//static struct t_CodeInfo Rtv_code_info; // Parms will need to be transmitted with packets // recording timer data #ifdef _WIN32 @@ -73,16 +71,10 @@ static unsigned char *Rtv_capture_compressed_buffer; static int Rtv_capture_compressed_buffer_size; static int Rtv_capture_raw_buffer_size; -static unsigned char *Encode_buffer1=NULL; -static unsigned char *Encode_buffer2=NULL; - // playback/decoding buffers static unsigned char *Rtv_playback_uncompressed_buffer; static int Rtv_playback_uncompressed_buffer_size; -static unsigned char *Decode_buffer=NULL; -static int Decode_buffer_size; - ///////////////////////////////////////////////////////////////////////////////////////////////// // RECORD/ENCODE ///////////////////////////////////////////////////////////////////////////////////////////////// @@ -147,7 +139,7 @@ int rtvoice_pick_record_format() // input: qos => new quality of service (1..10) void rtvoice_set_qos(int qos) { - InitEncoder(e_cCodec1, qos, Encode_buffer1, Encode_buffer2); + // TODO: Speex stuff } // Init the recording portion of the real-time voice system @@ -156,8 +148,7 @@ void rtvoice_set_qos(int qos) // !0 => failure, recording not possible int rtvoice_init_recording(int qos) { - return -1; -/* +#if 0 if ( !Rtv_recording_inited ) { if ( rtvoice_pick_record_format() ) { return -1; @@ -165,25 +156,10 @@ int rtvoice_init_recording(int qos) Rtv_capture_raw_buffer_size = Rtv_formats[Rtv_recording_format].frequency * (RTV_BUFFER_TIME) * fl2i(Rtv_formats[Rtv_recording_format].bits_per_sample/8.0f); - if ( Encode_buffer1 ) { - vm_free(Encode_buffer1); - Encode_buffer1=NULL; - } - if ( dscap_create_buffer(Rtv_formats[Rtv_recording_format].frequency, Rtv_formats[Rtv_recording_format].bits_per_sample, 1, RTV_BUFFER_TIME) ) { return -1; } - Encode_buffer1 = (unsigned char*)vm_malloc(Rtv_capture_raw_buffer_size); - Assert(Encode_buffer1); - - if ( Encode_buffer2 ) { - vm_free(Encode_buffer2); - Encode_buffer2=NULL; - } - Encode_buffer2 = (unsigned char*)vm_malloc(Rtv_capture_raw_buffer_size); - Assert(Encode_buffer2); - // malloc out the voice data buffer for raw (uncompressed) recorded sound if ( Rtv_capture_raw_buffer ) { vm_free(Rtv_capture_raw_buffer); @@ -199,12 +175,12 @@ int rtvoice_init_recording(int qos) Rtv_capture_compressed_buffer_size=Rtv_capture_raw_buffer_size; // be safe and allocate same as uncompressed Rtv_capture_compressed_buffer = (unsigned char*)vm_malloc(Rtv_capture_compressed_buffer_size); - InitEncoder(e_cCodec1, qos, Encode_buffer1, Encode_buffer2); - Rtv_recording_inited=1; } return 0; -*/ +#else + return -1; +#endif } // Stop a stream from recording @@ -222,7 +198,6 @@ void rtvoice_stop_recording() Rtv_record_timer_id = NULL; #else timeKillEvent(Rtv_record_timer_id); - Rtv_record_timer_id = 0; #endif } @@ -236,16 +211,6 @@ void rtvoice_close_recording() rtvoice_stop_recording(); } - if ( Encode_buffer1 ) { - vm_free(Encode_buffer1); - Encode_buffer1=NULL; - } - - if ( Encode_buffer2 ) { - vm_free(Encode_buffer2); - Encode_buffer2=NULL; - } - if ( Rtv_capture_raw_buffer ) { vm_free(Rtv_capture_raw_buffer); Rtv_capture_raw_buffer=NULL; @@ -301,99 +266,6 @@ int rtvoice_start_recording( void (*user_callback)(), int callback_time ) return 0; } -// compress voice data using specialized codec -int rtvoice_compress(unsigned char *data_in, int size_in, unsigned char *data_out, int size_out) -{ - int compressed_size; - - Rtv_code_info.Code = e_cCodec1; - Rtv_code_info.Gain = 0; - - compressed_size = 0; - if(size_in <= 0){ - nprintf(("Network","RTVOICE => 0 bytes size in !\n")); - } else { - compressed_size = Encode(data_in, data_out, size_in, size_out, &Rtv_code_info); - - nprintf(("SOUND","RTVOICE => Sound compressed to %d bytes (%0.2f percent)\n", compressed_size, (compressed_size*100.0f)/size_in)); - } - - return compressed_size; -} - -// For 8-bit formats (unsigned, 0 to 255) -// For 16-bit formats (signed, -32768 to 32767) -int rtvoice_16to8(unsigned char *data, int size) -{ - int i; - unsigned short sample16; - unsigned char sample8, *dest, *src; - - Assert(size%2 == 0); - - dest = data; - src = data; - - for (i=0; i>8); - - *dest++ = sample8; - src += 2; - } - - return (size>>1); -} - -// Convert voice sample from 22KHz to 11KHz -int rtvoice_22to11(unsigned char *data, int size) -{ - int i, new_size=0; - unsigned char *dest, *src; - - dest=data; - src=data; - - for (i=0; i output parameter, recorded voice stored here // compressed_size => output parameter, size in bytes of recorded voice after compression @@ -403,86 +275,37 @@ int rtvoice_maybe_convert_data(unsigned char *data, int size) // outbuf_size_raw => output optional parameter, size of the outbuf_raw buffer // // NOTE: function converts voice data into compressed format -void rtvoice_get_data(unsigned char **outbuf, int *compressed_size, int *uncompressed_size, double *gain, unsigned char **outbuf_raw, int *outbuf_size_raw) +void rtvoice_get_data(unsigned char **outbuf, int *size, double *gain) { - int max_size, raw_size, csize; + int max_size, raw_size; max_size = dscap_max_buffersize(); - *compressed_size=0; - *uncompressed_size=0; *outbuf=NULL; - if ( max_size <= 0 ) { - if (outbuf_raw != NULL) { - *outbuf_raw = NULL; - } - - if (outbuf_size_raw != NULL) { - *outbuf_size_raw = 0; - } - - return; - } - raw_size = dscap_get_raw_data(Rtv_capture_raw_buffer, Rtv_capture_raw_buffer_size); - // convert data to 8bit, 11KHz if necessary - raw_size = rtvoice_maybe_convert_data(Rtv_capture_raw_buffer, raw_size); - *uncompressed_size=raw_size; + // TODO: compress voice data - // compress voice data - if ( Rtv_do_compression ) { - csize = rtvoice_compress(Rtv_capture_raw_buffer, raw_size, Rtv_capture_compressed_buffer, Rtv_capture_compressed_buffer_size); - *gain = Rtv_code_info.Gain; - *compressed_size = csize; - *outbuf = Rtv_capture_compressed_buffer; - } else { - *gain = Rtv_code_info.Gain; - *compressed_size = raw_size; - *outbuf = Rtv_capture_raw_buffer; - } - - // NOTE : if we are not doing compression, then the raw buffer and size are going to be the same as the compressed - // buffer and size - - // assign the raw buffer and size if necessary - if(outbuf_raw != NULL){ - *outbuf_raw = Rtv_capture_raw_buffer; - } - if(outbuf_size_raw != NULL){ - *outbuf_size_raw = raw_size; - } +// *gain = Rtv_code_info.Gain; + *size = raw_size; + *outbuf = Rtv_capture_raw_buffer; } ///////////////////////////////////////////////////////////////////////////////////////////////// // DECODE/PLAYBACK ///////////////////////////////////////////////////////////////////////////////////////////////// -// return the size that the decode buffer should be -int rtvoice_get_decode_buffer_size() -{ - return Decode_buffer_size; -} - // uncompress the data into PCM format void rtvoice_uncompress(unsigned char *data_in, int size_in, double gain, unsigned char *data_out, int size_out) { if ( (data_in == NULL) || (size_in <= 0) ) { return; } - - Rtv_code_info.Gain = gain; - Decode(&Rtv_code_info, data_in, data_out, size_in, size_out); } // Close down the real-time voice playback system void rtvoice_close_playback() { - if ( Decode_buffer ) { - vm_free(Decode_buffer); - Decode_buffer=NULL; - } - if ( Rtv_playback_uncompressed_buffer ) { vm_free(Rtv_playback_uncompressed_buffer); Rtv_playback_uncompressed_buffer=NULL; @@ -515,27 +338,16 @@ int rtvoice_init_playback() Rtv_playback_format=0; rtvf = &Rtv_formats[Rtv_playback_format]; - Decode_buffer_size = rtvf->frequency * (RTV_BUFFER_TIME) * fl2i(rtvf->bits_per_sample/8.0f); - - if ( Decode_buffer ) { - vm_free(Decode_buffer); - Decode_buffer=NULL; - } - - Decode_buffer = (unsigned char*)vm_malloc(Decode_buffer_size); - Assert(Decode_buffer); if ( Rtv_playback_uncompressed_buffer ) { vm_free(Rtv_playback_uncompressed_buffer); Rtv_playback_uncompressed_buffer=NULL; } - Rtv_playback_uncompressed_buffer_size=Decode_buffer_size; + Rtv_playback_uncompressed_buffer_size = rtvf->frequency * (RTV_BUFFER_TIME) * fl2i(rtvf->bits_per_sample/8.0f); Rtv_playback_uncompressed_buffer = (unsigned char*)vm_malloc(Rtv_playback_uncompressed_buffer_size); Assert(Rtv_playback_uncompressed_buffer); - InitDecoder(1, Decode_buffer); - Rtv_playback_inited=1; } @@ -618,10 +430,10 @@ void rtvoice_free_playback_buffer(int index) } } -// Play compressed sound data +// Play sound data // exit: >=0 => handle to playing sound // -1 => error, voice not played -int rtvoice_play_compressed(int index, unsigned char *data, int size, int uncompressed_size, double gain) +int rtvoice_play(int index, unsigned char *data, int size) { int ds_handle, rval; @@ -630,34 +442,7 @@ int rtvoice_play_compressed(int index, unsigned char *data, int size, int uncomp // Stop any currently playing voice output ds_stop_easy(ds_handle); - Assert(uncompressed_size <= Rtv_playback_uncompressed_buffer_size); - - // uncompress the data into PCM format - if ( Rtv_do_compression ) { - rtvoice_uncompress(data, size, gain, Rtv_playback_uncompressed_buffer, uncompressed_size); - } - - // lock the data in - if ( ds_lock_data(ds_handle, Rtv_playback_uncompressed_buffer, uncompressed_size) ) { - return -1; - } - - // play the voice - rval = ds_play(ds_handle, -100, DS_MUST_PLAY, Master_voice_volume, 0, 0); - return rval; -} - -// Play uncompressed (raw) sound data -// exit: >=0 => handle to playing sound -// -1 => error, voice not played -int rtvoice_play_uncompressed(int index, unsigned char *data, int size) -{ - int ds_handle, rval; - - ds_handle = Rtv_output_buffers[index].ds_handle; - - // Stop any currently playing voice output - ds_stop_easy(ds_handle); + // TODO: uncompress the data into PCM format // lock the data in if ( ds_lock_data(ds_handle, data, size) ) { @@ -668,3 +453,4 @@ int rtvoice_play_uncompressed(int index, unsigned char *data, int size) rval = ds_play(ds_handle, -100, DS_MUST_PLAY, Master_voice_volume, 0, 0); return rval; } + diff --git a/code/sound/rtvoice.h b/code/sound/rtvoice.h index 4e16b043a9..68b91c4a77 100644 --- a/code/sound/rtvoice.h +++ b/code/sound/rtvoice.h @@ -20,12 +20,11 @@ int rtvoice_init_recording(int qos); void rtvoice_close_recording(); int rtvoice_start_recording( void (*user_callback)() = NULL, int callback_time = 175 ); void rtvoice_stop_recording(); -void rtvoice_get_data(unsigned char **outbuf, int *compressed_size, int *uncompressed_size, double *gain, unsigned char **outbuf_raw = NULL, int *outbuf_size_raw = NULL); +void rtvoice_get_data(unsigned char **outbuf, int *size, double *gain); // playback int rtvoice_init_playback(); void rtvoice_close_playback(); -int rtvoice_get_decode_buffer_size(); int rtvoice_create_playback_buffer(); void rtvoice_free_playback_buffer(int index); @@ -33,8 +32,7 @@ void rtvoice_free_playback_buffer(int index); void rtvoice_uncompress(unsigned char *data_in, int size_in, double gain, unsigned char *data_out, int size_out); // return a sound handle, _NOT_ a buffer handle -int rtvoice_play_compressed(int handle, unsigned char *data, int compressed_size, int uncompressed_size, double gain); -int rtvoice_play_uncompressed(int handle, unsigned char *data, int size); +int rtvoice_play(int handle, unsigned char *data, int size); // pass in buffer handle returned from rtvoice_create_playback_buffer(), kills the _sound_ only void rtvoice_stop_playback(int handle); diff --git a/code/sound/sound.cpp b/code/sound/sound.cpp index ebb72afb77..bc1b502c29 100644 --- a/code/sound/sound.cpp +++ b/code/sound/sound.cpp @@ -53,6 +53,8 @@ int Snd_sram; // mem (in bytes) used up by storing sounds in system memor float Master_sound_volume = 1.0f; // range is 0 -> 1, used for non-music sound fx float Master_voice_volume = 0.7f; // range is 0 -> 1, used for all voice playback +unsigned int SND_ENV_DEFAULT = 0; + // min volume to play a sound after all volume processing (range is 0.0 -> 1.0) #define MIN_SOUND_VOLUME 0.05f @@ -93,7 +95,7 @@ void snd_clear() // returns: 1 => init success // 0 => init failed // -int snd_init(int use_eax, unsigned int sample_rate) +int snd_init() { int rval; @@ -108,7 +110,7 @@ int snd_init(int use_eax, unsigned int sample_rate) snd_clear(); - rval = ds_init(use_eax, sample_rate); + rval = ds_init(); if ( rval != 0 ) { nprintf(( "Sound", "SOUND ==> Fatal error initializing audio device, turn sound off.\n" )); @@ -116,14 +118,6 @@ int snd_init(int use_eax, unsigned int sample_rate) goto Failure; } - - // Init the Audio Compression Manager - if ( ACM_init() == -1 ) { - HWND hwnd = (HWND)os_get_window(); - MessageBox(hwnd, XSTR("Could not properly initialize the Microsoft ADPCM codec.\n\nPlease see the readme.txt file for detailed instructions on installing the Microsoft ADPCM codec.",972), NULL, MB_OK); -// Warning(LOCATION, "Could not properly initialize the Microsoft ADPCM codec.\nPlease see the readme.txt file for detailed instructions on installing the Microsoft ADPCM codec."); - } - if ( OGG_init() == -1 ) { mprintf(("Could not initialize the OGG vorbis converter.\n")); } @@ -309,7 +303,6 @@ int snd_load( game_snd *gs, int allow_hardware_load ) // ok, we got it, so set the proper filename for logging purposes strcat_s(filename, audio_ext[rc]); - // ds_parse_sound() will do a NULL check on fp for us if ( ds_parse_sound(fp, &si->data, &si->size, &header, (rc == 0), &si->ogg_info) == -1 ) { nprintf(("Sound", "Could not read sound file %s\n", filename)); @@ -323,12 +316,18 @@ int snd_load( game_snd *gs, int allow_hardware_load ) si->avg_bytes_per_sec = header->nAvgBytesPerSec; // 32-bit average bytes per second (nAvgBytesPerSec) si->n_block_align = header->nBlockAlign; // 16-bit block alignment (nBlockAlign) si->bits = header->wBitsPerSample; // Read 16-bit bits per sample - snd->duration = fl2i(1000.0f * ((si->size / (si->bits/8.0f)) / si->sample_rate / si->n_channels)); type = 0; + if (gs->flags & GAME_SND_USE_DS3D) { + type |= DS_3D; + } + rc = ds_load_buffer(&snd->sid, &snd->uncompressed_size, header, si, type); + // NOTE: "si" values can change once loaded in the buffer + snd->duration = fl2i(1000.0f * ((si->size / (si->bits/8.0f)) / si->sample_rate / si->n_channels)); + // free the header if needed if (header != NULL) vm_free(header); @@ -414,7 +413,6 @@ void snd_close(void) snd_stop_all(); if (!ds_initialized) return; snd_unload_all(); // free the sound data stored in DirectSound secondary buffers - ACM_close(); // Close the Audio Compression Manager (ACM) dscap_close(); // Close DirectSoundCapture ds_close(); // Close DirectSound off } @@ -433,6 +431,10 @@ int snd_play_raw( int soundnum, float pan, float vol_scale, int priority ) game_snd gs; int rval; + if ( (soundnum < 0) || ((size_t)soundnum >= Sounds.size() ) ) { + return -1; + } + gs.id = soundnum; gs.id_sig = Sounds[soundnum].sig; gs.filename[0] = 0; @@ -620,15 +622,11 @@ int snd_play_3d(game_snd *gs, vec3d *source_pos, vec3d *listen_pos, float radius return -1; } - bool play_2d = (Cmdline_no_3d_sound == 1); + // any stereo sounds will not play in proper 3D, but they should have + // been converted to mono already! + Assert( snd->info.n_channels == 1 ); - // any stereo sounds will not play in proper 3D - if (snd->info.n_channels != 1) { - mprintf(("WARNING: Attemping to play non-mono sound in 3D!! (%s)\n", snd->filename)); - play_2d = true; - } - - if (play_2d) { + if (Cmdline_no_3d_sound) { if (distance <= 0.0f) { pan = 0.0f; } else { @@ -1267,7 +1265,7 @@ int snd_time_remaining(int handle) // snd_env_ interface -static unsigned long Sound_env_id; +static int Sound_env_id; static float Sound_env_volume; static float Sound_env_damping; static float Sound_env_decay; @@ -1289,12 +1287,12 @@ int sound_env_set(sound_env *se) // Get the sound environment // -int sound_env_get(sound_env *se) +int sound_env_get(sound_env *se, int preset) { EAX_REVERBPROPERTIES er; - if (ds_eax_get_all(&er) == 0) { - se->id = er.environment; + if (ds_eax_get_all(&er, preset) == 0) { + se->id = (int)er.environment; se->volume = er.fVolume; se->decay = er.fDecayTime_sec; se->damping = er.fDamping; @@ -1309,7 +1307,7 @@ int sound_env_get(sound_env *se) int sound_env_disable() { sound_env se; - se.id = SND_ENV_GENERIC; + se.id = EAX_ENVIRONMENT_GENERIC; se.volume = 0.0f; se.damping = 0.0f; se.decay = 0.0f; diff --git a/code/sound/sound.h b/code/sound/sound.h index cd2eaf6a6d..56d4285160 100644 --- a/code/sound/sound.h +++ b/code/sound/sound.h @@ -51,7 +51,7 @@ typedef struct game_snd typedef struct sound_env { - unsigned long id; + int id; float volume; float damping; float decay; @@ -122,7 +122,7 @@ int snd_get_duration(int snd_id); // get a 3D vol and pan for a particular sound int snd_get_3d_vol_and_pan(game_snd *gs, vec3d *pos, float* vol, float *pan, float radius=0.0f, float range_factor=1.0f); -int snd_init(int use_eax, unsigned int sample_rate); +int snd_init(); void snd_close(); // Return 1 or 0 to show that sound system is inited ok @@ -151,38 +151,12 @@ int snd_get_samples_per_measure(char *filename, float num_measures); // sound environment -enum -{ - SND_ENV_GENERIC, - SND_ENV_PADDEDCELL, - SND_ENV_ROOM, - SND_ENV_BATHROOM, - SND_ENV_LIVINGROOM, - SND_ENV_STONEROOM, - SND_ENV_AUDITORIUM, - SND_ENV_CONCERTHALL, - SND_ENV_CAVE, - SND_ENV_ARENA, - SND_ENV_HANGAR, - SND_ENV_CARPETEDHALLWAY, - SND_ENV_HALLWAY, - SND_ENV_STONECORRIDOR, - SND_ENV_ALLEY, - SND_ENV_FOREST, - SND_ENV_CITY, - SND_ENV_MOUNTAINS, - SND_ENV_QUARRY, - SND_ENV_PLAIN, - SND_ENV_PARKINGLOT, - SND_ENV_SEWERPIPE, - SND_ENV_UNDERWATER, - SND_ENV_DRUGGED, - SND_ENV_DIZZY, - SND_ENV_PSYCHOTIC -}; + +extern unsigned int SND_ENV_DEFAULT; + int sound_env_set(sound_env *se); -int sound_env_get(sound_env *se); +int sound_env_get(sound_env *se, int preset = -1); int sound_env_disable(); int sound_env_supported(); diff --git a/code/stats/scoring.cpp b/code/stats/scoring.cpp index 8f20d69d4b..bfd8a2f47c 100644 --- a/code/stats/scoring.cpp +++ b/code/stats/scoring.cpp @@ -561,10 +561,6 @@ int scoring_eval_kill(object *ship_obj) } } - // if this ship doesn't show up on player sensors, then don't eval a kill - if ( dead_ship->flags & SF_HIDDEN_FROM_SENSORS ){ - return -1; - } #ifndef NDEBUG scoring_eval_harbison( dead_ship ); @@ -660,7 +656,7 @@ int scoring_eval_kill(object *ship_obj) } // if he killed a guy on his own team increment his bonehead kills - if((Ships[Objects[plr->objnum].instance].team == dead_ship->team) && !((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT))){ + if((Ships[Objects[plr->objnum].instance].team == dead_ship->team) && !MULTI_DOGFIGHT ){ if (!(The_mission.flags & MISSION_FLAG_NO_TRAITOR)) { plr->stats.m_bonehead_kills++; kill_score = -(int)(dead_ship->score * scoring_get_scale_factor()); @@ -674,7 +670,7 @@ int scoring_eval_kill(object *ship_obj) // otherwise increment his valid kill count and score else { // dogfight mode - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (multi_find_player_by_object(ship_obj) < 0)){ + if(MULTI_DOGFIGHT && (multi_find_player_by_object(ship_obj) < 0)){ // don't add a kill for dogfight kills on non-players } else { plr->stats.m_okKills[si_index]++; @@ -1027,7 +1023,7 @@ void scoring_eval_hit(object *hit_obj, object *other_obj,int from_blast) float scoring_get_scale_factor() { // multiplayer dogfight. don't scale anything - if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT)){ + if(MULTI_DOGFIGHT){ return 1.0f; } diff --git a/code/vcodec/codec1.cpp b/code/vcodec/codec1.cpp deleted file mode 100644 index 1814352c2e..0000000000 --- a/code/vcodec/codec1.cpp +++ /dev/null @@ -1,1990 +0,0 @@ -// Codec1.cpp -// -// Contains C-style-C++ implementation of VoiCTech (Voice Communications -// Technology) voice encoder/decoder. -// -// Written by Matthew F. Storch, Ph.D., copyright (c) 1998 Volition Inc. - -#include "globalincs/pstypes.h" - -#ifdef _WIN32 -#include -#endif - -#include -#include -#include "vcodec/codec1.h" - - - - -////////////////////////////////////////////////////////////////////////////// -// -// Introduction to the VoiCTech encoder -// ------------------------------------ -// The VoiCTech (short for Voice Communication Technology, pronounced -// "voice-tech") audio codec uses two separate algorithm suites: Codec1 -// and LPC-10. Codec1 does compression without using traditional signal -// processing algorithms (expcept for a simple FIR low-pass filter). As -// a result, it is extremely fast, and yields moderate-quality voice at a -// compression ratio of between 4-to-1 and 10-to-1, assuming 11KHz sampled -// data. LPC-10 does significantly more analysis and is therefore slower -// (approximately 3 times slower than Codec1), but achieves substantially -// better compression (25-1) at a comparable quality. -// -// The externally-callable interface for both algorithm suites is through -// a simple, generic front-end that is prototyped in codec1.h. -// -// This file contains the implementions of both the generic interface and -// Codec1. LPC-10 is implemented in a set of files in the LPC10 subdirectory. -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// Low pass filter stuff. -// -// Number of points to convolve with. Larger number means a better but -// slower low-pass filter. Number should always be odd. Useful range is -// 7 -> 31. -const int LPF_NUM_POINTS = 11; -double Encoder_LPF_Coef[LPF_NUM_POINTS]; // convolution coefficents (weights) -// lookup table for coefficents * every possible sample value -char Encoder_LPF_CoefTimesSample[LPF_NUM_POINTS][256]; -double Decoder_LPF_Coef[LPF_NUM_POINTS]; // convolution coefficents (weights) -// lookup table for coefficents * every possible sample value -char Decoder_LPF_CoefTimesSample[LPF_NUM_POINTS][256]; -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// Function prototypes for functions internal to Codec1 - -static void InitEncoder1(int QoS); -static void Smooth1(t_Sample* bufIn, t_Sample* bufOut, int size); -static double AutoGain1(t_Sample* bufIn, t_Sample* bufOut, int size); -static void UnAutoGain1(t_Sample* bufIn, t_Sample* bufOut, int size, - double gain); -static void Decode1(t_Sample* bufIn, t_Sample* bufOut, int size, int sizeOut); - -#if defined(CODEC_DEMO) -static int Encode1(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut, - t_Sample* levels, int* modes, int samples[9], int storage[9]); -#else -static int Encode1(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut); -#endif - -static void SkipEveryOther(t_Sample* bufIn, t_Sample* bufOut, int size); -static void InterpolateEveryOther(t_Sample* bufIn, t_Sample* bufOut, int size); - -#if defined(CODEC_DEMO) -static int DoEncode(int mode, BOOL& packetPos, t_Sample*& in, t_Sample*& out, - int& level, t_Sample*& levels, int*& modes, - int samples[9], int storage[9]); -#else -static int DoEncode(int mode, BOOL& packetPos, t_Sample*& in, t_Sample*& out, - int& level); -#endif - -static void DecodeRL(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufEnd, t_Sample* bufOutEnd); -static void DecodeHF(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufOutEnd); -static void DecodeNom(BOOL packetPos, t_Sample*& p, t_Sample*& q, - unsigned int mode, t_Sample* bufOutEnd); -static void DecodeMF(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufOutEnd); -static void InitLowPassFilter(int QoS, double LPF_Coef[LPF_NUM_POINTS], - char LPF_CoefTimesSample[LPF_NUM_POINTS][256]); -static void LowPassFilter(t_Sample* bufIn, t_Sample* bufOut, int size, - char LPF_CoefTimesSample[LPF_NUM_POINTS][256]); - -#if defined(USE_LPC10) -static void ConvertToLPC10(t_Sample* bufIn, t_Sample* bufOut, int size); -static void ConvertFromLPC10(t_Sample* bufIn, t_Sample* bufOut, int size); -extern "C" -{ - // the following three functions are defined in lpc10\lpc10.c - void lpc10init(); - int lpc10encode(unsigned char *in, unsigned char *out, int inlen); - int lpc10decode(unsigned char *in, unsigned char *out, int inlen); -} -#define AssertLPC10Available() -#else -#define ConvertToLPC10(bufIn, bufOut, size) -#define ConvertFromLPC10(bufIn, bufOut, size) -#define lpc10init() -#define lpc10encode(in, out, inlen) 0 -#define lpc10decode(in, out, inlen) -#define AssertLPC10Available() assert(0) -#endif // defined(USE_LPC10) - -// -/////////////////////////////////////////////////////////////////////////////// - - -/////////////////////////////////////////////////////////////////////////////// -// Generic high-level codec interface. - -t_Code EncodeMode = e_cLPC10; - -t_Sample* TempDecoderBuf = NULL; -t_Sample* TempEncoderBuf1 = NULL; -t_Sample* TempEncoderBuf2 = NULL; - -/////////////////////////////// -// The following compile-time switches are applicable to Codec1 only. - -// If SKIP_EVERY_OTHER is defined, every other sample will be thrown out -// after the low-pass filter has massaged the data but before the encoder -// goes at it. The missing samples are then interpolated after decoding. -#define SKIP_EVERY_OTHER - -// Don't define this ;) -//#define REMOVE_DC_BIAS - -// Define this to use logarithmic gain (but linear gain works better). -//#define LOGARITHMIC_GAIN - -// Define this to enable the low-pass filter. -#define USE_LOWPASS_FILTER - -// End of compile-time switches -/////////////////////////////// - -#if defined(SKIP_EVERY_OTHER) - const int SKIP_FACTOR = 2; -#else - const int SKIP_FACTOR = 1; -#endif - - -void InitDecoder(int QoS, t_Sample* tempBuf) -{ - QoS = QoS; // just to shut compiler up - TempDecoderBuf = tempBuf; - lpc10init(); // call unconditionally because we don't know what kind of - // coded packets we might receive - InitLowPassFilter(8, Decoder_LPF_Coef, Decoder_LPF_CoefTimesSample); -} - -void Decode(t_CodeInfo* ci, t_Sample* bufIn, t_Sample* bufOut, - int encodeSize, int decodeSize) -{ - if (ci->Code == e_cCodec1) - { - Decode1(bufIn, TempDecoderBuf, encodeSize, decodeSize/SKIP_FACTOR); - #if defined(SKIP_EVERY_OTHER) - UnAutoGain1(TempDecoderBuf, TempDecoderBuf, decodeSize/SKIP_FACTOR, ci->Gain); - InterpolateEveryOther(TempDecoderBuf, bufOut, decodeSize/SKIP_FACTOR); - #else - UnAutoGain1(TempDecoderBuf, bufOut, decodeSize, ci->Gain); - #endif - LowPassFilter(bufOut, bufOut, decodeSize,Decoder_LPF_CoefTimesSample); - } - else - { - AssertLPC10Available(); - lpc10decode(bufIn, bufOut, encodeSize); - ConvertFromLPC10(bufOut, bufOut, decodeSize); - } -} - -void InitEncoder(t_Code code, int QoS, t_Sample* tempBuf1, t_Sample* tempBuf2) -{ - TempEncoderBuf1 = tempBuf1; - TempEncoderBuf2 = tempBuf2; - EncodeMode = code; - if (code == e_cCodec1) - { - InitEncoder1(QoS); - InitLowPassFilter(QoS, Encoder_LPF_Coef, Encoder_LPF_CoefTimesSample); - } -} - -#if defined(CODEC_DEMO) -#define EXTRA_CODEC_DEMO_ARGS4 , levels, modes, samples, storage -int Encode(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut, - t_CodeInfo* codeInfo, - t_Sample* levels, int* modes, int samples[9], int storage[9]) -#else -#define EXTRA_CODEC_DEMO_ARGS4 -int Encode(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut, - t_CodeInfo* codeInfo) -#endif -{ - int encodeSize; - codeInfo->Code = EncodeMode; - if (EncodeMode == e_cCodec1) - { - #if defined(SKIP_EVERY_OTHER) - LowPassFilter(bufIn, TempEncoderBuf1, sizeIn, - - Encoder_LPF_CoefTimesSample); - SkipEveryOther(TempEncoderBuf1, TempEncoderBuf1, sizeIn); - #else - LowPassFilter(bufIn, TempEncoderBuf1, sizeIn, - Encoder_LPF_CoefTimesSample); - - #endif - Smooth1(TempEncoderBuf1, TempEncoderBuf2, sizeIn/SKIP_FACTOR); - codeInfo->Gain = AutoGain1(TempEncoderBuf2, TempEncoderBuf2, - sizeIn/SKIP_FACTOR); - #if defined(CODEC_DEMO) - encodeSize = Encode1(TempEncoderBuf2, bufOut, sizeIn/SKIP_FACTOR, - sizeOut, levels, modes, samples, storage); - #else - encodeSize = Encode1(TempEncoderBuf2, bufOut, sizeIn/SKIP_FACTOR, - sizeOut); - #endif - } - else - { - AssertLPC10Available(); - ConvertToLPC10(bufIn, TempEncoderBuf2, sizeIn); - encodeSize = lpc10encode(TempEncoderBuf2, bufOut, sizeIn); - } - return encodeSize; -} - -// -////////////////////////////////////////////////////////////////////////////// - - - -// ********* EVERYTHING FROM THIS POINT ON IS SPECIFIC TO CODEC1. ************ - - -////////////////////////////////////////////////////////////////////////////// -// -// Introduction to Codec1 -// ---------------------- -// Codec1 uses multiple encoders, including a highly modal primary -// encoder, to achieve a substantial degree of compression while -// accurately preserving the low-to-mid frequency components of human -// voice. Higher frequency components are preserved less well, but -// usually acceptably. The encoder works best with samples taken at -// low-to-moderate microphone volumes, though an additonal logarithmic -// compression pass has been added to give better performance at high -// volumes. -// -// The interface is very simple. The externally-visible functions are: -// InitEncoder1 -- initialize the encoder -// LowPassFilter -- get rid of unwanted high frequency data -// SkipEveryOther -- throw out every other sample (optional) -// Smooth1 -- smooth little bumps so run-length encoding works better -// AutoGain1 -- reduce problematic high-volume samples -// Encode1 -- primary encoder -// ~~~~~~ transmission to remote machine ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Decode1 -- primary decoder -// UnAutoGain1 -- restore true volume -// InterpolateEveryOther -- bring back missing samples -// -// All encoder and decoder algorithms have O(N) running time with -// respect to the number of samples (otherwise it would be hopelessly -// slow). Decoding is extremely fast and should not have a -// significant impact on a modern computer. The C implementation is -// most likely fine for production code. The encoding is quite fast -// compared with other voice encoders, but it is of course substantially -// slower than the decoding. Because of the "bit twiddling" nature of -// the algorithms, I would expect that a good assembly language -// implementation could easily provide 2X-3X the execution time performance -// of this C implementation. As of 12/97, I have implemented one key -// routine in assembly that increased performance substantially. -// -// The encoded format is novel and somewhat complex because of the -// desire for very high degrees of compression (4:1 to 10:1, nominally -// 8:1) with respectable sound quality. In order to achieve such -// extraordinarily high compression rates, the exact format is -// (unfortunately) specific to 8-bit samples. Ideas very similar to -// those used for the 8-bit codec could be used to develop 16 or -// 24-bit codecs, but the details would differ enough to require a -// mostly new implementation. -// -// A sequence of samples in the original data is encoded as a -// "packet". A single packet may describe anywhere from a few samples -// to several thousand samples depending on the type of packet. There -// are currently 4 major categories of packets: nominal packets, -// run-length packets, high-frequency packets, and medium-frequency -// packets. An additional category, low-frequency packets, may be -// added later. -// -// The centerpiece of the encoding strategy is the category of nominal -// packets. Nominal packets encode 9 contiguous 8-bit samples in 12 -// bits, for a compression ratio of 6:1 and very high fidelity. The -// encoded value of each sample is relative to the value of the -// previous sample, so this technique can only be effectively applied -// when contiguous samples have values that are not too different -// (i.e. for samples that contain only low-to-medium frequency -// components). Detailed examination of actual voice samples revealed -// that monotonic upward (or downward) runs of several samples were -// common, so I decided that the encoding strategy would be as -// follows. Each bit in a nominal packet corresponds to one sample, -// and the value of the bit determines what offset is added to the -// previous sample value to define the current sample value. The -// actual offset values depend on the mode of the packet. For -// example, in a mode 3 packet, a data bit of 0 means the offset is -// +1, while a data bit of 1 means the offset is +3. On the other -// hand, in a mode 5 packet, a data bit of 0 means the offset is -1 -// and a data bit of 1 means the offset is +1. -// -// The 12-bit packet size presents some challenges given that the -// natural data sizes of 80x86 processors are 8, 16, and 32 bits. -// However, the challenge is justified because none of the natural -// data sizes provided encoding opportunites as good. The -// alternatives to the scheme I chose were to either encode 6 samples -// in 8 bits, or 12 samples in 16 bits. 6 samples in 8 bits leaves -// only 2 bits to assign the mode, which is inadequate. 12 bits in 16 -// samples leaves plenty of mode bits (4) but then we are committed to -// the same mode for 12 bits, which I felt is too long for the voice -// data I examined. So I chose the 9-in-12 "sweet spot" granularity -// as the basis for the encoding strategy. -// -// The 12-bit packets are encoded in pairs; each pair occupies 3 -// bytes. If all packets were nominal packets, a single 3-byte -// "packet pair" data structure could be used, and such a structure is -// in fact used when nominal packets are back-to-back. However, all -// the samples in a typical voice sample buffer cannot be encoded -// using nominal packets, so other encoding schemes are used. The -// 3 mode bits available in the 9-in-12 scheme allow us 8 modes. -// Modes 1 through 6 are used for nominal packets, while mode 0 is an -// escape to either run-length or high-frequency mode, and mode 7 is an -// escape to medium-frequency mode. -// -// The data structures used for run-length (RL), high-frequency (HF), -// and medium-frequency (MF) modes are different depending on whether -// the previous packet is the first packet in a nominal packet pair -// (case 0), or is any of the following (case 1): -// - the second packet in a nominal packet pair -// - a run-length, high-frequency, or medium-frequency packet -// - the first packet in the buffer -// In case 0, the RL, HF, or MF packet is 12 bits, while in case 1 it -// is 16 bits (that is, we don't use 12 bit encoding for these modes -// unless we are forced to, because 16 bit packets are better all the -// way around for RL, HF, and MF modes. Both the encoder and decoder -// maintain knowlege of case 0 vs. case 1 as a state variable called -// "packetPos". -// -// The only identical-value runs that occur frequently enough to be -// worth worrying about have a value of 0 (silence), so run length -// encoding uses 0 as the implicit data value. -// -// In high-frequency mode each sample is *not* relative to the -// previous sample (as it is in the nominal modes). Instead it is an -// absolute value that is multiplied by a multiplier that is part of -// the HF packet. -// -// In medium-frequency mode, a sequence of 4 samples in the original -// data is approximated by a straight line. This mode can also encode -// low-frequency data reasonably well, but not as well as the nominal -// modes, so the latter are used where possible. However, medium -// frequency mode can be used when the total rise (or fall) of 4 -// samples is up to 32, whereas the best total rise (or fall) the -// nominal modes can achieve over 4 samples is 3*4 = 12. -// -// Finally, there is a special "literal" mode that is used only for -// the very first sample in the buffer (which is implicitly literal -// mode) and the last few samples (signaled by a special "run length" -// packet that has a length of 0). It adds a very slight inefficiency -// (since it does no compression) but it greatly simplifies dealing -// with the edge cases, which would otherwise be problematic. -// -////////////////////////////////////////////////////////////////////////////// -// -// Some details of the encoding scheme are summarized below: -// -// Encoding Modes -// -------------- -// Mode number Description -// 0 run-length or high-frequency mode -// 1 0, +1 -// 2 0, -1 -// 3 +1, +3 -// 4 -1, -3 -// 5 +1, -1 -// 6 +2, -2 -// 7 medium-frequency mode -// -// Packet Layout -// ------------- -// Run-length/high-frequency in first packet of packet pair (case 1) -// 0000 nnnn nnnn nnnn -- run length, n = length of run (1st nibble low-order) -// 0001 mmmm xxxx yyyy -- high frequency, m = multiplier -// x, y and succeeding nibbles until 0 byte -// = absolute sample values -// -// Run-length/high-frequency in second packet of packet pair (case 0) -// ---- ---- ---- 0000 nnnn nnnn -- run length, n = length of run -// ---- ---- ---- 0001 mmmm xxxx -- high frequency, m = multiplier -// x, y and succeeding nibbles until 0 byte -// = absolute sample values -// -// mmmm = 0 is not a useful value so we can use it as an escape indicator for -// other modes -// -////////////////////////////////////////////////////////////////////////////// -// -// Misc notes -// -// CODEC_DEMO -// ---- -// CODEC_DEMO is a compile-time flag that adds/alters code for use with the demo/ -// experiment program. If CODEC_DEMO is not defined, the codec routines will be -// compiled for general-purpose use outside of the demo/experiment program. -// (Like in a GAME maybe...what a NOVEL concept!) -// -// Packing Problems -// ---------------- -// Even with #pragma pack(1), sizeof returns 4 for 3 byte structures. In -// some places in the code, structure sizes had to be hardwired to get around -// this problem. - - -/////////////////////////////////////////////////////////////////////////////// -// Data structures - -// Not sure if there is a point in using unions somehow to make one big struct; -// for now just forget it and cast to totally different structs which is -// theoretically evil but is not really all that dangerous in practice... - -// disable compiler padding of structures -#if defined _MSC_VER -#pragma pack(push, packet_declarations) -#endif - -#pragma pack(2) - - -// most general notion of a packet pair -struct t_PacketPair -{ - unsigned int Mode1 : 3; - unsigned int Mode1Ex : 1; - unsigned int Data1 : 8; - unsigned int Mode0 : 3; - unsigned int Mode0Ex : 1; - unsigned int Data0 : 8; -}; - -// nominal packet pair -struct t_PacketPairNom -{ - unsigned int Mode1 : 3; - unsigned int Data1 : 9; - unsigned int Mode0 : 3; - unsigned int Data0 : 9; -}; - -// run-length packet, case 1 -struct t_PacketRL1 -{ - unsigned short Mode : 3; - unsigned short ModeEx : 1; // extra mode bit to distinguish RL & HF - unsigned short Length : 12; -}; - -// high-frequency packet, case 1 -struct t_PacketHF1 -{ - unsigned short Mode : 3; - unsigned short ModeEx : 1; // extra mode bit to distinguish RL & HF - unsigned short Table : 3; // lookup table number - unsigned short Data2 : 3; // absolute sample data - unsigned short Data1 : 3; // absolute sample data - unsigned short Data0 : 3; // absolute sample data -}; - -// high-frequency data packet, only used immediately after an HF packet, or -// after another HF data packet -struct t_PacketHFData -{ - unsigned short Table : 1; // 1 ==> DataT is lookup table number - unsigned short Data3 : 3; // absolute sample data - unsigned short Data2 : 3; // absolute sample data - unsigned short Data1 : 3; // absolute sample data - unsigned short Data0 : 3; // absolute sample data - unsigned short DataT : 3; // absolute sample data or lookup table number -}; - -// run-length packet, case 0 -struct t_PacketRL0 -{ - unsigned int Mode1 : 3; // mode of previous packet in pair - unsigned int Data1 : 9; // data of previous packet in pair - unsigned int Mode0 : 3; // mode of this packet (always 0) - unsigned int Mode0Ex : 1; // extra bit to distinguish RL & HF (always 0) - unsigned int Length : 8; // length of run -}; - -// high-frequency packet, case 0 -struct t_PacketHF0 -{ - unsigned int Mode1 : 3; // mode of previous packet in pair - unsigned int Data1 : 9; // data of previous packet in pair - unsigned int Mode0 : 3; // mode of this packet (always 0) - unsigned int Mode0Ex : 1; // extra bit to distinguish RL & HF (always 1) - unsigned int Table : 1; // 1 ==> DataT is lookup table number - unsigned int Data0 : 3; // absolute sample data - unsigned int DataT : 3; // absolute sample data or lookup table number - unsigned int Unused : 1; -}; - -// medium-frequency packet, case 1 -struct t_PacketMF1 -{ - unsigned short Mode : 3; // mode of this packet (always 7) - unsigned short Mult : 1; // 0 ==> mult data by 1, 1 ==> mult data by 2 - short Data1 : 6; // total rise or fall over current 4 samples - short Data0 : 6; // total rise or fall over next 4 samples -}; - -// medium-frequency packet, case 0 -struct t_PacketMF0 -{ - unsigned int Mode1 : 3; // mode of previous packet in pair - unsigned int Data1 : 9; // data of previous packet in pair - unsigned int Mode0 : 3; // mode of this packet (always 7) - unsigned int Mult : 1; // 0 ==> mult data by 1, 1 ==> mult data by 2 - int DataX : 2; // not currently used - int Data0 : 6; // total rise or fall over next 4 samples -}; - -// restore state of compiler padding of structures -#if defined _MSC_VER -#pragma pack(pop, packet_declarations) -#elif defined __GNUC__ -#pragma pack() -#else -#error unknown compiler -#endif - - - -//////////////////////////////////////////////////////////////////////////////// -// Constants, enums, and data tables -// -// These are not all delclared "const", but all are constant after the code is -// initialized. - -// For the second packet of a packet pair, the breakeven point for run length -// vs. normal encoding is 9 bits, because in that case we are using exactly -// the packet in both cases (we resolve the tie in favor of RL because it's -// encoding and decoding is faster). For the first packet, RL uses a minimum -// of 16 bits whereas normal encoding commits us to 12 bits, so the breakeven -// point is with somewhat longer runs. Using the compression ratio as the -// figure of merit, breakeven is at x/16 = 9/12, or x = 12 bits. -const int MIN_RUN_LEN[2] = { 9, 12 }; - -const int ZERO = 128; // the value of silence ;) - -// some quality-of-service tuning parameters -int BIG_MOVE2; // useful values 4..32 -int FUDGE; // useful values 1..5 - -// some tuning parameters to help decide which mode to use when -const int BIG_MOVE = 8; -const int SMALL_MOVE1 = 2; -const int SMALL_MOVE2 = 2; -const int SMALL_MOVE3 = 2; - -// enum DecodeState { e_dsFirst, e_dsSecond }; -enum EncodeMode -{ - e_emRL_HF = 0, // run-length/high-frequency - e_emZ_P1 = 1, // nominal: 0 or +1 - e_em0_N1 = 2, // nominal: 0 or -1 - e_emP1_P3 = 3, // nominal: +1 or +3 - e_emN1_N3 = 4, // nominal: -1 or -3 - e_emP1_N1 = 5, // nominal: +1 or -1 - e_emP2_N2 = 6, // nominal: +2 or -2 - e_emMF = 7 // medium-frequency -}; - -// offsets for modes 1 through 6 (bogus first entry) -const int Deltas[7][2] = -{ - { 0, 0 }, - { 0, +1 }, - { -1, 0 }, - { +1, +3 }, - { -3, -1 }, - { -1, +1 }, - { -2, +2 } -}; - -double Log2[256]; // lookup table for log-base-2 (i.e. log(x) / log(2)) - - -// HF encoding table -#if 0 -unsigned int EncTable[8][256] = -{ - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 - }, - { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 - }, -}; -#else -unsigned int EncTable[8][256]; -#endif - -// HF decoding table -int DecTable[8][8] = -{ - { -12, -6, -3, -1, 1, 3, 6, 12 }, - { -24, -12, -6, -3, 3, 6, 12, 24 }, - { -36, -18, -9, -5, 5, 9, 18, 36 }, - { -48, -24, -12, -6, 6, 12, 24, 48 }, - { -60, -30, -15, -7, 7, 15, 30, 60 }, - { -72, -36, -18, -9, 9, 18, 36, 72 }, - { -84, -42, -21, -10, 10, 21, 42, 84 }, - { -96, -48, -24, -12, 12, 24, 48, 96 } -}; - - -/////////////////////////////////////////////////////////////////////////////// -// Decoder - -// Decode1 is the main decoder entry point. -// Input: -// bufIn - encoded data to decode -// bufOut - empty buffer in which to place decoded data -// size - size of bufIn in bytes -// sizeOut - size of bufOut in bytes -// Output: -// bufOut - decoded data written here -// returns - nothing -// -static void Decode1(t_Sample* bufIn, t_Sample* bufOut, int size, int sizeOut) -{ - unsigned int mode, modeEx; - BOOL packetPos = 1; // 1 = first packet of packet pair, 0 = second - t_Sample* bufEnd = bufIn + size - 1; - t_Sample* bufOutEnd = bufOut + sizeOut - 1; - t_Sample* p = bufIn; // current position in input buffer - t_Sample* q = bufOut; // current position in output buffer - - *q++ = *p++; // first sample is in literal mode - - // Main decoding loop. Look at the mode of the packet and call the - // appropriate decoder. - while (p <= bufEnd && q <= bufOutEnd) - { - if (packetPos) - { - mode = ((t_PacketPair*)p)->Mode1; - modeEx = ((t_PacketPair*)p)->Mode1Ex; - } - else - { - mode = ((t_PacketPair*)p)->Mode0; - modeEx = ((t_PacketPair*)p)->Mode0Ex; - } - switch (mode) - { - case e_emRL_HF: - if (modeEx) // modeEx differentiates HF vs RL modes - DecodeHF(packetPos, p, q, bufOutEnd); - else - DecodeRL(packetPos, p, q, bufEnd, bufOutEnd); - packetPos = 1; - break; - - case e_emZ_P1: case e_em0_N1: case e_emP1_P3: case e_emN1_N3: - case e_emP1_N1: case e_emP2_N2: - DecodeNom(packetPos, p, q, mode, bufOutEnd); - packetPos = !packetPos; - break; - - case e_emMF: - DecodeMF(packetPos, p, q, bufOutEnd); - packetPos = 1; - break; - } - } - - //assert(p == bufEnd && q == bufOutEnd); - - #if defined(CODEC_DEMO) - // Do some extra error checking in CODEC_DEMO mode. - if (abs(bufEnd - p) > 1 || abs(bufOutEnd - q) > 1) - { - int leftIn = bufEnd - p, - leftOut = bufOutEnd - q; - char str[80]; - sprintf(str, "%d bytes left in source, %d bytes left in dest", - leftIn, leftOut); - AfxMessageBox(str); - - } - #endif -} - -// Run-length decoder. Very straightforward. -static void DecodeRL(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufEnd, t_Sample* bufOutEnd) -{ - int len; - if (packetPos) - { - len = ((t_PacketRL1*)p)->Length; - p += sizeof(t_PacketRL1); - } - else - { - len = ((t_PacketRL0*)p)->Length; - p += 3; //sizeof(t_PacketRL0); // see "Packing Problems" comment above - } - - // q + len-1 is where the last sample in this run will be written - if (q + len-1 > bufOutEnd) - { - q = bufOutEnd + 1; // cause decoder to immediately abort - return; - } - - for (int i = 0; i < len; i++) - *q++ = ZERO; - - if (len == 0) // check for literal-mode marker near end of data - { - // remaining data is in literal mode - for (int remaining = *p++; remaining > 0 && q<=bufOutEnd; remaining--) - *q++ = *p++; -// assert(p == bufEnd+1); - } -} - -// High-frequency decoder. Each sample is the data value for that sample -// multiplied by the current multiplier. -static void DecodeHF(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufOutEnd) -{ - static unsigned int table = 1; - int data; - // t_Sample* pstart = p; - - if (q > bufOutEnd - 3) - { - q = bufOutEnd + 1; // cause decoder to immediately abort - return; - } - - if (packetPos) - { - table = ((t_PacketHF1*)p)->Table; - data = ((t_PacketHF1*)p)->Data2; - *q++ = t_Sample(DecTable[table][data] + ZERO); - data = ((t_PacketHF1*)p)->Data1; - *q++ = t_Sample(DecTable[table][data] + ZERO); - data = ((t_PacketHF1*)p)->Data0; - *q++ = t_Sample(DecTable[table][data] + ZERO); - p += sizeof(t_PacketHF1); - } - else - { - if (((t_PacketHF0*)p)->Table == 1) - table = ((t_PacketHF0*)p)->DataT; - data = ((t_PacketHF0*)p)->Data0; - *q++ = t_Sample(DecTable[table][data] + ZERO); - if (((t_PacketHF0*)p)->Table == 0) - { - data = ((t_PacketHF0*)p)->DataT; - *q++ = t_Sample(DecTable[table][data] + ZERO); - } - p += 3; //sizeof(t_PacketHF0); // see "Packing Problems" comment above - } - - while (*(char*)p != 0) - { - if (q > bufOutEnd - 5) - { - q = bufOutEnd + 1; // cause decoder to immediately abort - return; - } - if (((t_PacketHFData*)p)->Table == 1) - table = ((t_PacketHFData*)p)->DataT; - data = ((t_PacketHFData*)p)->Data3; - *q++ = t_Sample(DecTable[table][data] + ZERO); - data = ((t_PacketHFData*)p)->Data2; - *q++ = t_Sample(DecTable[table][data] + ZERO); - data = ((t_PacketHFData*)p)->Data1; - *q++ = t_Sample(DecTable[table][data] + ZERO); - data = ((t_PacketHFData*)p)->Data0; - *q++ = t_Sample(DecTable[table][data] + ZERO); - if (((t_PacketHFData*)p)->Table == 0) - { - data = ((t_PacketHFData*)p)->DataT; - *q++ = t_Sample(DecTable[table][data] + ZERO); - } - p += sizeof(t_PacketHFData); - } - - p += sizeof(char); //sizeof(t_PacketHFData); // to cover final "0" packet -} - -// Nominal packet decoder. Each sample is equal to the previous sample -// +/- an offset. -static void DecodeNom(BOOL packetPos, t_Sample*& p, t_Sample*& q, - unsigned int mode, t_Sample* bufOutEnd) -{ - unsigned int data; - t_Sample delta0 = t_Sample(Deltas[mode][0]), // offset for "0" bits - delta1 = t_Sample(Deltas[mode][1]), // offset for "1" bits - last = *(q-1); - - if (q > bufOutEnd - 9) - { - q = bufOutEnd + 1; - return; - } - - if (packetPos) - { - data = ((t_PacketPairNom*)p)->Data1; - } - else - { - data = ((t_PacketPairNom*)p)->Data0; - p += 3; // sizeof(t_PacketPairNom); - } - - for (int i = 0; i < 9; i++) - { - if (data & 0x100) - { - last = t_Sample(last + delta1); // using += causes level 4 warning - *q++ = last; - } - else - { - last = t_Sample(last + delta0); // using += causes level 4 warning - *q++ = last; - } - data <<= 1; - } -} - -// Medium-frequency decoder. Uses a straight line to approximate 4 -// consecutive samples. -static void DecodeMF(BOOL packetPos, t_Sample*& p, t_Sample*& q, - t_Sample* bufOutEnd) -{ - unsigned int mult, data; - t_Sample level = *(q-1); - - if (q > bufOutEnd - 4) - { - q = bufOutEnd + 1; - return; - } - - if (packetPos) - { - mult = ((t_PacketMF1*)p)->Mult; // currently unused - data = ((t_PacketMF1*)p)->Data1; - // Make each of the 4 points is computed in a way equivalent to that - // used in the encoder. - level = t_Sample(level + data / 4); *q++ = level; - data -= data / 4; level = t_Sample(level + data / 3); *q++ = level; - data -= data / 3; level = t_Sample(level + data / 2); *q++ = level; - data -= data / 2; level = t_Sample(level + data ); *q++ = level; - - data = ((t_PacketMF1*)p)->Data0; - - p += sizeof(t_PacketMF1); - } - else - { - mult = ((t_PacketMF0*)p)->Mult; // currently unused - data = ((t_PacketMF0*)p)->Data0; - - p += sizeof(t_PacketMF0); - } - level = t_Sample(level + data / 4); *q++ = level; - data -= data / 4; level = t_Sample(level + data / 3); *q++ = level; - data -= data / 3; level = t_Sample(level + data / 2); *q++ = level; - data -= data / 2; level = t_Sample(level + data ); *q++ = level; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// Encoder - -int QualityOfService; - -// InitEncoder1 must be called once to initialize the encoder. May safely be -// called again to change tuning parameters. -// Input: -// QoS - Quality of Service: 1..10, 1 = highest compression/lowest -// quality, 10 = worst compression/best quality -// Output: -// initializes global variables -// -static void InitEncoder1(int QoS) -{ - int i, j, table, in, ip, vn, vp; - QualityOfService = QoS; - // There is nothing magic about the folowing 2 formulas, they're just one - // way to translate from a semantic notion of "quality of service" to - // reasonable values of the tuning parameters. Each parameter is - // orthogonal to the others, so the only reason to tie them to a single - // input parameter is simplicity. - BIG_MOVE2 = 8 + (10 - QoS) * 2; - FUDGE = (12 - QoS) / 2; - - // initilize log-base-2 lookup table - for (i = 1; i < 256; i++) - Log2[i] = log((double)i) / log(2.0); - - for (table = 7; table >= 0; table--) - { - vn = 3, vp = 4; - in = ZERO-1, ip = ZERO; - for (i = 0; i < 16 * (table+1)/8.0; i++) - EncTable[table][in--] = vn, EncTable[table][ip++] = vp; - - for (j = 1; j < 4; j++) - { - vn--, vp++; - for (i = 0; i < pow(2.0, 3.0+j) * (table+1)/8.0; i++) - EncTable[table][in--] = vn, EncTable[table][ip++] = vp; - } - while (in >= 0) - EncTable[table][in--] = vn, EncTable[table][ip++] = vp; - } - table = 0; -#if 0 - for (table = 0; table < 8; table++) - for (i = 0; i < 256; i++) - { - s = abs(i - ZERO); - if (s < 128*(table+1)/8.0) - EncTable[table][i] = (unsigned int)log(s*8.0/(table+1)) - / log(2.0); - else - EncTable[table][i] = (unsigned int)log(128*8.0/(table+1)); - } - - for (table = 0; table < 8; table++) - for (i = 0; i < 8; i++) - DecTable[table][i] = pow(2.0, i); -#endif - -} - - - - -// Encode1 is the main Encoder entry point. -// Input: -// bufIn - encoded data to decode -// bufOut - empty buffer in which to place decoded data -// size - size of bufIn in bytes -// sizeOut - size of bufOut in bytes -// Output: -// bufOut - encoded data written here -// returns - number of bytes written to bufOut -// -#if defined(CODEC_DEMO) -#define EXTRA_CODEC_DEMO_ARGS4 , levels, modes, samples, storage -static int Encode1(t_Sample* bufIn, t_Sample* bufOut, int size, int sizeOut, - t_Sample* levels, int* modes, int samples[9], int storage[9]) -#else -#define EXTRA_CODEC_DEMO_ARGS4 -static int Encode1(t_Sample* bufIn, t_Sample* bufOut, int size, int sizeOut) -#endif -{ - const int CUTOFF = 4; - t_Sample *in = bufIn, // current position in input buffer - *out = bufOut, // current position in output buffer - *p, // temporary pointer - *end = bufIn + size, // end of input buffer - *endOut = bufOut + sizeOut; // end of output buffer - int i, // loop counter - level, // current "true" sample value - s0, // first of two samples - s1, // second of two samples - smin, smax, // min and max of current set of samples - hist[CUTOFF*2 + 1], // histogram of sample-to-sample deltas - upMove, downMove; // total up/down deltas - BOOL packetPos = 1; // 1 = first packet of packet pair, 0 = second - int tableNum = 0; - - - assert(sizeof(t_PacketRL1) == 2); - assert(sizeof(t_PacketHF1) == 2); - assert(sizeof(t_PacketHFData) == 2); - assert(sizeof(t_PacketHF0) == 4); - - // First byte in encoded data is unencoded (literal mode) initial level. - level = *out++ = *in++; - - #if defined(CODEC_DEMO) - // Remove *levels++ to make level 1 pixel offset. - *levels++ = t_Sample(level); - // For statistics, pretend that literal mode is high-frequency mode. - *modes++ = 8; - samples[8] += 1; storage[8] += 2*sizeof(t_Sample); - #endif - - // Main encoding loop. General strategy is to compute a histogram and - // some other stats about the next 9 samples, then decide which is the - // best encoding mode (that's the hard part), and finally encode the - // data. Note that if we decide on run-length or high-frequency mode, - // we may encode more than 9 samples before going around this loop - // again. - while (in < end && out < endOut) - { - // Use current level rather than last sample for histogram etc. - // because level is where we are really starting from. In the case - // where we are starting with significant error (e.g. just coming out - // of HF mode), we may very well pick a different mode starting from - // level than we would starting from the last sample. - //smin = smax = s0 = *(in-1); - smin = smax = s0 = level; - - //int sstart = (s0 + *in) / 2, - // send = (in[7] + in[8]) / 2; - - // Compute histogram. - // Do 9 bits at a time, ensuring we don't go off end of bufIn. - for (i = 0; i < CUTOFF*2 + 1; i++) - hist[i] = 0; - upMove = downMove = 0; - for (i = 0; i < 9 && in+i < end; i++) - { - s1 = in[i]; - if (s1 < smin) smin = s1; - if (s1 > smax) smax = s1; - int diff = s1 - s0; - if (diff < 0) downMove -= diff; - if (diff > 0) upMove += diff; - if (diff > CUTOFF) diff = CUTOFF; - if (diff < -CUTOFF) diff = -CUTOFF; - hist[diff+CUTOFF]++; - s0 = s1; - } - - // it's faster to do this in the loop above... - //for (i = 0, downMove = 0; i < CUTOFF; i++) - // downMove += hist[i] * (CUTOFF-i); - //for (i = CUTOFF+1, upMove = 0; i < CUTOFF*2 + 1; i++) - // upMove += hist[i] * (i-CUTOFF); - - - short delta = short(in[3] - level); // for medium-frequency mode - - // First check if we need to switch to literal mode. - if (in+9 >= end) - { - // We are near the end of the data. Put marker indicating - // the final mode switch to literal mode. The marker is a - // run-length mode packet of length 0. Literal mode - // encoding is a single byte indicating the number of - // literal mode samples followed by the original samples. - if (packetPos) - { - t_PacketRL1 packet; - packet.Mode = e_emRL_HF; - packet.ModeEx = 0; - packet.Length = 0; - *(t_PacketRL1*)out = packet; - out += sizeof(t_PacketRL1); - } - else - { - t_PacketRL0 packet = *(t_PacketRL0*)out; - packet.Mode0 = e_emRL_HF; - packet.Mode0Ex = 0; - packet.Length = 0; - *(t_PacketRL0*)out = packet; - out += 3; //sizeof(t_PacketRL0); // see "Packing Problems" - } - - i = *out++ = t_Sample(end - in); - - #if defined(CODEC_DEMO) - int remaining = i; - while (i-- > 0) - *levels++ = *out++ = *in++; - - // For statistical purposes, pretend that literal mode is high- - // frequency mode since high frequency mode is the most similar - // in terms of bits per sample. In any case, literal mode will - // have very little impact on any of the statistics. - for (i = remaining; i > 0; i--) *modes++ = 8; - samples[8] += remaining; storage[8] += 2*remaining; - #else - while (i-- > 0) - *out++ = *in++; - #endif - } - // Check if low frequency mode applies; if so, use it because it - // is the most efficient. - else if (upMove <= SMALL_MOVE3 && downMove <= SMALL_MOVE3) - { // low frequency mode - BOOL runLengthMode = FALSE; - if (hist[CUTOFF] == 9) - { // possible 0-run starting; check ahead - - // packet1 can handle runs of 2^12-1 = 4095 samples - // packet0 can handle runs of 2^8-1 = 255 samples - int len, maxLen = packetPos ? 4095 : 255; - for (p = &in[9], len = 9; p < end && len < maxLen; p++, len++) - if (*p != ZERO) - break; - - if (len > MIN_RUN_LEN[packetPos]) - { // encode region in-to-p as run-length - runLengthMode = TRUE; - if (packetPos) - { - t_PacketRL1 packet; - packet.Mode = e_emRL_HF; - packet.ModeEx = 0; - packet.Length = (unsigned short)len; - *(t_PacketRL1*)out = packet; - out += sizeof packet; - // packetPos remains at 1 - #if defined(CODEC_DEMO) - samples[0] += len; storage[0] += 2*sizeof packet; - #endif - } - else - { - t_PacketRL0 packet = *(t_PacketRL0*)out; - packet.Mode0 = e_emRL_HF; - packet.Mode0Ex = 0; - packet.Length = len; - *(t_PacketRL0*)out = packet; - out += 3; // sizeof packet; - packetPos = 1; - #if defined(CODEC_DEMO) - samples[0] += len; storage[0] += 3; // sizeof packet; - #endif - } - in += len; - - #if defined(CODEC_DEMO) - for (int j = 0; j < len; j++) - *levels++ = ZERO, *modes++ = 0; - #endif - } - } - if (!runLengthMode) - { // normal low-frequency mode - //!!! Need to implement a low-frequency mode for real. In the - // meantime, use the appropriate nominal mode in its place. - if (upMove > 0 && downMove > 0) - { - out += DoEncode(e_emP1_N1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - else if (upMove > 0) - { - out += DoEncode(e_emZ_P1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - else - { - out += DoEncode(e_em0_N1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - } - } - // Check if nominal modes apply; if so, use one of them. - // Given 9 bits with a maximum per-bit delta of 3, we can keep up - // with an end-to-end delta of 3 * 9 in nominal mode, plus we add - // in a little fudge factor because we would really rather avoid - // medium or high-frequency modes if possible. - //else if (hist[CUTOFF*2] <= 2 && hist[0] <= 2 && - // upMove < 3 * 9 + 5 && downMove < 3 * 9 + 5) - else if (hist[CUTOFF*2] + hist[0] <= 2 && - upMove < 3 * 9 + FUDGE && downMove < 3 * 9 + FUDGE) - { - if (upMove >= BIG_MOVE) - { // lot of up movement, use mode 3 or 6 - // mode 3 unless nontrivial down move - if (downMove <= SMALL_MOVE1) - out += DoEncode(e_emP1_P3, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - else - out += DoEncode(e_emP2_N2, packetPos, in, out, - level EXTRA_CODEC_DEMO_ARGS4); - } - else if (downMove >= BIG_MOVE) - { // lot of down movement, use mode 4 or 6 - if (upMove <= SMALL_MOVE1) // mode 4 unless nontrivial up move - out += DoEncode(e_emN1_N3, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - else - out += DoEncode(e_emP2_N2, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - else if (upMove >= SMALL_MOVE2 && downMove >= SMALL_MOVE2) - { - out += DoEncode(e_emP1_N1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - else if (upMove >= SMALL_MOVE2) - { - out += DoEncode(e_emZ_P1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - else - { - out += DoEncode(e_em0_N1, packetPos, in, out, level - EXTRA_CODEC_DEMO_ARGS4); - } - } - // Last chance to avoid dreaded high-frequency mode. In medium- - // frequency mode, a sequence of 4 samples is encoded as a straight- - // line approximation. There are 6 bits available to encode the - // total rise/fall of the line, so we can track a total rise of - // +(2^5-1) = +31 and a total fall of -(2^5) = -32. - //else if (delta <= 31 && delta >= -32) - else if ((upMove < BIG_MOVE2 || downMove < BIG_MOVE2) - && delta <= 31 && delta >= -32) - { // medium frequency mode - #if defined(CODEC_DEMO) - int temp1; - #endif - int temp2; - in += 4; - if (packetPos) - { - t_PacketMF1 packet; - packet.Mode = e_emMF; - packet.Mult = 0; //!!! should implement .Mult - packet.Data1 = delta; - temp2 = level; - level += packet.Data1; - delta = short(in[3] - level); - if (delta > 31) packet.Data0 = 31; - else if (delta < -32) packet.Data0 = -32; - else packet.Data0 = delta; - *(t_PacketMF1*)out = packet; - out += sizeof packet; - in += 4; - - #if defined(CODEC_DEMO) - temp1 = packet.Data1; *levels++ = t_Sample(temp2 += temp1 / 4); - temp1 -= temp1 / 4; *levels++ = t_Sample(temp2 += temp1 / 3); - temp1 -= temp1 / 3; *levels++ = t_Sample(temp2 += temp1 / 2); - temp1 -= temp1 / 2; *levels++ = t_Sample(temp2 += temp1); - assert(temp2 == level); - temp1 = packet.Data0; *levels++ = t_Sample(temp2 += temp1 / 4); - temp1 -= temp1 / 4; *levels++ = t_Sample(temp2 += temp1 / 3); - temp1 -= temp1 / 3; *levels++ = t_Sample(temp2 += temp1 / 2); - temp1 -= temp1 / 2; *levels++ = t_Sample(temp2 += temp1); - assert(temp2 == level + packet.Data0); - - for (i = 0; i < 8; i++) *modes++ = 7; - samples[7] += 8; storage[7] += 2*sizeof packet; - #endif - - level += packet.Data0; - } - else - { - t_PacketMF0 packet = *(t_PacketMF0*)out; - packet.Mode0 = e_emMF; - packet.DataX = 0; - packet.Data0 = delta; - *(t_PacketMF0*)out = packet; - out += sizeof packet; - - #if defined(CODEC_DEMO) - temp2 = level; - temp1 = packet.Data0; *levels++ = t_Sample(temp2 += temp1 / 4); - temp1 -= temp1 / 4; *levels++ = t_Sample(temp2 += temp1 / 3); - temp1 -= temp1 / 3; *levels++ = t_Sample(temp2 += temp1 / 2); - temp1 -= temp1 / 2; *levels++ = t_Sample(temp2 += temp1); - assert(temp2 == level + packet.Data0); - - for (i = 0; i < 4; i++) *modes++ = 7; - samples[7] += 4; storage[7] += 3; // sizeof packet; - #endif - - level += packet.Data0; - } - packetPos = 1; - } - else // No choice but to use bit-gobbling high frequency mode. - { // high frequency mode - // need abs because smax is not guaranteed to be > ZERO and smin - // is not guaranteed to be < ZERO - int temp1 = abs((smax - ZERO) / 16), - temp2 = abs((ZERO - smin - 1) / 16); - // "table" is our new preferred table - int table = temp1 > temp2 ? temp1 : temp2; - int data4, data3, data2, data1, data0, datat, val3, val2, val1, val0; - int max; - int finalPacketData; - - if (packetPos) - { - t_PacketHF1 packet; - packet.Mode = e_emRL_HF; - packet.ModeEx = 1; - // HF1 packets include table number unconditionally - packet.Table = (unsigned short)(tableNum = table); - packet.Data2 = (unsigned short)(EncTable[table][*in++]); - packet.Data1 = (unsigned short)(EncTable[table][*in++]); - finalPacketData = - packet.Data0 = (unsigned short)(EncTable[table][*in]); - data0 = *in++; - *(t_PacketHF1*)out = packet; - out += sizeof packet; - - #if defined(CODEC_DEMO) - *levels++ = t_Sample(DecTable[table][packet.Data2] + ZERO); - *levels++ = t_Sample(DecTable[table][packet.Data1] + ZERO); - *levels++ = t_Sample(DecTable[table][packet.Data0] + ZERO); - *modes++ = 8; - *modes++ = 8; - *modes++ = 8; - samples[8] += 3; storage[8] += 2*sizeof packet; - #endif - } - else - { - t_PacketHF0 packet = *(t_PacketHF0*)out; - packet.Mode0 = e_emRL_HF; - packet.Mode0Ex = 1; - - finalPacketData = packet.Data0 = EncTable[table][*in++]; - // "tableNum-1" in order to introduce a little hysteresis in - // going to a smaller table. No such trick in the other - // direction since the consequences of using a table that is - // too small is worse than using one that is to large. - if (table > tableNum || table < tableNum-1) - { - packet.Table = 1; - packet.DataT = tableNum = table; - } - else // use previous table - { - packet.Table = 0; - finalPacketData = packet.DataT = EncTable[table = tableNum][*in++]; - } - *(t_PacketHF0*)out = packet; - out += 3; // sizeof packet; - - #if defined(CODEC_DEMO) - *levels++ = t_Sample(DecTable[table][packet.Data0] + ZERO); - *modes++ = 8; - samples[8] += 1; storage[8] += 3; // sizeof packet; - if (packet.Table == 0) - { - *levels++ = t_Sample(DecTable[table][packet.DataT] + ZERO); - *modes++ = 8; - samples[8] += 1; - } - #endif - } - - t_PacketHFData packet; - for (;;) - { - if (in+5 >= end) - { - *(char*)out = 0; - out += sizeof(char); - #if defined(CODEC_DEMO) - storage[8] += 2*sizeof(char); - #endif - } - data4 = *(in-1) - ZERO; - data3 = *in++ - ZERO; - data2 = *in++ - ZERO; - data1 = *in++ - ZERO; - data0 = *in++ - ZERO; - datat = *in - ZERO; - max = abs(data3) > abs(data2) ? abs(data3) : abs(data2); - max = abs(data1) > max ? abs(data1) : max; - max = abs(data0) > max ? abs(data0) : max; - max = abs(datat) > max ? abs(datat) : max; - table = (max-1) / 16; - - if (table > tableNum || table < tableNum-1) - { - packet.Table = 1; - packet.DataT = (unsigned short)(table); - } - else // use previous table - { - packet.Table = 0; - table = tableNum; - packet.DataT = (unsigned short)(EncTable[table][datat+ZERO]); - in++; - } - - packet.Data3 = (unsigned short)(val3 = EncTable[table][data3+ZERO]); - packet.Data2 = (unsigned short)(val2 = EncTable[table][data2+ZERO]); - packet.Data1 = (unsigned short)(val1 = EncTable[table][data1+ZERO]); - packet.Data0 = (unsigned short)(val0 = EncTable[table][data0+ZERO]); - - // break if the data is relatively smooth or if we encounter - // data (two 0's) that would cause us to encode a packet that - // looks like a HF termination byte - if ((abs(data2 - data3) + abs(data1 - data2) + - abs(data0 - data1) + abs(data3 - data4) <= 12) || - (val3 == 0 && val2 == 0)) - { - *(char*)out = 0; - out += sizeof(char); - #if defined(CODEC_DEMO) - storage[8] += 2*sizeof(char); - #endif - if (packet.Table == 1) - in -= 4; - else - in -= 5; - break; - } - - // now that we know for certain that this packet, will be - // used, set persistent state to indicate the last used - // table & last encoded data value - finalPacketData = packet.Table ? packet.Data0 : packet.DataT; - tableNum = table; - - *(t_PacketHFData*)out = packet; - out += sizeof packet; - - #if defined(CODEC_DEMO) - *levels++ = t_Sample(DecTable[table][packet.Data3] + ZERO); - *levels++ = t_Sample(DecTable[table][packet.Data2] + ZERO); - *levels++ = t_Sample(DecTable[table][packet.Data1] + ZERO); - *levels++ = t_Sample(DecTable[table][packet.Data0] + ZERO); - *modes++ = 8; *modes++ = 8; *modes++ = 8; *modes++ = 8; - samples[8] += 4; storage[8] += 2*sizeof packet; - if (packet.Table == 0) - { - *levels++ = t_Sample(DecTable[table][packet.DataT] + ZERO); - *modes++ = 8; - samples[8] += 1; - } - #endif - } - // be sure to set level here so it stays in sync - level = DecTable[tableNum][finalPacketData] + ZERO; - packetPos = 1; - } - } - - return out - bufOut; -} - -/* -#if defined(CODEC_DEMO) -static int ComputeNomData(t_Sample*& in, const int deltas[], int& level, - t_Sample*& levels) -#else -static int ComputeNomData(t_Sample*& in, const int deltas[], int& level) -#endif -{ - int data = 0; - - for (int i = 0; i < 9; i++, in++) - { - if (level+deltas[0] < *in) - { - data = (data << 1) | 1; - level += deltas[1]; - } - else - { - data <<= 1; - level += deltas[0]; - } - #if defined(CODEC_DEMO) - *levels++ = t_Sample(level); - #endif - } - return data; -} -*/ - -// ecx i -// eax temp -// edx level -// ebx deltas[0] -// edi deltas[1] -// esi in -// ebp data - -#if defined(CODEC_DEMO) -static int ComputeNomDataF(t_Sample*& inp, const int deltas[], int& level, - t_Sample*& levels) -#else -static int ComputeNomDataF(t_Sample*& inp, const int deltas[], int& level) -#endif -{ -#ifdef _WIN32_VCHAT - int data; -#if defined _MSC_VER - __asm - { - push ebp - mov esi, [inp] // esi = &inp - mov esi, [esi] // esi = inp - mov ebx, deltas[0] // ebx = &deltas[0] - mov edi, [ebx+4] // edi = deltas[1] - mov ebx, [ebx] // ebx = deltas[0] - mov edx, [level] // edx = &level - mov edx, [edx] // edx = level - mov ebp, 0 - - mov eax, edx // temp = level - mov ecx, 9 // loop count = 9 - - DO_9_SAMPLES: - add eax, ebx // temp += deltas[0] - cmp al, byte ptr [esi] // level+deltas[0] < *in ? - rcl ebp, 1 // shift right bit into data - jge SUM_GE_IN // if (level+deltas[0] >= *in) goto SUM_GE_IN - add edx, edi // level+deltas[0] < *in -> level += deltas[1] - mov eax, edx // temp = level (for next iteration) - jmp SUM_LT_IN - SUM_GE_IN: - mov edx, eax // level = temp - SUM_LT_IN: - - #if defined(CODEC_DEMO) - push eax // ran out of registers - push ebp // we will need the real ebp to get at levels - mov ebp,[esp+8] // get real (frame ptr) value of ebp - mov eax, levels // eax = &levels (implicitly uses ebp) - //mov al, byte ptr ss:[levels] - // eax = &levels - mov ebp, eax // ebp = &levels - mov eax, [eax] // eax = levels - mov [eax], dl // *levels = level - inc eax // eax = levels + 1 - mov [ebp], eax // levels = eax - pop ebp - pop eax - #endif - inc esi - loop DO_9_SAMPLES - - mov ebx, ebp - pop ebp - mov eax, [level] // eax = &level - mov [eax], edx // level = edx - mov eax, [inp] // eax = &inp - mov [eax], esi // inp = esi - mov [data], ebx - } -#elif defined __GNUC__ -#warning asm not implemented - Error(LOCATION, "asm not implemented"); -#else -#error unknown compiler -#endif - return data; -#else // _WIN32 - // STUB_FUNCTION; - return 0; -#endif -} - -#define VERIFY_ASM - -// Nominal packet encoder. Each encoded sample is equal to the previous sample -// +/- an offset. The mode has been decided by the routine that calls DoEncode -// so the mode is passed in. -#if defined(CODEC_DEMO) -#define EXTRA_CODEC_DEMO_ARGS1 , levels -static int DoEncode(int mode, BOOL& packetPos, t_Sample*& in, t_Sample*& out, - int& level, t_Sample*& levels, int*& modes, - int samples[9], int storage[9]) -#else -#define EXTRA_CODEC_DEMO_ARGS1 -static int DoEncode(int mode, BOOL& packetPos, t_Sample*& in, t_Sample*& out, - int& level) -#endif -{ - t_PacketPairNom packet; - int advanceOutput = 0; - - if (packetPos) - { - #if defined(VERIFY_ASM) && defined(CODEC_DEMO) - t_Sample *inT1 = in, *inT2 = in, *levelsT = levels; - int levelT1 = level, levelT2 = level; - #endif - packet.Mode1 = mode; - packet.Data1 = ComputeNomDataF(in,Deltas[mode], level EXTRA_CODEC_DEMO_ARGS1); - #if defined(VERIFY_ASM) && defined(CODEC_DEMO) - levels = levelsT; - unsigned int dataT = ComputeNomData(inT1, Deltas[mode], levelT1 EXTRA_CODEC_DEMO_ARGS1); - if (dataT != packet.Data1) - { - inT1 = inT2, levelT1 = levelT2; - levels = levelsT; - dataT = ComputeNomData(inT1, Deltas[mode], levelT1 EXTRA_CODEC_DEMO_ARGS1); - levels = levelsT; - dataT = ComputeNomDataF(inT2, Deltas[mode], levelT2 EXTRA_CODEC_DEMO_ARGS1); - } - #endif - } - else - { - packet = *(t_PacketPairNom*)out; - packet.Mode0 = mode; - packet.Data0 = ComputeNomDataF(in,Deltas[mode], level EXTRA_CODEC_DEMO_ARGS1); - advanceOutput = 3; // sizeof packet; - } - *(t_PacketPairNom*)out = packet; - packetPos = !packetPos; - - #if defined(CODEC_DEMO) - for (int i = 0; i < 9; i++) *modes++ = mode; - samples[mode] += 9; storage[mode] += 3; // sizeof packet; - #endif - - return advanceOutput; -} - - -static void Smooth1(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - int i; - bufOut[0] = bufIn[0]; - bufOut[size-1] = bufIn[size-1]; - for (i = 2; i < size; i++) - { - int s0 = bufIn[i-2], s1 = bufIn[i-1], s2 = bufIn[i]; - if (s0 == s2 && abs(s1 - s0) < 3) - bufOut[i-1] = bufIn[i]; - else - bufOut[i-1] = bufIn[i-1]; - if (abs(s0 - ZERO) < 2 && abs(s1 - ZERO) < 3) - bufOut[i-2] = ZERO; - } -} - -// can operate in place -static double AutoGain1(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - register int i, s; - int hist[17], sum, silenceSize = 0; - const int TARGET_MAX = 32, BUCKET_SIZE = 3; - double x; - - for (i = 0; i < 17; i++) - hist[i] = 0; - for (i = 0; i < size; i++) - { - s = abs(bufIn[i] - ZERO); - hist[s >> BUCKET_SIZE]++; - if (s == 0 || s == 1 || s == -1) - silenceSize++; - } - // ignore silence data when computing significant_data_above_this - for (i = 15, sum = hist[16]; i >= 0 && sum < ((size - silenceSize) >> 4); - i--) - sum += hist[i]; - - int significant_data_above_this = i << BUCKET_SIZE; - - #if LOGARITHMIC_GAIN - if (significant_data_above_this > TARGET_MAX) - { - x = ((double)Log2[significant_data_above_this]) / TARGET_MAX; - - for (i = 0; i < size; i++) - { - s = abs(bufIn[i] - ZERO); - s = int(Log2[s] / x); - bufOut[i] = bufIn[i] < ZERO ? t_Sample(ZERO - s) : t_Sample(s + ZERO); - } - } - else - x = 0.0; - return x; - #else - // linearly scale data such that a value of significant_data_above_this - // will become a value of TARGET_MAX - if (significant_data_above_this > TARGET_MAX) - { - x = ((double)TARGET_MAX) / significant_data_above_this; - for (i = 0; i < size; i++) - { - s = abs(bufIn[i] - ZERO); - s = int(((double)s) * x + .5); - bufOut[i] = bufIn[i] < ZERO ? t_Sample(ZERO - s) : t_Sample(s + ZERO); - } - x = 1 / x; // inverse for UnAutoGain() (no danger of x being 0) - } - else if (significant_data_above_this > 0) - x = ((double)TARGET_MAX) / significant_data_above_this; - else - x = 4.0; - - // Do a little extra volume boost for low QoS situations. There is - // nothing magic about the constants in the following, they're just - // reasonable heuristic values. - if (QualityOfService <= 3) - x = (x * 6) / (QualityOfService+2); - if (QualityOfService == 1) - x *= 1.5; - return x; - #endif -} - -// can operate in place -static void UnAutoGain1(t_Sample* bufIn, t_Sample* bufOut, int size, - double gain) -{ - register int i; - if (gain == 0.0) - { - if (bufIn != bufOut) - for (i = 0; i < size; i++) - bufOut[i] = bufIn[i]; - return; - } - - for (i = 0; i < size; i++) - { - int s = abs(bufIn[i] - ZERO); - #if defined(LOGARITHMIC_GAIN) - s = int(pow(2.0, s * gain)); //!!! could use some optimization - #else - s = int(((double)s) * gain + .5); - #endif - if (s > 127) s = 127; - bufOut[i] = bufIn[i] < ZERO ? t_Sample(ZERO - s) : t_Sample(s + ZERO); - } -} - -static void InitLowPassFilter(int QoS, double LPF_Coef[], - char LPF_CoefTimesSample[LPF_NUM_POINTS][256]) -{ - // QoS==10 ==> cutoff frequency is 5500Hz (filter is a noop) - // QoS==1 ==> cutoff frequency is 550Hz - int N = 19, K = 2 * QoS - 1, kshift = LPF_NUM_POINTS/2, k; - for (k = 0; k < LPF_NUM_POINTS; k++) - { - if (k != kshift) - LPF_Coef[k] = sin(PI * (k-kshift) * K / (double)N) / - ( sin(PI * (k-kshift) / (double)N) * N ); - else - LPF_Coef[k] = ((double)K) / N; - for (int i = 0; i < 256; i++) - LPF_CoefTimesSample[k][i] = (char)(LPF_Coef[k] * i + .5); - } -} - -// can now operate in place -static void LowPassFilter(t_Sample* bufIn, t_Sample* bufOut, int size, - char LPF_CoefTimesSample[LPF_NUM_POINTS][256]) -{ - register int j; - - #if !defined(USE_LOWPASS_FILTER) - if (bufIn != bufOut) - for (j = 0; j < size; j++) - bufOut[j] = bufIn[j]; - return; - #endif - - for (j = LPF_NUM_POINTS-1; j < size; j++) - { - register int i, sum = 0; - for (i = 0; i < LPF_NUM_POINTS; i++) - { - int temp1 = bufIn[ i + (j-(LPF_NUM_POINTS-1)) ]; // 0 -> 255 - temp1 -= ZERO; // -128 -> 127 - // lookup based on abs value - int temp2 = LPF_CoefTimesSample[i][abs(temp1)]; - if (temp1 < 0) - sum -= temp2; - else - sum += temp2; - } - - // depending on the exact values of the coefficients, there is a - // chance that sum may become slightly larger (or smaller) than the - // maximum (mimimum) allowable values, so truncate it before it does - // any damage - if (sum > 127) sum = 127; - if (sum < -128) sum = -128; - - bufOut[j-(LPF_NUM_POINTS-1)] = t_Sample(sum + ZERO); - } - - #if 0 - //for (j = 0; j < LPF_NUM_POINTS-1; j++) - // bufOut[j] = 0; // clear unused buffer entries - - // fade in the samples to avoid pops & clicks - int level = bufOut[LPF_NUM_POINTS-1]; - for (j = LPF_NUM_POINTS-2; j >= 0; j--) - bufOut[j] = level = ((level-ZERO) >> 1) + ZERO; - #else - // fade out the samples to avoid pops & clicks - int level = bufOut[size - LPF_NUM_POINTS]; - for (j = size-(LPF_NUM_POINTS+1); j < size; j++) - bufOut[j] = t_Sample(level = ((level-ZERO) >> 1) + ZERO); - #endif - #if defined(REMOVE_DC_BIAS) - int sum, bias; - // remove DC bias - for (j = 0, sum = 0; j < size; j++) - sum += bufOut[j] - ZERO; - bias = sum / size; - for (j = 0; j < size; j++) - bufOut[j] -= bias; - #endif -} - -// can operate in place (i.e. bufIn == bufOut is ok) -static void SkipEveryOther(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - for (int i = 0; i < size; i += 2) - bufOut[i/2] = bufIn[i]; -} - -static void InterpolateEveryOther(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - for (int i = 0; i < size; i++) - { - *bufOut++ = *bufIn; - *bufOut++ = t_Sample((*bufIn + *(bufIn+1)) / 2); - bufIn++; - } -} - - -#if defined(USE_LPC10) -extern "C" -{ - #include "lpc10\ulaw.h" // it's the LAW -}; -// can operate in place -static void ConvertToLPC10(t_Sample* bufIn, t_Sample* bufOut, int size) -{ -#if 0 - unsigned short s; - for (int i = 0; i < size; i++) - { - s = bufIn[i]-ZERO; - s <<= 8; - s >>= 3; - bufOut[i] = s2u[s]; - } -#else - - for (int i = 0; i < size; i++) - bufOut[i] = audio_c2u(bufIn[i]); -#endif -} - -// can operate in place -static void ConvertFromLPC10(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - for (int i = 0; i < size; i++) - bufOut[i] = t_Sample(audio_u2c(bufIn[i])); -} -#endif // defined(USE_LPC10) - - -////////////////////////////////////////////////////////////////////////////// -// Only unused junk below. Being kept around for reference only. - -#if 0 - for (i = 0; i < 256; i++) - { - s = abs(i - ZERO); - if (s > 22) - s = (log((double)s) / log(2.0)) * 5 + .5; - s = i < ZERO ? ZERO - s : s + ZERO; - unsigned char junk = s; - if (junk > ZERO+35 || junk < ZERO-36) - junk = 127; - } - -static void Log1(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - register int i, s; - for (i = 0; i < size; i++) - { - s = abs(bufIn[i] - ZERO); - if (s > 22) - s = Log2[s] * 5.0 + .5; - bufOut[i] = bufIn[i] < ZERO ? ZERO - s : s + ZERO; - if (bufOut[i] > ZERO+35 || bufOut[i] < ZERO-36) - bufOut[i] = 127; - } -} - -static void UnLog1(t_Sample* bufIn, t_Sample* bufOut, int size) -{ - int i; - for (i = 0; i < size; i++) - { - int s = abs(bufIn[i] - ZERO); - - if (s > 22) - s = pow(2.0, s / 5.0); //!!! could use some optimization - bufOut[i] = bufIn[i] < ZERO ? ZERO - s : s + ZERO; - } -} - -// from InitLowPassFilter(): - //int K = LPF_NUM_POINTS; - //double cutoffFrequency = 1100.0*QoS, - // bandwidthPerBucket = cutoffFrequency / (K/2); - //int N = (int)(11000.0 / bandwidthPerBucket), k, - // kshift = K/2; - - // cutoff fraction = cutoff freq / sample freq - // ==> cutoff fraction = LPF_NUM_POINTS / N - // ==> N = LPF_NUM_POINTS / cutoff fraction - //int i, k, N = (int)(LPF_NUM_POINTS / ((1100.0*QoS) / 11000.0)), - // kshift = LPF_NUM_POINTS/2; - - -#endif - diff --git a/code/vcodec/codec1.h b/code/vcodec/codec1.h deleted file mode 100644 index 96f400b30d..0000000000 --- a/code/vcodec/codec1.h +++ /dev/null @@ -1,132 +0,0 @@ -// Codec1.h -// -// Contains interface definition of VoiCTech (Voice Communications Technology) -// voice encoder/decoder. -// -// Written by Matthew F. Storch, Ph.D., copyright (c) 1998 Volition Inc. - - -////////////////////////////////////////////////////////////////////////////// -// -// Introduction to the VoiCTech encoder -// ------------------------------------ -// The VoiCTech (short for Voice Communication Technology, pronounced -// "voice-tech") audio codec uses two separate algorithm suites: Codec1 -// and LPC-10. Codec1 does compression without using traditional signal -// processing algorithms (expcept for a simple FIR low-pass filter). As -// a result, it is extremely fast, and yields moderate-quality voice at a -// compression ratio of between 3-to-1 and 10-to-1, assuming 11KHz sampled -// data. LPC-10 does significantly more analysis and is therefore slower -// (approximately 3 times slower than Codec1), but achieves substantially -// better compression (25-1) at a comparable quality. (However, the -// *character* of the loss in quality is quite different.) -// -// The externally-callable interface for both algorithm suites is through -// a simple, generic front-end that is prototyped in this file. -// -// codec1.cpp contains the implementions of both the generic interface and -// Codec1. LPC-10 is implemented in a set of files in the LPC10 subdirectory. -// -////////////////////////////////////////////////////////////////////////////// - -// VoiCTech is only intended to work with 8-bit samples recorded at 11KHz. -// 8KHz should also work. -typedef unsigned char t_Sample; - -// Algorithm suites. -enum t_Code { e_cCodec1, e_cLPC10 }; - -// One of these is passed with every buffer that is transmitted; it contains -// data on how to decode the buffer. -struct t_CodeInfo { t_Code Code; double Gain; }; - - -// WARNING ***** DANGER ***** WARNING ***** DANGER ***** WARNING ***** DANGER -// If LPC-10 is used, all buffers must be a multiple of LFRAME (Frame length -// for LPC-10 codec) in length -#define LFRAME 180 -// WARNING ***** DANGER ***** WARNING ***** DANGER ***** WARNING ***** DANGER - - -////////////////////////////////////////////////////////////////////////////// -// InitDecoder must be called once to initialize the decoder. -// Input: -// QoS - Quality of Service: 1..10, 1 = highest compression/lowest -// quality, 10 = worst compression/best quality (currently -// *not* used by decoder) -// tempBuf - Temporary buffer that must be available until Encode() will -// no longer be called. Must be at least as large as the -// largest sizeIn that will be passed to Encode(). -// Output: -// initializes global variables -// -void InitDecoder(int QoS, t_Sample* tempBuf); -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// Decode is the main decoder entry point. -// Input: -// codeInfo - Information about how the buffer was encoded -// bufIn - Encoded data to decode -// bufOut - Empty buffer in which to place decoded data (should be -// at least decodeSize in length) -// encodeSize - Size in bytes of encoded data in bufIn -// decodeSize - Size data should be after decoding -// Output: -// bufOut - Decoded data written here -// returns - Nothing -// -void Decode(t_CodeInfo* codeInfo, t_Sample* bufIn, t_Sample* bufOut, - int encodeSize, int decodeSize); -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// InitEncoder must be called once to initialize the encoder. May safely be -// called again to change tuning parameters. -// Input: -// code - The algorithm that will be used to encode the data in -// subsequent calls to Encode() -// QoS - Quality of Service: 1..10, 1 = highest compression/lowest -// quality, 10 = worst compression/best quality -// tempBuf1 - Temporary buffer that must be available until Encode() will -// no longer be called. Must be at least as large as the -// largest sizeIn that will be passed to Encode(). -// tempBuf2 - Another temporary buffer (cannot be the same buffer as -// tempBuf1) with same lifetime and size as tempBuf1. -// Output: -// initializes global variables -// -void InitEncoder(t_Code code, int QoS, t_Sample* tempBuf1, t_Sample* tempBuf2); -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// Encode is the main Encoder entry point. -// Input: -// bufIn - encoded data to decode -// bufOut - empty buffer in which to place decoded data -// sizeIn - size of bufIn in bytes -// sizeOut - size of bufOut in bytes -// Output: -// bufOut - encoded data written here -// returns - number of bytes written to bufOut -// -#if defined(CODEC_DEMO) -// Test program version -int Encode(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut, - t_CodeInfo* codeInfo, - t_Sample* levels, int* modes, int samples[9], int storage[9]); -#else -// Release version -int Encode(t_Sample* bufIn, t_Sample* bufOut, int sizeIn, int sizeOut, - t_CodeInfo* codeInfo); -#endif -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/code/weapon/beam.cpp b/code/weapon/beam.cpp index 432c9ed247..83d50e681c 100644 --- a/code/weapon/beam.cpp +++ b/code/weapon/beam.cpp @@ -32,6 +32,8 @@ #include "playerman/player.h" #include "weapon/weapon.h" #include "parse/parselo.h" +#include "iff_defs/iff_defs.h" +#include "globalincs/globals.h" @@ -53,86 +55,6 @@ extern int Cmdline_nohtl; #define TOOLTIME 1500.0f -// max # of collisions we'll allow per frame -#define MAX_FRAME_COLLISIONS 10 - -// collision info -typedef struct beam_collision { - mc_info cinfo; // collision info - int c_objnum; // objnum of the guy we recently collided with - int c_sig; // object sig - int c_stamp; // when we should next apply damage - int quadrant; // shield quadrant this beam hits if any -Bobboau - int is_exit_collision; //does this occur when the beam is exiting the ship -} beam_collision; - -// beam flag defines -#define BF_SAFETY (1<<0) // if this is set, don't collide or render for this frame. lifetime still increases though -#define BF_SHRINK (1<<1) // if this is set, the beam is in the warmdown phase - -// beam struct (the actual weapon/object) -typedef struct beam { - // low-level data - int objnum; // our own objnum - int weapon_info_index; - int sig; // signature for the shooting object - object *objp; // the shooting object (who owns the turret that I am being fired from) - object *target; // target object - ship_subsys *target_subsys; // targeted subsys - int target_sig; // target sig - ship_subsys *subsys; // subsys its being fired from - beam *next, *prev; // link list stuff - vec3d targeting_laser_offset; - int framecount; // how many frames the beam has been active - int flags; // see BF_* defines - float shrink; // shrink factor - - // beam info - int warmup_stamp; // timestamp for "warming up" - int warmdown_stamp; // timestamp for "warming down" - int type; // see BEAM_TYPE_* defines in beam.h - float life_left; // in seconds - float life_total; // total life - // this vector has very special meaning. BEFORE performing collision checks, it basically implies a "direction". meaning - // the vector between it and last_start is where the beam will be aiming. AFTER performing collision checks, it is the - // literal world collision point on the object (or meaningless, if we hit nothing). The function beam_move_all_pre() is - // responsible for then setting it up pre-collision time - vec3d last_shot; - vec3d last_start; - int shot_index; // for type D beam weapons - float beam_glow_frame; // what frame a beam glow animation is on - float beam_secion_frame[MAX_BEAM_SECTIONS]; // what frame a beam secion animation is on - - // recent collisions - beam_collision r_collisions[MAX_FRAME_COLLISIONS]; // recent collisions - int r_collision_count; // # of recent collisions - - // collision info for this frame - beam_collision f_collisions[MAX_FRAME_COLLISIONS]; // collisions for the current frame - int f_collision_count; // # of collisions we recorded this frame - - // looping sound info, HANDLE - int beam_sound_loop; // -1 if none - - // team - char team; - - float range; - float damage_threshold; - - // exactly how the beam will behave. by passing this is multiplayer from server to client, we can ensure that - // everything looks the same - beam_info binfo; - bool fighter_beam; - int bank; - - int Beam_muzzle_stamp; - vec3d local_pnt; - int firingpoint; - - float beam_width; -} beam; - beam Beams[MAX_BEAMS]; // all beams beam Beam_free_list; // free beams beam Beam_used_list; // used beams @@ -196,9 +118,10 @@ typedef struct beam_light_info { beam_light_info Beam_lights[MAX_BEAM_LIGHT_INFO]; int Beam_light_count = 0; -float b_whack_small = 500.0f; -float b_whack_big = 1500.0f; +float b_whack_small = 2000.0f; // used to be 500.0f with the retail whack bug +float b_whack_big = 10000.0f; // used to be 1500.0f with the retail whack bug float b_whack_damage = 150.0f; + DCF(b_whack_small, "") { dc_get_arg(ARG_FLOAT); @@ -929,8 +852,9 @@ void beam_type_d_get_status(beam *b, int *shot_index, int *fire_wait) // determine what "shot" we're on *shot_index = (int)(beam_time / shot_time); - Assert(*shot_index < b->binfo.shot_count); + if(*shot_index >= b->binfo.shot_count){ + nprintf(("Beam","Shot of type D beam had bad shot_index value\n")); *shot_index = b->binfo.shot_count - 1; } @@ -2007,7 +1931,7 @@ void beam_get_binfo(beam *b, float accuracy, int num_shots) vec3d oct1, oct2; vec3d turret_point, turret_norm; beam_weapon_info *bwi; - int skill_level; + int miss_factor; int temp = b->subsys->turret_next_fire_pos; @@ -2032,15 +1956,6 @@ void beam_get_binfo(beam *b, float accuracy, int num_shots) } bwi = &Weapon_info[b->weapon_info_index].b_info; - // skill level - skill_level = Game_skill_level; - if(Game_skill_level >= NUM_SKILL_LEVELS){ - skill_level = NUM_SKILL_LEVELS - 1; - } - if(Game_skill_level < 0){ - skill_level = 0; - } - // stuff num shots even though its only used for type D weapons b->binfo.shot_count = (ubyte)num_shots; if(b->binfo.shot_count > MAX_BEAM_SHOTS){ @@ -2050,9 +1965,14 @@ void beam_get_binfo(beam *b, float accuracy, int num_shots) // generate the proper amount of directional vectors switch(b->type){ // pick an accuracy. beam will be properly aimed at actual fire time - case BEAM_TYPE_A: + case BEAM_TYPE_A: + // determine the miss factor + Assert(Game_skill_level >= 0 && Game_skill_level < NUM_SKILL_LEVELS); + Assert(b->team >= 0 && b->team < Num_iffs); + miss_factor = bwi->beam_iff_miss_factor[b->team][Game_skill_level]; + // all we will do is decide whether or not we will hit - type A beam weapons are re-aimed immediately before firing - b->binfo.shot_aim[0] = frand_range(0.0f, 1.0f + bwi->beam_miss_factor[skill_level] * accuracy); + b->binfo.shot_aim[0] = frand_range(0.0f, 1.0f + miss_factor * accuracy); b->binfo.shot_count = 1; // get random model points, this is useful for big ships, because we never miss when shooting at them @@ -2060,7 +1980,7 @@ void beam_get_binfo(beam *b, float accuracy, int num_shots) break; // just 2 points in the "slash" - case BEAM_TYPE_B: + case BEAM_TYPE_B: beam_get_octant_points(model_num, b->target, (int)frand_range(0.0f, BEAM_NUM_GOOD_OCTANTS), Beam_good_slash_octants, &oct1, &oct2); // point 1 @@ -2081,10 +2001,15 @@ void beam_get_binfo(beam *b, float accuracy, int num_shots) // type D beams fire at small ship multiple times case BEAM_TYPE_D: + // determine the miss factor + Assert(Game_skill_level >= 0 && Game_skill_level < NUM_SKILL_LEVELS); + Assert(b->team >= 0 && b->team < Num_iffs); + miss_factor = bwi->beam_iff_miss_factor[b->team][Game_skill_level]; + // get a bunch of shot aims for(idx=0; idxbinfo.shot_count; idx++){ // MK, 9/3/99: Added pow() function to make increasingly likely to miss with subsequent shots. 30% more likely with each shot. - float r = ((float) pow(1.3f, idx)) * bwi->beam_miss_factor[skill_level] * accuracy; + float r = ((float) pow(1.3f, idx)) * miss_factor * accuracy; b->binfo.shot_aim[idx] = frand_range(0.0f, 1.0f + r); } break; @@ -2885,7 +2810,7 @@ void beam_handle_collisions(beam *b) r_coll_count++; // play the impact sound - if(first_hit){ + if ( first_hit && (wi->impact_snd >= 0) ) { snd_play_3d( &Snds[wi->impact_snd], &b->f_collisions[idx].cinfo.hit_point_world, &Eye_position ); } diff --git a/code/weapon/beam.h b/code/weapon/beam.h index ea5359b581..8fd9c80834 100644 --- a/code/weapon/beam.h +++ b/code/weapon/beam.h @@ -16,6 +16,7 @@ // BEAM WEAPON DEFINES/VARS // #include "model/model.h" +#include "globalincs/globals.h" // prototypes struct object; @@ -79,6 +80,89 @@ typedef struct fighter_beam_fire_info { float life_total; } fighter_beam_fire_info; +// max # of collisions we'll allow per frame +#define MAX_FRAME_COLLISIONS 10 + +// collision info +typedef struct beam_collision { + mc_info cinfo; // collision info + int c_objnum; // objnum of the guy we recently collided with + int c_sig; // object sig + int c_stamp; // when we should next apply damage + int quadrant; // shield quadrant this beam hits if any -Bobboau + int is_exit_collision; //does this occur when the beam is exiting the ship +} beam_collision; + +// beam flag defines +#define BF_SAFETY (1<<0) // if this is set, don't collide or render for this frame. lifetime still increases though +#define BF_SHRINK (1<<1) // if this is set, the beam is in the warmdown phase + +// beam struct (the actual weapon/object) +typedef struct beam { + // low-level data + int objnum; // our own objnum + int weapon_info_index; + int sig; // signature for the shooting object + object *objp; // the shooting object (who owns the turret that I am being fired from) + object *target; // target object + ship_subsys *target_subsys; // targeted subsys + int target_sig; // target sig + ship_subsys *subsys; // subsys its being fired from + beam *next, *prev; // link list stuff + vec3d targeting_laser_offset; + int framecount; // how many frames the beam has been active + int flags; // see BF_* defines + float shrink; // shrink factor + + // beam info + int warmup_stamp; // timestamp for "warming up" + int warmdown_stamp; // timestamp for "warming down" + int type; // see BEAM_TYPE_* defines in beam.h + float life_left; // in seconds + float life_total; // total life + // this vector has very special meaning. BEFORE performing collision checks, it basically implies a "direction". meaning + // the vector between it and last_start is where the beam will be aiming. AFTER performing collision checks, it is the + // literal world collision point on the object (or meaningless, if we hit nothing). The function beam_move_all_pre() is + // responsible for then setting it up pre-collision time + vec3d last_shot; + vec3d last_start; + int shot_index; // for type D beam weapons + float beam_glow_frame; // what frame a beam glow animation is on + float beam_secion_frame[MAX_BEAM_SECTIONS]; // what frame a beam secion animation is on + + // recent collisions + beam_collision r_collisions[MAX_FRAME_COLLISIONS]; // recent collisions + int r_collision_count; // # of recent collisions + + // collision info for this frame + beam_collision f_collisions[MAX_FRAME_COLLISIONS]; // collisions for the current frame + int f_collision_count; // # of collisions we recorded this frame + + // looping sound info, HANDLE + int beam_sound_loop; // -1 if none + + // team + char team; + + float range; + float damage_threshold; + + // exactly how the beam will behave. by passing this is multiplayer from server to client, we can ensure that + // everything looks the same + beam_info binfo; + bool fighter_beam; + int bank; + + int Beam_muzzle_stamp; + vec3d local_pnt; + int firingpoint; + + float beam_width; +} beam; + +extern beam Beams[MAX_BEAMS]; // all beams +extern int Beam_count; + // ------------------------------------------------------------------------------------------------ // BEAM WEAPON FUNCTIONS // diff --git a/code/weapon/muzzleflash.cpp b/code/weapon/muzzleflash.cpp index 042f09d66b..a04fe77047 100644 --- a/code/weapon/muzzleflash.cpp +++ b/code/weapon/muzzleflash.cpp @@ -13,6 +13,7 @@ #include "particle/particle.h" #include "graphics/2d.h" #include "math/vecmat.h" +#include "object/object.h" // --------------------------------------------------------------------------------------------------------------------- @@ -80,25 +81,6 @@ typedef struct mflash_info { SCP_vector Mflash_info; -//#define MAX_MFLASH 50 - -// Stuff for missile trails doesn't need to be saved or restored... or does it? -/* -typedef struct mflash { - struct mflash * prev; - struct mflash * next; - - ubyte type; // muzzle flash type - int blobs[MAX_MFLASH_BLOBS]; // blobs -} mflash; - -int Num_mflash = 0; -mflash Mflash[MAX_MFLASH]; - -mflash Mflash_free_list; -mflash Mflash_used_list; -*/ - // --------------------------------------------------------------------------------------------------------------------- // MUZZLE FLASH FUNCTIONS // @@ -214,18 +196,6 @@ void mflash_level_init() { uint i, idx; - /* - Num_mflash = 0; - list_init( &Mflash_free_list ); - list_init( &Mflash_used_list ); - - // Link all object slots into the free list - for (i=0; i= (int)Mflash_info.size()) ) return; - /* - if (Num_mflash >= MAX_MFLASH ) { - #ifndef NDEBUG - mprintf(("Muzzle flash creation failed - too many trails!\n" )); - #endif - return; - } - - // Find next available trail - mflashp = GET_FIRST(&Mflash_free_list); - Assert( mflashp != &Mflash_free_list ); // shouldn't have the dummy element - - // remove trailp from the free list - list_remove( &Mflash_free_list, mflashp ); - - // insert trailp onto the end of used list - list_append( &Mflash_used_list, mflashp ); - - // store some stuff - mflashp->type = (ubyte)mflash_type; - */ - // create the actual animations mi = &Mflash_info[mflash_type]; - for (idx = 0; idx < mi->blobs.size(); idx++) { - mbi = &mi->blobs[idx]; + if (local != NULL) { + for (idx = 0; idx < mi->blobs.size(); idx++) { + mbi = &mi->blobs[idx]; - // bogus anim - if (mbi->anim_id < 0) - continue; + // bogus anim + if (mbi->anim_id < 0) + continue; - // fire it up - memset(&p, 0, sizeof(particle_info)); - vm_vec_scale_add(&p.pos, gun_pos, gun_dir, mbi->offset); - vm_vec_scale_add(&p.vel, &pip->rotvel, &pip->vel, 1.0f); - p.rad = mbi->radius; - p.type = PARTICLE_BITMAP; - p.optional_data = mbi->anim_id; - p.attached_objnum = -1; - p.attached_sig = 0; - particle_create(&p); - } - - // increment counter - // Num_mflash++; -} - -// process muzzle flash stuff -void mflash_process_all() -{ - /* - mflash *mflashp; - - // if the timestamp has elapsed recycle it - mflashp = GET_FIRST(&Mflash_used_list); - - while ( mflashp!=END_OF_LIST(&Mflash_used_list) ) { - if((mflashp->stamp == -1) || timestamp_elapsed(mflashp->stamp)){ - // delete it from the list! - mflash *next_one = GET_NEXT(mflashp); - - // remove objp from the used list - list_remove( &Mflash_used_list, mflashp ); - - // add objp to the end of the free - list_append( &Mflash_free_list, mflashp ); - - // decrement counter - Num_mflash--; - - Assert(Num_mflash >= 0); - - mflashp = next_one; - } else { - mflashp = GET_NEXT(mflashp); + // fire it up + memset(&p, 0, sizeof(particle_info)); + vm_vec_scale_add(&p.pos, gun_pos, gun_dir, mbi->offset); + vm_vec_zero(&p.vel); + //vm_vec_scale_add(&p.vel, &pip->rotvel, &pip->vel, 1.0f); + p.rad = mbi->radius; + p.type = PARTICLE_BITMAP; + p.optional_data = mbi->anim_id; + p.attached_objnum = OBJ_INDEX(local); + p.attached_sig = local->signature; + particle_create(&p); } - } - */ -} + } else { + for (idx = 0; idx < mi->blobs.size(); idx++) { + mbi = &mi->blobs[idx]; -void mflash_render_all() -{ + // bogus anim + if (mbi->anim_id < 0) + continue; + + // fire it up + memset(&p, 0, sizeof(particle_info)); + vm_vec_scale_add(&p.pos, gun_pos, gun_dir, mbi->offset); + vm_vec_scale_add(&p.vel, &pip->rotvel, &pip->vel, 1.0f); + p.rad = mbi->radius; + p.type = PARTICLE_BITMAP; + p.optional_data = mbi->anim_id; + p.attached_objnum = -1; + p.attached_sig = 0; + particle_create(&p); + } + } } // lookup type by name diff --git a/code/weapon/muzzleflash.h b/code/weapon/muzzleflash.h index e99b7fdb8d..2f0fdd16c3 100644 --- a/code/weapon/muzzleflash.h +++ b/code/weapon/muzzleflash.h @@ -36,13 +36,7 @@ void mflash_level_init(); void mflash_level_close(); // create a muzzle flash on the guy -void mflash_create(vec3d *gun_pos, vec3d *gun_dir, physics_info *pip, int mflash_type); - -// process muzzle flash stuff -void mflash_process_all(); - -// render all muzzle flashes -void mflash_render_all(); +void mflash_create(vec3d *gun_pos, vec3d *gun_dir, physics_info *pip, int mflash_type, object *local = NULL); // lookup type by name int mflash_lookup(char *name); diff --git a/code/weapon/swarm.cpp b/code/weapon/swarm.cpp index 8a84e4ce99..f9f647deb0 100644 --- a/code/weapon/swarm.cpp +++ b/code/weapon/swarm.cpp @@ -37,26 +37,9 @@ #define SWARM_USED (1<<0) #define SWARM_POSITIVE_PATH (1<<1) -typedef struct swarm_info { - int flags; - int change_timestamp; - vec3d original_target; - vec3d new_target; - vec3d circle_rvec, circle_uvec; - vec3d last_offset; - uint change_count; - int path_num; // which path swarm missile is currently following - int homing_objnum; // object number that swarm missile is homing on, -1 if not homing - int change_time; // when swarm missile should next update direction, based on missile speed - float angle_offset; - float last_dist; // last distance to target -} swarm_info; - -#define MAX_SWARM_MISSILES 100 swarm_info Swarm_missiles[MAX_SWARM_MISSILES]; -#define MAX_TURRET_SWARM_INFO 100 turret_swarm_info Turret_swarm_info[MAX_TURRET_SWARM_INFO]; int Turret_swarm_validity_next_check_time; @@ -266,7 +249,7 @@ void swarm_update_direction(object *objp, float frametime) swarmp->change_timestamp = timestamp(swarmp->change_time); // check if swarm missile is homing, if so need to calculate a new target pos to turn towards - if ( hobjp != &obj_used_list && f2fl(Missiontime - wp->creation_time) > 0.5f ) { + if ( hobjp != &obj_used_list && f2fl(Missiontime - wp->creation_time) > 0.5f && ( f2fl(Missiontime - wp->creation_time) > wip->free_flight_time ) ) { swarmp->original_target = wp->homing_pos; // Calculate a rvec and uvec that will determine the displacement from the diff --git a/code/weapon/swarm.h b/code/weapon/swarm.h index ddb424f07a..77443251e0 100644 --- a/code/weapon/swarm.h +++ b/code/weapon/swarm.h @@ -12,6 +12,8 @@ #ifndef __FREESPACE_SWARM_H__ #define __FREESPACE_SWARM_H__ +#include "globalincs/pstypes.h" + struct object; struct ship_subsys; @@ -29,8 +31,29 @@ typedef struct turret_swarm_info { int weapon_num; } turret_swarm_info; +typedef struct swarm_info { + int flags; + int change_timestamp; + vec3d original_target; + vec3d new_target; + vec3d circle_rvec, circle_uvec; + vec3d last_offset; + uint change_count; + int path_num; // which path swarm missile is currently following + int homing_objnum; // object number that swarm missile is homing on, -1 if not homing + int change_time; // when swarm missile should next update direction, based on missile speed + float angle_offset; + float last_dist; // last distance to target +} swarm_info; + #define SWARM_DEFAULT_NUM_MISSILES_FIRED 4 // number of swarm missiles that launch when fired +#define MAX_SWARM_MISSILES 100 +extern swarm_info Swarm_missiles[MAX_SWARM_MISSILES]; + +#define MAX_TURRET_SWARM_INFO 100 +extern turret_swarm_info Turret_swarm_info[MAX_TURRET_SWARM_INFO]; + void swarm_level_init(); void swarm_delete(int index); int swarm_create(); diff --git a/code/weapon/weapon.h b/code/weapon/weapon.h index 70f47a5f5e..296a0435e2 100644 --- a/code/weapon/weapon.h +++ b/code/weapon/weapon.h @@ -102,6 +102,8 @@ extern int Num_weapon_subtypes; #define WIF2_SHOWN_ON_RADAR (1 << 21) // allows non-bombs be visible on radar #define WIF2_SHOW_FRIENDLY (1 << 22) // allows friendly weapon radar dots be drawn #define WIF2_CAPITAL_PLUS (1 << 23) // AI will not use this weapon on fighters or bombers +#define WIF2_EXTERNAL_WEAPON_FP (1 << 24) // will try to use external models FPs if possible +#define WIF2_EXTERNAL_WEAPON_LNCH (1 << 25) // render external secondary as a launcher #define WIF_HOMING (WIF_HOMING_HEAT | WIF_HOMING_ASPECT | WIF_HOMING_JAVELIN) #define WIF_LOCKED_HOMING (WIF_HOMING_ASPECT | WIF_HOMING_JAVELIN) @@ -193,7 +195,6 @@ typedef struct weapon { // info specific to beam weapons -#define MAX_BEAM_SECTIONS 5 typedef struct beam_weapon_section_info { float width; // width of the section ubyte rgba_inner[4]; // for non-textured beams @@ -216,7 +217,7 @@ typedef struct beam_weapon_info { float beam_particle_radius; // radius of beam particles float beam_particle_angle; // angle of beam particle spew cone generic_anim beam_particle_ani; // particle_ani - float beam_miss_factor[NUM_SKILL_LEVELS]; // magic # which makes beams miss more. by skill level + float beam_iff_miss_factor[MAX_IFFS][NUM_SKILL_LEVELS]; // magic # which makes beams miss more. by parent iff and player skill level int beam_loop_sound; // looping beam sound int beam_warmup_sound; // warmup sound int beam_warmdown_sound; // warmdown sound @@ -556,7 +557,7 @@ void weapon_set_tracking_info(int weapon_objnum, int parent_objnum, int target_o // for weapons flagged as particle spewers, spew particles. wheee void weapon_maybe_spew_particle(object *obj); - +bool weapon_armed(weapon *wp, bool hit_target); void weapon_hit( object * weapon_obj, object * other_obj, vec3d * hitpos, int quadrant = -1 ); int weapon_name_lookup(char *name); int cmeasure_name_lookup(char *name); diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index 4aae412589..daab59377b 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -628,6 +628,10 @@ void parse_wi_flags(weapon_info *weaponp, int wi_flags, int wi_flags2) weaponp->wi_flags2 |= WIF2_SHOW_FRIENDLY; else if (!stricmp(NOX("capital+"), weapon_strings[i])) weaponp->wi_flags2 |= WIF2_CAPITAL_PLUS; + else if (!stricmp(NOX("chain external model fps"), weapon_strings[i])) + weaponp->wi_flags2 |= WIF2_EXTERNAL_WEAPON_FP; + else if (!stricmp(NOX("external model launcher"), weapon_strings[i])) + weaponp->wi_flags2 |= WIF2_EXTERNAL_WEAPON_LNCH; else Warning(LOCATION, "Bogus string in weapon flags: %s\n", weapon_strings[i]); } @@ -934,8 +938,9 @@ void init_weapon_entry(int weap_info_index) generic_anim_init(&wip->b_info.beam_glow, NULL); generic_anim_init(&wip->b_info.beam_particle_ani, NULL); - for (i = 0; i < NUM_SKILL_LEVELS; i++) - wip->b_info.beam_miss_factor[i] = 0.00001f; + for (i = 0; i < MAX_IFFS; i++) + for (j = 0; j < NUM_SKILL_LEVELS; j++) + wip->b_info.beam_iff_miss_factor[i][j] = 0.00001f; //WMC - Okay, so this is needed now beam_weapon_section_info *bsip; @@ -1010,7 +1015,7 @@ int parse_weapon(int subtype, bool replace) char buf[WEAPONS_MULTITEXT_LENGTH]; weapon_info *wip = NULL; char fname[NAME_LENGTH]; - int idx; + int iff, idx; int primary_rearm_rate_specified=0; bool first_time = false; bool create_if_not_found = true; @@ -1239,6 +1244,16 @@ int parse_weapon(int subtype, bool replace) if(optional_string("$Mass:")) { stuff_float( &(wip->mass) ); + + // Goober5000 - hack in order to make the beam whack behavior of these three beams match all other beams + // this relies on Bobboau's beam whack hack in beam_apply_whack() + if (!strcmp(wip->name, "SAAA") && (wip->mass == 4.0f) + || !strcmp(wip->name, "MjolnirBeam") && (wip->mass == 1000.0f) + || !strcmp(wip->name, "MjolnirBeam#home") && (wip->mass == 1000.0f)) + { + wip->mass = 100.0f; + } + diag_printf ("Weapon mass -- %7.3f\n", wip->mass); } @@ -1996,11 +2011,28 @@ int parse_weapon(int subtype, bool replace) // magic miss # if(optional_string("+Miss Factor:")) { - for(idx=0; idxb_info.beam_miss_factor[idx])) { + for(idx=0; idxb_info.beam_iff_miss_factor[iff][idx] = temp; + } + } + } + // now check miss factors for each IFF + for(iff=0; iffb_info.beam_iff_miss_factor[iff][idx])) { + break; + } + } } } @@ -3442,6 +3474,10 @@ void weapon_delete(object *obj) weapon *wp; int num; + Script_system.SetHookObjects(2, "Weapon", obj, "Self", obj); + Script_system.RunCondition(CHA_ONWEAPONDELETE); + Script_system.RemHookVars(2, "Weapon", "Self"); + num = obj->instance; Assert( Weapons[num].objnum == OBJ_INDEX(obj)); @@ -4587,7 +4623,7 @@ void weapon_set_tracking_info(int weapon_objnum, int parent_objnum, int target_o targeting_same = 0; } - if ((target_objnum != -1) && (!targeting_same || ((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && (target_team == Iff_traitor))) ) { + if ((target_objnum != -1) && (!targeting_same || (MULTI_DOGFIGHT && (target_team == Iff_traitor))) ) { wp->target_num = target_objnum; wp->target_sig = Objects[target_objnum].signature; wp->nearest_dist = 99999.0f; @@ -5062,7 +5098,15 @@ void spawn_child_weapons(object *objp) //if the child inherits parent target, do it only if the parent weapon was locked to begin with if ((child_wip->wi_flags2 & WIF2_INHERIT_PARENT_TARGET) && (wp->homing_object != &obj_used_list)) { - weapon_set_tracking_info(weapon_objnum, parent_num, wp->target_num, 1, wp->homing_subsys); + //Deal with swarm weapons + if (wp->swarm_index >= 0) { + swarm_info *swarmp; + swarmp = &Swarm_missiles[wp->swarm_index]; + + weapon_set_tracking_info(weapon_objnum, parent_num, swarmp->homing_objnum, 1, wp->homing_subsys); + } else { + weapon_set_tracking_info(weapon_objnum, parent_num, wp->target_num, 1, wp->homing_subsys); + } } // Assign a little randomness to lifeleft so they don't all disappear at the same time. diff --git a/code/windows_stub/config.h b/code/windows_stub/config.h index aa9bae0b7b..e0b97174b5 100644 --- a/code/windows_stub/config.h +++ b/code/windows_stub/config.h @@ -136,7 +136,8 @@ typedef struct _LARGE_INTEGER { // sound defines/structs #define WAVE_FORMAT_PCM 1 -#define WAVE_FORMAT_ADPCM 2 +#define WAVE_FORMAT_ADPCM 2 +#define WAVE_FORMAT_IEEE_FLOAT 3 #pragma pack(1) // required to get proper values in ds_parse_wave() typedef struct { diff --git a/code/windows_stub/stubs.cpp b/code/windows_stub/stubs.cpp index 2d000885de..189a2b27c8 100644 --- a/code/windows_stub/stubs.cpp +++ b/code/windows_stub/stubs.cpp @@ -145,6 +145,19 @@ void WinAssert(char * text, char *filename, int line, const char * format, ... ) abort(); } +void WarningEx( char *filename, int line, const char *format, ... ) +{ +#ifndef NDEBUG + if (Cmdline_extra_warn) { + char msg[2 * MAX_BUF_SIZE]; + va_list args; + va_start(args, format); + vsprintf(msg, format, args); + va_end(args); + Warning(filename, line, msg); + } +#endif +} // standard warning message void Warning( char * filename, int line, const char * format, ... ) diff --git a/code/wxfred2/aboutbox.cpp b/code/wxfred2/aboutbox.cpp index bbd5f8ca60..b0c73d2c7f 100644 --- a/code/wxfred2/aboutbox.cpp +++ b/code/wxfred2/aboutbox.cpp @@ -28,6 +28,7 @@ END_EVENT_TABLE() dlgAboutBox::dlgAboutBox(wxWindow *parent) : wxDialog() { + wxInitAllImageHandlers(); wxXmlResource::Get()->LoadDialog(this, parent, "dlgAboutBox"); } diff --git a/code/wxfred2/campaigneditor.cpp b/code/wxfred2/campaigneditor.cpp index 31989bc3a0..0c92e8c779 100644 --- a/code/wxfred2/campaigneditor.cpp +++ b/code/wxfred2/campaigneditor.cpp @@ -21,16 +21,16 @@ #include -BEGIN_EVENT_TABLE(dlgCampaignEditor, wxDialog) +BEGIN_EVENT_TABLE(frmCampaignEditor, wxFrame) END_EVENT_TABLE() -dlgCampaignEditor::dlgCampaignEditor(wxWindow *parent) - : wxDialog() +frmCampaignEditor::frmCampaignEditor(wxWindow *parent) + : wxFrame() { - wxXmlResource::Get()->LoadDialog(this, parent, "dlgCampaignEditor"); + wxXmlResource::Get()->LoadFrame(this, parent, "frmCampaignEditor"); } -dlgCampaignEditor::~dlgCampaignEditor() +frmCampaignEditor::~frmCampaignEditor() {} diff --git a/code/wxfred2/campaigneditor.h b/code/wxfred2/campaigneditor.h index 56fcb185d7..5befb82449 100644 --- a/code/wxfred2/campaigneditor.h +++ b/code/wxfred2/campaigneditor.h @@ -9,12 +9,12 @@ #ifndef _CAMPAIGN_EDITOR_H #define _CAMPAIGN_EDITOR_H -class dlgCampaignEditor : public wxDialog +class frmCampaignEditor : public wxFrame { public: // constructor/destructors - dlgCampaignEditor(wxWindow *parent); - ~dlgCampaignEditor(); + frmCampaignEditor(wxWindow *parent); + ~frmCampaignEditor(); // event handlers // event functions go here diff --git a/code/wxfred2/commandbriefingeditor.cpp b/code/wxfred2/commandbriefingeditor.cpp index 1fb9120cd1..d3660d967a 100644 --- a/code/wxfred2/commandbriefingeditor.cpp +++ b/code/wxfred2/commandbriefingeditor.cpp @@ -28,6 +28,7 @@ END_EVENT_TABLE() dlgCommandBriefingEditor::dlgCommandBriefingEditor(wxWindow *parent) : wxDialog() { + wxInitAllImageHandlers(); wxXmlResource::Get()->LoadDialog(this, parent, "dlgCommandBriefingEditor"); } diff --git a/code/wxfred2/debriefingeditor.cpp b/code/wxfred2/debriefingeditor.cpp index 45743edefa..b35aefacfb 100644 --- a/code/wxfred2/debriefingeditor.cpp +++ b/code/wxfred2/debriefingeditor.cpp @@ -28,6 +28,7 @@ END_EVENT_TABLE() dlgDebriefingEditor::dlgDebriefingEditor(wxWindow *parent) : wxDialog() { + wxInitAllImageHandlers(); wxXmlResource::Get()->LoadDialog(this, parent, "dlgDebriefingEditor"); } diff --git a/code/wxfred2/fredframe.cpp b/code/wxfred2/fredframe.cpp index 0850ac5e4a..f552f2000a 100644 --- a/code/wxfred2/fredframe.cpp +++ b/code/wxfred2/fredframe.cpp @@ -53,9 +53,10 @@ BEGIN_EVENT_TABLE(FREDFrame, wxFrame) END_EVENT_TABLE() -FREDFrame::FREDFrame(const wxChar *title, int xpos, int ypos, int width, int height) +FREDFrame::FREDFrame(const wxChar *title, int xpos, int ypos, int width, int height, wxFREDMission* current_Mission) : wxFrame(NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height)) { + the_Mission = current_Mission; myMenuBar = wxXmlResource::Get()->LoadMenuBar(_T("FREDMenu")); SetMenuBar(myMenuBar); @@ -115,7 +116,7 @@ void FREDFrame::OnEditorsAsteroidField(wxCommandEvent &WXUNUSED(event)) void FREDFrame::OnEditorsMissionSpecs(wxCommandEvent &WXUNUSED(event)) { - dlgMissionSpecsEditor *dlg = new dlgMissionSpecsEditor(this); + dlgMissionSpecsEditor *dlg = new dlgMissionSpecsEditor(this, the_Mission); dlg->ShowModal(); dlg->Destroy(); } @@ -157,9 +158,8 @@ void FREDFrame::OnEditorsVoiceActingManager(wxCommandEvent &WXUNUSED(event)) void FREDFrame::OnEditorsCampaign(wxCommandEvent &WXUNUSED(event)) { - dlgCampaignEditor *dlg = new dlgCampaignEditor(this); - dlg->ShowModal(); - dlg->Destroy(); + frmCampaignEditor *frm = new frmCampaignEditor(this); + frm->Show(); } void FREDFrame::OnHelpAboutFRED2(wxCommandEvent &WXUNUSED(event)) diff --git a/code/wxfred2/fredframe.h b/code/wxfred2/fredframe.h index 4e6bc9b8fd..303ca68fd3 100644 --- a/code/wxfred2/fredframe.h +++ b/code/wxfred2/fredframe.h @@ -9,11 +9,13 @@ #ifndef _FREDFRAME_H #define _FREDFRAME_H +#include "mission.h" + class FREDFrame : public wxFrame { public: // constructor/destructors - FREDFrame(const wxChar *title, int xpos, int ypos, int width, int height); + FREDFrame(const wxChar *title, int xpos, int ypos, int width, int height, wxFREDMission* current_Mission); ~FREDFrame(); // event handlers @@ -32,6 +34,8 @@ class FREDFrame : public wxFrame void OnEditorsCampaign(wxCommandEvent &WXUNUSED(event)); void OnHelpAboutFRED2(wxCommandEvent &WXUNUSED(event)); + wxFREDMission* the_Mission; + protected: // events DECLARE_EVENT_TABLE() diff --git a/code/wxfred2/mission.h b/code/wxfred2/mission.h new file mode 100644 index 0000000000..c6be300a2e --- /dev/null +++ b/code/wxfred2/mission.h @@ -0,0 +1,198 @@ +#ifndef __WXFRED_MISSION__ +#define __WXFRED_MISSION__ + +#include "globalincs/pstypes.h" +#include "globalincs/vmallocator.h" +#include "globalincs/globals.h" +#include "graphics/2d.h" +#include "sound/sound.h" +#include "ai/ai_profiles.h" +#include "mission/missionparse.h" + +//wxWidgets stuff + +#include + +//WMC - This should be here +#define FS_MISSION_FILE_EXT NOX(".fs2") + +struct wing; +struct p_dock_instance; + +#define NUM_NEBULAS 3 // how many background nebulas we have altogether +#define NUM_NEBULA_COLORS 9 + +// arrival anchor types +// mask should be high enough to avoid conflicting with ship anchors +#define SPECIAL_ARRIVAL_ANCHOR_FLAG 0x1000 +#define SPECIAL_ARRIVAL_ANCHOR_PLAYER_FLAG 0x0100 + +// update version when mission file format changes, and add approprate code +// to check loaded mission version numbers in the parse code. Also, be sure +// to update both MissionParse and MissionSave (FRED) when changing the +// mission file format! +#define MISSION_VERSION 0.10f +#define FRED_MISSION_VERSION 0.10f + +#define WING_PLAYER_BASE 0x80000 // used by Fred to tell ship_index in a wing points to a player + +// mission parse flags used for parse_mission() to tell what kind of information to get from the mission file +#define MPF_ONLY_MISSION_INFO (1 << 0) +#define MPF_IMPORT_FSM (1 << 1) + +// bitfield definitions for missions game types +#define OLD_MAX_GAME_TYPES 4 // needed for compatibility +#define OLD_GAME_TYPE_SINGLE_ONLY 0 +#define OLD_GAME_TYPE_MULTI_ONLY 1 +#define OLD_GAME_TYPE_SINGLE_MULTI 2 +#define OLD_GAME_TYPE_TRAINING 3 + +#define MAX_MISSION_TYPES 5 +#define MISSION_TYPE_SINGLE (1<<0) +#define MISSION_TYPE_MULTI (1<<1) +#define MISSION_TYPE_TRAINING (1<<2) +#define MISSION_TYPE_MULTI_COOP (1<<3) +#define MISSION_TYPE_MULTI_TEAMS (1<<4) +#define MISSION_TYPE_MULTI_DOGFIGHT (1<<5) + +#define MISSION_FLAG_SUBSPACE (1<<0) // mission takes place in subspace +#define MISSION_FLAG_NO_PROMOTION (1<<1) // cannot get promoted or badges in this mission +#define MISSION_FLAG_FULLNEB (1<<2) // mission is a full nebula mission +#define MISSION_FLAG_NO_BUILTIN_MSGS (1<<3) // disables builtin msgs +#define MISSION_FLAG_NO_TRAITOR (1<<4) // player cannot become a traitor +#define MISSION_FLAG_TOGGLE_SHIP_TRAILS (1<<5) // toggles ship trails (off in nebula, on outside nebula) +#define MISSION_FLAG_SUPPORT_REPAIRS_HULL (1<<6) // Toggles support ship repair of ship hulls +#define MISSION_FLAG_BEAM_FREE_ALL_BY_DEFAULT (1<<7) // Beam-free-all by default - Goober5000 +#define MISSION_FLAG_CURRENTLY_UNUSED_1 (1<<8) +#define MISSION_FLAG_CURRENTLY_UNUSED_2 (1<<9) +#define MISSION_FLAG_NO_BRIEFING (1<<10) // no briefing, jump right into mission - Goober5000 +#define MISSION_FLAG_TOGGLE_DEBRIEFING (1<<11) // Turn on debriefing for dogfight. Off for everything else - Goober5000 +#define MISSION_FLAG_CURRENTLY_UNUSED_3 (1<<12) +#define MISSION_FLAG_ALLOW_DOCK_TREES (1<<13) // toggle between hub and tree model for ship docking (see objectdock.cpp) - Gooober5000 +#define MISSION_FLAG_2D_MISSION (1<<14) // Mission is meant to be played top-down style; 2D physics and movement. +#define MISSION_FLAG_CURRENTLY_UNUSED_4 (1<<15) +#define MISSION_FLAG_RED_ALERT (1<<16) // a red-alert mission - Goober5000 +#define MISSION_FLAG_SCRAMBLE (1<<17) // a scramble mission - Goober5000 +#define MISSION_FLAG_NO_BUILTIN_COMMAND (1<<18) // turns off Command without turning off pilots - Karajorma +#define MISSION_FLAG_PLAYER_START_AI (1<<19) // Player Starts mission under AI Control (NOT MULTI COMPATABLE) - Kazan +#define MISSION_FLAG_ALL_ATTACK (1<<20) // all teams at war - Goober5000 +#define MISSION_FLAG_USE_AP_CINEMATICS (1<<21) // Kazan - use autopilot cinematics +#define MISSION_FLAG_DEACTIVATE_AP (1<<22) // KeldorKatarn - deactivate autopilot (patch approved by Kazan) + +// some mice macros for mission type +#define IS_MISSION_MULTI_COOP (The_mission.game_type & MISSION_TYPE_MULTI_COOP) +#define IS_MISSION_MULTI_TEAMS (The_mission.game_type & MISSION_TYPE_MULTI_TEAMS) +#define IS_MISSION_MULTI_DOGFIGHT (The_mission.game_type & MISSION_TYPE_MULTI_DOGFIGHT) + +// movie type defines +#define MOVIE_PRE_FICTION 0 +#define MOVIE_PRE_CMD_BRIEF 1 +#define MOVIE_PRE_BRIEF 2 +#define MOVIE_PRE_GAME 3 +#define MOVIE_PRE_DEBRIEF 4 +#define MOVIE_END_CAMPAIGN 5 + +class wxFREDMissionHeader { +public: + wxString name; + wxString author; + float version; + wxString created; + wxString modified; + wxString notes; + wxString mission_desc; + int game_type; + int flags; + int num_players; // valid in multiplayer missions -- number of players supported + uint num_respawns; // valid in multiplayer missions -- number of respawns allowed + int max_respawn_delay; // valid in multiplayer missions -- number of respawns allowed + support_ship_info support_ships; // Goober5000 + wxString squad_filename; // if the player has been reassigned to a squadron, this is the filename of the logo, otherwise empty string + wxString squad_name; // if the player has been reassigned to a squadron, this is the name of the squadron, otherwise empty string + char loading_screen[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]; + char skybox_model[MAX_FILENAME_LEN]; + char envmap_name[MAX_FILENAME_LEN]; + int skybox_flags; + int contrail_threshold; + int ambient_light_level; + sound_env sound_environment; + + // Goober5000 + int command_persona; + wxString command_sender; + + // Goober5000 + wxString event_music_name; + wxString briefing_music_name; + wxString substitute_event_music_name; + wxString substitute_briefing_music_name; + + // Goober5000 + ai_profile_t *ai_profile; + + //SCP_vector cutscenes; + + void Reset_header( ) + { + name = "Untitled"; + author = "Someone"; + version = 0.; + + wxDateTime* now = new wxDateTime(); + created = now->Now().Format("%c"); + modified = now->Now().Format("%c"); + notes = ""; + mission_desc = ""; + game_type = 0; + flags = 0; + num_players = 0; + num_respawns = 0; + max_respawn_delay = 0; + memset( &support_ships, 0, sizeof( support_ships ) ); + + support_ships.arrival_location = ARRIVE_AT_LOCATION; + support_ships.arrival_anchor = -1; + support_ships.departure_location = DEPART_AT_LOCATION; + support_ships.departure_anchor = -1; + support_ships.max_hull_repair_val = 0.0f; + support_ships.max_subsys_repair_val = 100.0f; //ASSUMPTION: full repair capabilities + support_ships.max_support_ships = -1; // infinite + support_ships.ship_class = -1; + support_ships.tally = 0; + support_ships.support_available_for_species = 0; + + squad_filename = ""; + squad_name = ""; + for ( int i = 0; i < GR_NUM_RESOLUTIONS; i++ ) + loading_screen[ i ][ 0 ] = '\0'; + skybox_model[ 0 ] = '\0'; + envmap_name[ 0 ] = '\0'; + skybox_flags = 0; + contrail_threshold = CONTRAIL_THRESHOLD_DEFAULT; + ambient_light_level = 0; + sound_environment.id = -1; + command_persona = 0; + command_sender = ""; + event_music_name = ""; + briefing_music_name = ""; + substitute_event_music_name = ""; + substitute_briefing_music_name = ""; + ai_profile = NULL; + //cutscenes.clear( ); + } + + wxFREDMissionHeader( ) + { + Reset_header( ); + } + +}; + +class wxFREDMission : public wxFREDMissionHeader { +public: + wxFREDMission() { + Reset_header(); + } +}; + +#endif \ No newline at end of file diff --git a/code/wxfred2/missionspecseditor.cpp b/code/wxfred2/missionspecseditor.cpp index e638552260..cee6e90716 100644 --- a/code/wxfred2/missionspecseditor.cpp +++ b/code/wxfred2/missionspecseditor.cpp @@ -19,18 +19,74 @@ #include "missionspecseditor.h" #include +#include BEGIN_EVENT_TABLE(dlgMissionSpecsEditor, wxDialog) + EVT_TEXT(XRCID("txtTitle"), dlgMissionSpecsEditor::OnTitleChange) + EVT_TEXT(XRCID("txtAuthor"), dlgMissionSpecsEditor::OnAuthorChange) END_EVENT_TABLE() -dlgMissionSpecsEditor::dlgMissionSpecsEditor(wxWindow *parent) +dlgMissionSpecsEditor::dlgMissionSpecsEditor(wxWindow *parent, wxFREDMission* current_Mission) : wxDialog() { + the_Mission = current_Mission; wxXmlResource::Get()->LoadDialog(this, parent, "dlgMissionSpecsEditor"); + + //set up our data + XRCCTRL(*this, "txtCreated", wxStaticText)->SetLabel(the_Mission->created); + XRCCTRL(*this, "txtModified", wxStaticText)->SetLabel(the_Mission->modified); + + if (the_Mission->game_type & MISSION_TYPE_SINGLE) { + XRCCTRL(*this, "optSinglePlayer", wxRadioButton)->SetValue(true); + XRCCTRL(*this, "optCooperative", wxRadioButton)->Disable(); + XRCCTRL(*this, "optTeamVsTeam", wxRadioButton)->Disable(); + XRCCTRL(*this, "optDogfight", wxRadioButton)->Disable(); + } else if (the_Mission->game_type & MISSION_TYPE_MULTI) { + XRCCTRL(*this, "optMultiPlayer", wxRadioButton)->SetValue(true); + XRCCTRL(*this, "optCooperative", wxRadioButton)->Enable(); + XRCCTRL(*this, "optTeamVsTeam", wxRadioButton)->Enable(); + XRCCTRL(*this, "optDogfight", wxRadioButton)->Enable(); + if (the_Mission->game_type & MISSION_TYPE_MULTI_COOP) + XRCCTRL(*this, "optCooperative", wxRadioButton)->SetValue(true); + else if (the_Mission->game_type & MISSION_TYPE_MULTI_TEAMS) + XRCCTRL(*this, "optTeamVsTeam", wxRadioButton)->SetValue(true); + else if (the_Mission->game_type & MISSION_TYPE_MULTI_DOGFIGHT) + XRCCTRL(*this, "optDogfight", wxRadioButton)->SetValue(true); + } else if (the_Mission->game_type & MISSION_TYPE_TRAINING) { + XRCCTRL(*this, "optTraining", wxRadioButton)->SetValue(true); + XRCCTRL(*this, "optCooperative", wxRadioButton)->Disable(); + XRCCTRL(*this, "optTeamVsTeam", wxRadioButton)->Disable(); + XRCCTRL(*this, "optDogfight", wxRadioButton)->Disable(); + } + + XRCCTRL(*this, "spnMaxRespawns", wxSpinCtrl)->SetValue(the_Mission->num_respawns); + XRCCTRL(*this, "spnMaxRespawnDelay", wxSpinCtrl)->SetValue(the_Mission->max_respawn_delay); + + XRCCTRL(*this, "txtSquadronName", wxTextCtrl)->SetValue(the_Mission->squad_name); + XRCCTRL(*this, "txtSquadronLogo", wxTextCtrl)->SetValue(the_Mission->squad_filename); + + XRCCTRL(*this, "chkDisallowSupportShips", wxCheckBox)->SetValue(the_Mission->support_ships.max_support_ships == 0); + XRCCTRL(*this, "chkSupportShipsRepairHull", wxCheckBox)->SetValue( (the_Mission->flags & MISSION_FLAG_SUPPORT_REPAIRS_HULL) ? true : false); + XRCCTRL(*this, "txtHullRepairCeiling", wxTextCtrl)->SetValue(wxString::Format(wxT("%f"), the_Mission->support_ships.max_hull_repair_val) ); + XRCCTRL(*this, "txtSubsystemRepair", wxTextCtrl)->SetValue(wxString::Format(wxT("%f"), the_Mission->support_ships.max_subsys_repair_val) ); + + XRCCTRL(*this, "chkToggleNebula", wxCheckBox)->SetValue( (the_Mission->flags & MISSION_FLAG_TOGGLE_SHIP_TRAILS) ? true : false); + XRCCTRL(*this, "chkMinimumTrailSpeed", wxCheckBox)->SetValue(the_Mission->contrail_threshold != CONTRAIL_THRESHOLD_DEFAULT); + if (the_Mission->contrail_threshold != CONTRAIL_THRESHOLD_DEFAULT) { + XRCCTRL(*this, "spnMinimumTrailSpeed", wxSpinCtrl)->Enable(); + XRCCTRL(*this, "spnMinimumTrailSpeed", wxSpinCtrl)->SetValue(the_Mission->contrail_threshold); + } } dlgMissionSpecsEditor::~dlgMissionSpecsEditor() {} +void dlgMissionSpecsEditor::OnTitleChange(wxCommandEvent &WXUNUSED(event)) { + the_Mission->name = XRCCTRL(*this, "txtTitle", wxTextCtrl)->GetValue(); +} + +void dlgMissionSpecsEditor::OnAuthorChange(wxCommandEvent &WXUNUSED(event)) { + the_Mission->author = XRCCTRL(*this, "txtDesigner", wxTextCtrl)->GetValue(); +} diff --git a/code/wxfred2/missionspecseditor.h b/code/wxfred2/missionspecseditor.h index 00a491a44d..10ccb0f9cf 100644 --- a/code/wxfred2/missionspecseditor.h +++ b/code/wxfred2/missionspecseditor.h @@ -9,15 +9,22 @@ #ifndef _MISSION_SPECS_EDITOR_H #define _MISSION_SPECS_EDITOR_H +#include "mission.h" + + class dlgMissionSpecsEditor : public wxDialog { public: + wxFREDMission* the_Mission; + // constructor/destructors - dlgMissionSpecsEditor(wxWindow *parent); + dlgMissionSpecsEditor(wxWindow *parent, wxFREDMission* current_Mission); ~dlgMissionSpecsEditor(); // event handlers // event functions go here + void OnTitleChange(wxCommandEvent &WXUNUSED(event)); + void OnAuthorChange(wxCommandEvent &WXUNUSED(event)); protected: // events diff --git a/code/wxfred2/res/V_fred.ico b/code/wxfred2/res/V_fred.ico new file mode 100644 index 0000000000000000000000000000000000000000..64bdf6d790f58bc2e9b5a6bea390f923107491b0 GIT binary patch literal 182593 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 literal 0 HcmV?d00001 diff --git a/code/wxfred2/res/V_fred.xpm b/code/wxfred2/res/V_fred.xpm new file mode 100644 index 0000000000..dade7226d3 --- /dev/null +++ b/code/wxfred2/res/V_fred.xpm @@ -0,0 +1,391 @@ +/* XPM */ +static char *V_fred_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 128 128 256 2", +/* colors */ +"`` c #04020c", +"`. c #7c8284", +"`# c #444234", +"`a c #bcc2bc", +"`b c #5c625c", +"`c c #a4a294", +"`d c #7c6a4c", +"`e c #1c221c", +"`f c #dce2dc", +"`g c #5c523c", +"`h c #8c9294", +"`i c #6c7274", +"`j c #acb2ac", +"`k c #2c322c", +"`l c #ccd2cc", +"`m c #6c6244", +"`n c #7c7654", +"`o c #ecf2ec", +"`p c #545244", +"`q c #0c120c", +"`r c #8c8264", +"`s c #6c6664", +"`t c #5c5654", +"`u c #9c9274", +"`v c #aca28c", +"`w c #bcb2a4", +"`x c #3c3631", +"`y c #7c7674", +"`z c #2c2629", +"`A c #ccc6ba", +"`B c #1c1619", +"`C c #8c8687", +"`D c #4c4641", +"`E c #dcd6ce", +"`F c #9c969c", +"`G c #746a4b", +"`H c #ece6e4", +"`I c #5c5a4c", +"`J c #8c7a5c", +"`K c #f4faf5", +"`L c #aca6ac", +"`M c #bcbaae", +"`N c #242a2b", +"`O c #847e60", +"`P c #141a1c", +"`Q c #3c3e3c", +"`R c #c4cac4", +"`S c #5c6264", +"`T c #7c7254", +"`U c #343a3b", +"`V c #6c6254", +"`W c #545a59", +"`X c #948a71", +"`Y c #5c5e5c", +"`Z c #4c4e4f", +"`0 c #dcdedb", +"`1 c #bcc2c4", +"`2 c #a4aaa8", +"`3 c #e4eae5", +"`4 c #7c766c", +"`5 c #6c6e6c", +"`6 c #a49a84", +"`7 c #2c2e2e", +"`8 c #cccecc", +".` c #8c8e90", +".. c #9c9e9a", +".# c #6c5a3c", +".a c #bcbabc", +".b c #040a14", +".c c #848a88", +".d c #444a4c", +".e c #242223", +".f c #b4bab4", +".g c #343233", +".h c #ccd2d4", +".i c #f4f2f4", +".j c #4c5254", +".k c #141213", +".l c #acaa9c", +".m c #1c1e1f", +".n c #3c4244", +".o c #9ca2a4", +".p c #e4e2e2", +".q c #747a7c", +".r c #acb2b4", +".s c #7c7e7f", +".t c #6c6a5c", +".u c #eceeec", +".v c #848284", +".w c #747273", +".x c #746244", +".y c #847658", +".z c #9c928c", +".A c #cccacb", +".B c #dcd6dc", +".C c #fcfafc", +".D c #c4baaf", +".E c #443e39", +".F c #a49e97", +".G c #140e11", +".H c #34323c", +".I c #f4f2fc", +".J c #c4c2b8", +".K c #64624f", +".L c #7c6e5c", +".M c #5c5244", +".N c #949a9c", +".O c #94866c", +".P c #645a54", +".Q c #3c363c", +".R c #2c2a34", +".S c #4c464c", +".T c #645a42", +".U c #acaead", +".V c #646a6c", +".W c #847255", +".X c #948a7c", +".Y c #645e54", +".Z c #544e49", +".0 c #746e69", +".1 c #948e8a", +".2 c #24222c", +".3 c #14121c", +".4 c #e4e6ec", +".5 c #84868c", +".6 c #74767c", +".7 c #7c6e53", +".8 c #949294", +"#` c #d4d2c9", +"#. c #e4dedc", +"## c #f4eef4", +"#a c #b4aea4", +"#b c #645634", +"#c c #d4cabc", +"#d c #646264", +"#e c #746654", +"#f c #c4c2c4", +"#g c #847a65", +"#h c #0c0a14", +"#i c #d4d2d4", +"#j c #545254", +"#k c #b4aa9a", +"#l c #444244", +"#m c #a4a2a4", +"#n c #b4b2b4", +"#o c #746a54", +"#p c #a49684", +"#q c #8c8674", +"#r c #aca69c", +"#s c #bcb6b4", +"#t c #1c1a24", +"#u c #6c5e4c", +"#v c #64625c", +"#w c #645a4c", +"#x c #b4b2a6", +"#y c #342e30", +"#z c #d4cec4", +"#A c #241e1f", +"#B c #847e82", +"#C c #1c222c", +"#D c #0c121c", +"#E c #242a34", +"#F c #141a24", +"#G c #3c3e44", +"#H c #7c725c", +"#I c #5c5e64", +"#J c #dcdee4", +"#K c #9c9ea4", +"#L c #eceef4", +"#M c #443e44", +"#N c #a49ea4", +"#O c #645e64", +"#P c #544e54", +"#Q c #746e74", +"#R c #948e94", +"#S c #44463c", +"#T c #a4a69c", +"#U c #6c664c", +"#V c #54564a", +"#W c #8c866c", +"#X c #6c6a6b", +"#Y c #5c5a5a", +"#Z c #9c967c", +"#0 c #aca694", +"#1 c #bcb6a7", +"#2 c #3c3a34", +"#3 c #7c7a7a", +"#4 c #2c2a2c", +"#5 c #cccabc", +"#6 c #1c1a1c", +"#7 c #8c8a8c", +"#8 c #4c4a44", +"a` c #dcdad2", +"a. c #9c9a9b", +"a# c #746e4c", +"aa c #eceaea", +"ab c #8c7e63", +"ac c #6c6656", +"ad c #948e74", +"ae c #a49e89", +"af c #6c5e3e", +"ag c #bcbebc", +"ah c #242624", +"ai c #343634", +"aj c #f4f6f4", +"ak c #141614", +"al c #e4e6e3", +"am c #848684", +"an c #747674", +"ao c #74664b", +"ap c #847a5c", +"aq c #9c9684", +"ar c #fcfefc", +"as c #c4bead", +"at c #c4c6b8", +"au c #5c5648", +"av c #949694", +"aw c #d4d6cc", +"ax c #646668", +"ay c #c4c6c5", +"az c #0c0e11", +"aA c #d4d6d4", +"aB c #545656", +"aC c #b4ae9c", +"aD c #444645", +"aE c #a4a6a5", +"aF c #b4b6b5", +"aG c #746e55", +"aH c #04060c", +"aI c #acaaac", +"aJ c #dcdadc", +"aK c #34363c", +"aL c #f4f6fc", +"aM c #3c3a3c", +"aN c #4c4a4c", +"aO c #948e7c", +"aP c #24262c", +"aQ c #14161c", +"aR c #64665c", +"aS c #645e4c", +"aT c #44423c", +"aU c #a4a29c", +"aV c #7c6a54", +"aW c #1c2224", +"aX c #dce2e4", +"aY c #2c3234", +"aZ c #6c624c", +"a0 c #7c765c", +"a1 c #ecf2f4", +"a2 c #54524c", +"a3 c #0c1214", +"a4 c #8c826c", +"a5 c #6c666c", +"a6 c #5c565c", +"a7 c #9c927c", +"a8 c #aca294", +/* pixels */ +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar#.`M.Cararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.CaE`Xarararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.i.sap.iararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararal#X.y.pararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar#i.Y.yawararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararagaS.7`Aar.Cararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar`LaS.7aCararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararavaZ`T`vararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.C.sao.y#Zararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararar.C`K.C`K.C`K.C`K.C`K.C`K.C`K.C`K.C`Karararararararar`K.C`K.C`K.C`K.C`K.C`K.C`K.C`K.C`K.Carararararararar.ian.7`G#g.iar`K.C`K.C`K.C`K.C`K.C`K.C`K.C`K.Carararararararararar.C`K.C`K.C`K.C`K.C`K.C`K.C`K.Carararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararalac`Ga7`Harararararararararararararararararararararararararararararararararararararararararararararar.Carararararararararararararar", +"ararararararararar`0.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8av#7`1arararararar`E.`.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8av.aaLarararararararaA.Y`X.CaF.`.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8`h`0arararararararararaE.`av.8.8.8.8.8.8.8.8.8av.``L.A`oarararararararararararararararar", +"ararararararar.Car.a#DaQ#DaQ#DaQaQ#DaQaQ#DaQaQ#DaQaQ#F``#3ar.Carar.Car`2#haQ#DaQ#DaQaQ#DaQaQ#DaQaQ#DaQ#DaQ.maN`0arararar.Car#f.Z#Tar`Z.baQaQ#DaQaQ#DaQaQ#DaQaQ#DaQaQ#D#Faz.aar.Cararararararar.n#haQaQ#DaQaQ#DaQaQ#DaQaQ.3#FaP.H.waAarararararararararararararar", +"ararararararararar#faP#E#4#E`NaP#E`NaP#E`NaP#E`NaPaP.R`P.5arararar.Car#naW`7.R#E`NaP#E`NaP#E`NaP#E`N#E.R#E.R#D`5ar.CararararaF.M`car#d.m`7#E#4aP`N#EaP`N#EaP`N#EaP`NaP#4.2agarararararararar.C#j#C`7#E#4aP#E`NaP#E`NaPaP`N#E`z#C`P.2am.Carararararararararararar", +"ararararararar.Carag.2aPaPaPaY.H.gaY.H.gaY.H.gaY.HaYaK#C#7ar.Carar`Kar.U.maPaPaPaY.H.gaY.H.gaY.H.g.H#4aWaP`N.2`QajarararararaE.T`car#O.maPaP.RaY.HaY.HaY.gaY.HaY.HaY.HaY`7`1arararararararar.C`Z.maPaP.RaY.HaY.HaY.HaY.H`7.2`PaP.RaP.3#Xarararararararararararar", +"ararararararararar#faWaPaP`7.Baja1.ia1.ia1.ia1.ia1.i`o.iajarararararar#n#t#EaP`7.Baja1.ia1.ia1.i`oa1.u#O.m#E.2`7.iararararar.8.TaUar#I#t`7aQ.sar.u.i`o.ia1.ia1.i`o.ia1.i.i.Cararararararararar`Z.m.RaQ.sar.u.ia1.i`o.i.i.u`1#3aPaW`N.RaQ.Nararararararararararar", +"ararararararar.Carag.2aPaP`7alarararararararararararararararararar.Car.U.m#E.2`7.4arararararararar.Car.8.3`N.2aY.iarararar.Cam.#aUar#O#F`7aQ.var.Cararararararararararararararararararararar.C`Z.m`7aQ.5ararararararararararar.A`7.2`N#Cai.uarararararararararar", +"ararararararararar#faWaPaP.RaXar.C`K.C.C`K.Cararararararararararar`Kar#x#CaPaP.R`far.C`K.C.C`K.C`Kajar.8#D`7.2`7.iararararaj.w`m.Far#I.m.RaQ.cararararararararararararararararararararararar.C`Z#C#EaQ.var.Cararararararar.C`Kar`L#FaP#4#taIar.Carararararararar", +"ararararararar.Carag.2aPaP`7aaarararararararararararararararararararar.U#t`N.2`7aaarararararararar.Car#7aQ.R#CaY.iarararar##`5`m.Far#O.m#E.maBa.`h.8.8.8.8.8`h.pararararararararararararararar`Z.m.RaQ.5ar.Carararararararararar`K#G.e#EaQ.sarararararararararar", +"ararararararararar#faWaPaP#Eamav.8.8.8.8.`#K.Carararararararararar.Car.U.m#EaP#E.5av.8.8.8.8.8.8`hav.5ai.2`N.e.g`oararararal#X`G.Far#I#t`NaP#C.3aQaQaQ#DaQaQ.3`1ar.Carararararararararararar`K`Z.m#EaQ.vararararararararararararar#X#t.R.m`Sarararararararararar", +"ararararararar.Carag.2aPaPaPaQaQ.3#DaQaQ#D.gajarararararararararararar#n.maPaPaPaQaQ.3#DaQ#DaQ.3aQ.3aQaPaP#E.m`Zararar.CaraA.Y`d..ar.Y.maPaPaPaPaPaPaP#EaPaPaPayarararararararararararararar.C`Z#C.RaQ.5ar.Cararararararararar.Car.vaQ#E.m#Yarararararararararar", +"ararararararararar#faWaPaPaPaPaP#EaP#EaP.2#Gajarararararararararar.Car.U.maPaPaPaPaP`NaP`7.R#E`N#EaPaP.2#C.m.3aEar.Cararar`8.Y.7aear#I.maPaP.R.HaY.HaY.HaY.H`7`Rar.Cararararararararararararar`Z.m.RaQ.var.Cararararararararararar.w#F`7#t`Sarararararararararar", +"ararararararar.Carag.2aPaPaPaY.HaY.g.HaY`7aNajarararararararararar`Kar.r.maPaPaP.HaY.H.HaW#C#4aP.2aKaK`7aK#j.Uarararararar#f.Y`G..ar#I.m.R#F.sar#L.i`o.ia1.ia1.Carararararararararararararar.C`Z.m#EaQamarararararararararararar.C#j.m#EaQ.6arararararararararar", +"ararararararararar#faWaPaP`7aJaja1.i`o.ia1ajararararararararararararar#a#CaPaP`7aA`K.u`KaI.m.2#EaW`ZaXar.uarararararararar.UaS.7.Far#O.m.RaQ.5ararararararararararararararararararararararar.C`Z.m.RaQ.5ar.Carararararararar`Kar#iaPaP.R`Pa.ar.Carararararararar", +"ararararararar.Carag.2aPaP.Ralarararararararararararararararararar.Car.U#t#E.2`7.4arararar.aaP.e.R#t#l.har.C.Carararar.CaraE.Y`daqar#I.m#EaQ.varaj.C`K.C.C`K.C.C.C`K.C.C`Karararararararararar`Z.m.RaQ`.araj`K.C`K.C`K.Cararar.i#j#C`NaP`N#.arararararararararar", +"ararararararararar#faWaPaP`7aXarararararararararararararararararararar.U.m#EaP`7.pararar.Caray`NaW.R.m.2.larar.Carar`H`Kar#NaZ.7..ar#O#t`7aQ.car.Cararararararararararararararararararararar.C`Z.m#EaQ#7ararararararararar.i#naD#FaP.RaQ.6ararararararararararar", +"ararararararar.Carag.2aPaP`7.4arararararararararararararararararar.Car#n.maP.2`7.4arararar.Car#iaK.m#EaP#F.vararajayasarar.1aZ`d`car#I.m#E.maBa.`h.8.8.8.8.8.8.8.8.8.8av#7ayarararararararar.C`Z.m`7#CaB.N.8.8.8.8`hav#B#Y`U#t.m.R#4#F#Gaaararararararararararar", +"ararararararararar#f#C`N.2`7.parararararararararararararararararararar.U.m#EaP`7.pararararar`Kar`0#G#t#4#EaQ#Yaaar.1#sar.C`.#U.7..ar#I.m#EaP#C.3aQaQaQ#DaQaQ#DaQaQ#DaQ#F``.car.Carararararar`K.j#CaPaP.m.3aQaQ#DaQaQaQ#F.m.2#E`7aP#FaMaAarararararararararararar", +"ararararararar.Carag.maP#C#Ealarararararararararararararararararar.Car.U#taP#C.Ralarararararar.Caral.d#FaPaPaQaM`8ar#iar.C#3#U`d.Far#Y#FaP.2aPaPaPaP#EaPaP#EaP`NaP#EaP.RaQ`har.CarararararararaN#taP.2aPaPaPaP#EaPaPaPaPaP#C#taQ.2.Valararararararararararararar", +"ararararararararar#f`7.H`7aMalarararararararararararararararararararar#n`N.HaYaKalarararararararararaa#j#4aYaKaP`7#n.u#faranao`G.Far#daP#yaYaY.HaY`7`7aY.HaY.HaY.H.gaYaKaWavar.Carararararar.C`W#4.HaY.HaY.HaY.H.gaY.HaY.H.jax.``lararararararararararararararar", +"arararararararararara1.ia1.iararararararararararararararararararararar.C.i`o.i.iarar.Car.Car.C`Kar.CaraL`o.i`Kar.C`3`0.paj.0`G.y#Wa1arararaLaj.iajarar.Ca1.u`o##`oa1.i`o.iajararararararararar.i`oa1.i`o.ia1.i`o.ia1.ia1.iararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararaJ#1at.B`8aj#iaxao.taf#g#n#s.J`3.i`K###x#1`8arararararararararar.Carararararararararararararararararararararararar.Carararararararararararararararar", +"ararararararararararararararararararararararararararar.C.Carararararararararararar.ial#..h.J.a#n#m.8.``C.san#PaM`D`Y#d.j`Z`DaNaDaDaD`Q.EaD#j#Y#d`S`Z.Z`I#7#m#nag#zaXaa.Cararararararararar.Carararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararar.C.Carararararararar.C.uaJ.Aag#ma..v.w#Xa6aN`ZaN#l#laD`Q#2aMaMaiaiaMaMai.g.g.g`7`7#4`N#4`N`7aYai.QaMaM#2aD#jaNaD`Z#8aD#jaB#I#3.vav`LayaA.uararararararar.Carararararararararararararararararararararararararararararar", +"arararararararararararararararararar.C.Carararararaa#i.a..`C#3`S#Y#8#l`QaiaM`k`7`7`k`7ai#4`7#4`7#4#4`7#4.e.e.e.e`e.m`e#A#6#6.m#6#6.m#6#6.m.eah#4`Nah`z#4`7`x#GaM.g.g`Q#l`Q.EaDaB#j`Yan.``Lay.pajarararararar.Cararararararararararararararararararararararararar", +"arararararararararararararar.C.Carararar.CaJaF#R.waBaD`QaMai.g`7#y`N#4#4ah.m#A.m#6#6#6.m#Aahahah`e#AaP#4#4.m.e.m.eah.e.eahah.e.e`e#A.e`e.m.m.mah`7.g`7ah#Aah`7`k`7.eahahah.eah.gai.Q#l#l`Q#jaB#XamaI`8aaararararar.Carararararararararararararararararararararar", +"arararararararararararar.Cararararaaag.8ax`DaK.g`k#y#4ah`zah#A`e#6#6.m.e.e.m#6.m.e.m.m.mahah.eah#A.m`e.eah.e`eahah.e`e.e.m.m.eah.m.m.m.e#A.m#A.eah.g`7ah.e.m.m#4ah#4.e`7#4`7ah#A`7#6`e`zahah.gaM.naT#j#d.vaE`8.uarararararararararararararararararararararararar", +"ararararararararar.CararararaJaE#XaNai`7`7ah`e#A.e#6.e.eaW#4aY#y#4.e.e.eahah.m#A.e.e.e.eah#4#4`7aPah.e.e.e.eah.e`z`7`7#y.m.e.e`e#6.m#6.m.e.e`eah#4`7.g`7.eah.eah#6ah.m`z`kaiaM.gahah.e`N.e`Bakah#Aah.g`QaNaB#O#X#7#s`3ararararararararararararararararararararar", +"ararararararar.CarararaA.8#j`7.m#6ah.g`7.gah.e.e.m.m.m.m#6.m.eahah.mak.k.kaz.k`qak`B#6`P#6#6`P#6`B.k.k#6`Pak#6akak.m#4`7`zahah#A.e.e.e.e.m.e#A.e`zai`7.g.e.e.e.m.e.mah.e#A.g`U.Q`7ah#4.e`e.e.m.mah`7.m.e`U`x#laDaN.j#d`C#s.uarararararararararararararararararar", +"arararar.CarararaaaEa6.e.kak.m#4#4#4`7#4`N.eakazakak#6.m.e`7`D#Y`Y`5an.sam.`#7.`aEaEaEaEaU.8.1.`#7#7.s#S`D`##2#8#j`ZaD#2ai`7#6ah#6`P#6`P.m.m`N#4`N.g.g.g`7ah.e.e.m.e.m.m#6.eaiaMaMai`7`7#Aah.m.e#6ah`z#4ai.gaY`k#4#4aM.d#jaxa.aA.Carar.Carararararararararararar", +"arar.CarararaA.v#lahak#6#6#6.kak.eah.gaTa2ax`5#3..aI.f#zaJ`3`Kararararararararararararararararararar`8aG`J.yabawar.C.i`3`F.M.Tau.M`#.E`x`7.e.e.e.mah#4`k.g`7.m.e.e.m#6.k.mah.e`k.g`7#4.g`7#6#A`Nahah`k`7#y.gai.gai.m#6.m#4`Q`Z`Yam.A.Cararararararararararararar", +"ararararag`Y.kaz.Gah`7`k`Z`Yan.8.U.JaA.u`Karararararararararararararar.Car.Car.Car.C.Car.Car.Car.Car#7ao`T.7ap.pararararaEaSap.y.y`n`nap.yaC`R.lam#X#8`7#4ahak.mah.e.e.m#A.e.e.eah#4`7.g.g`N.e#4#4#A.g.g.g`7#4.g`7#4#6.m#6.m#Aai`Z`Y`CaAarararararararararararar", +"araj.U#j.e.g`tan.N#x`8alarararararararararararar.Car.Carararararararararararararararararararararar`0.0.7`T.7`rajarar.Carav#u.ya#.7.7.7`T.7#5arararar.u`5auau#2ah.m.kakahahah.e`e.e.e`7.g.g#y`7#6.e.eahaiai.g`7.gahah.m.mah.e.m#6.eaM#jax`Lajarararararararararar", +"###mam#naJ`Kararararararararar.Car.CarararararararararararararararararararararararararararararararaFaZ`n`T.7aqararararar.8aS.y.7`T`T`T`T.7.Dar.C.Carar.vaZab.y`d`4.v`Q`Bakah.e.e#6.mah#y`k.gai`7.m`e.e.gai.g.gai#4ah#4.mah.e.m#6`e#6ahaD`Y.v`3ar.Cararararararar", +"`K.Carararararar.Carararararararararararararararararararararararararararararararararararararararar`Cao`T.W`G#kararararar.8aS.W`T`T.W#H`T`d#xararararara.au`T.7`T`X.C.i.f#X`7.m.e.mah.e`7`k`7.g.g`7.m.e`7`xaK.g`U`Qai#4#Aah.e.m#6.e.e#6`Bai#Y.waaarararararararar", +"ararar.Cararararararararararararararararararararararararararararararararararararararararararararal#X.7`T`T`G#1ar.Cararar.`af`n.7`T`T`T`T`G`wararar.Car.U`p`n.7`T`T#5ararara`.s`z.m#4`Nah.g.g.gai`7ah#6#4`7`k.g.gai`xaY#4#4.e#6.m.m#6#6.e`Pai#Y.v.iararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararar#faS`T`T`T.7`Aararararar`CaZ`T`T`T.7`T`T`G`war.Cararar#fau.W.7`T`daCar.Cararar`8aT#6.g`7#y.g.gaiai.g.e.m`z`7`7.g.g.g.g.g`k.e.m.e`B#6ah.m.e.m.E`SaIararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararar`F#U.W.7`T.Wawararararar.vaZ.W`T`T.7.7`T.7aCararar.CaraA.P`T`T`T`Tad.Cararararar#L`Y.m`7`kai`k.g.gai.g#4#4`N#4#4.e.g.gai.g.gah#6#6.m`e#A.m`e.m`Z`y#Larararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararaj#3`G.y`T`Tap`Harararar.C.s#U.y`T#H.W`T.y.7aCararararar.p`Sa#.y`T`Tapalarararar.Car.i#S#A`7.g.gai.gaiai#y`k#4.e`7.eah.g.g.g`7`7.e`P#6.m.e#6.m.mai#d#`arararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararaJac.y`n#H`Tab.uarar.Caraj#3aoap.y`T.y`Ta0`daCararararara1#X#o.y`T.W`T#cararararar.CaraF.m.eah`7`7.g.gai.g.g`7.g#4`k#4`7`7.g`k.g#4.m#6#6`e.m#6#6#4#jayarararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararag.K.y#H.W`Ta7ajararararaj`y#U.y`T`T#H.y`T.7#kararararar.C.wao`n#H.y`T#aararararararar##`U#6.m#y`7.e`k.g.g.g`7`7`7#y`7.g.g.g.g`7`7#4#6#6#6#A.e`P`7.ZaAar.Carararar", +"ararararararararararararararararararararararararararararararararararararararararararararararar#KaZap.y`T.7#Zararararar.i`i.7ap.W.W`T`T.y`T#0ararararar.C.vaZ.y`T`T`TaearararararararajaD`z.eah`7#4.m.g`k.g`k#y`7`7`7ai`xai`k`7`7`7#4.m#6.m.eah`x#d`Karararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar.C.vaoap`T.W`T`6ararararar.i.w`Gapa0`T.ya0.y`T#0arararararar.8.K.y.Wa0.Wa4.iarararar.Car`E.g`7.g#4ah`7ah#A`7`7#y.g.g`7`7#yaiai#y#4`7#4.g`7.m#6.m`7ai#nararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar.u.w.7.W#H`T.7#0ararararar.u#v.#`Gao`Gaoao`d`m`6arararararara.#w.y`T.y`Tap.parararar`Kar.8ak`N.g.g#4`z#4ah#4#4`7ah.gai.g.g.gaY`7`N#4.e.eah#4.m.e#6.varararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar`0ac`n.W`n`T.7#xaraj.C.Car.C.f`Mas.Dasas`Mas`M#`arar.CarararaIau.y`T`n#H.y#zararar.CaraJ.gah#Aah`7`7.g`7`7`z`7`7#4ah`7`7.gaiai#y#4#6.mahah#4.mak#3ararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararay.Y`T#H.W#Ha#`war.C.C`K.iajarararar`Karararar`K.CarararararaF`I.y`T.7.y`Tasar.Carar.u`Z.e`7.g#4`7`7#y`k.gah#4ah#4.e#A`7.g.g.gai#4.e`e#6#A.m#4aqarararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar#naS.y`n`T.y`dasar.p.6aD`7aY`7aY`7aY.HaYaY`7.H`7.n.w#Jar.Caragauap.W`T.y.7aCar.Car.i#Yah`z.e#4`k#y#4`7.g`7.g`k.e`Nahah`e#4`k#y`7.g`7#A`q.k#Vawararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar#maZ.y.y.ya0`T`Aar#X#h.2#C.2#C#C.2.m#C.m#C#C.m.2#C#D#Yararar#f#Y.y#H`T.y.7`vararal.Z.k`7`7ahah#4`7#4`7.g.g`k#y`7#4#4ah.e#6ah`kaiah.m.m.Z.fararar.Cararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar.`aZap`T.y`T.y#`araM#C`N#4aY#y`7`7`7`7.H`7.H`7#E#4aP.R`3arar.A#w.y`T.y`TaG#Zar#zaMaz.m.m`z`N.e.e#6ah.gai.g.g`7.g`7`7#4#A#6#6.Gak.g#Xat.Carararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararar.vaoap`T`T.Wa0a``K#yaP.m`W.iarararararar.Car#LaN.maP.RaAarar#i`Y`T`T`T#H.W`X.8`7.m.m#A#6.m.m.e.m#6`e.e`7`7`7.gaiai.gahak.kah`Wa.alararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararaj#3#Uap.y`T#H.ya`aL`7#E.m`Sar.a`Masasas`M#1.J.C.j#CaP`N#iararaJ.Y`n`T.W`T.ya0`z#4`N.e.m.eah.m.m.e.e.e#4#4`7#4ah`z`z`kaN`5`2`0arararar.Cararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararar.i`5`d.y`T`T`Tapa`.C`7aQ.G#Y.C#vafao`Gaf.#a7ar.Aai.2aP.R`farar.pax.7.y`T`T.y.yai#6#4ah.m.eah.e.e.makak`P`B#4ai`Z.waE`lajararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararar.C.C`Kar.u#X`G.y.7`T`T`J`0aral`2ax`iar`yaG.y.x.zalar.`aW.e.R#F`QaLay`L#3.E`T`T.y`T#H`O`xaWah`z.m.k#6`B`P#A`N#8#Xavaga``Kararararar.Cararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararar.C.Cararararararar.i`5.7`n#H.W.y#g.zam.aajarar.4`Yao`Tagarat#MaQ`N.R`P#4#iaA.EaM`N#4ap.W`T#H.W`O.g.m`z`7#8aB.0#7`j.Aal.Carararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararar.C.Cararararararaj.p.A.aa..`.waT`T.W#H.y`Tap#V#M`QaN#Y`5#Mah#Z`H.i`5#taW`7#CaQ#I`0aja6.m#4#6#4ap`T.W`n`naba.`M`8`0ajararararararararar.Cararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararar.Carararararar###i#n.8an#YaN#l`Q.gaM.g.e.y`T`T.W`Tab#2aQ.m.mah#4#2`aar.U`7aQ`7aPaQ.n#narajaF.U.a`aag#v.W`T`T.W`T`J`Harararararar.Carararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararar.C.Cararararar`0#sav.waBaDaMai#y`7`7#4#4`N`Nah.e`T`T.y#H`Tapa2#Y.`#a`RaXar#.aBaQaP.R#FaP#Rajar.C.Cararararaaac.7`T#H`T#Hab.par.Cararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararar.Carararar`0aF#7#d#laKaKaMai`7`7ah.e.m.e.m.eahah#6.e.W.y#H.y`Tap#`arararar.C.`.2.m.R.m.m.Vaaar`6`Mararar.C.Car.p#d`T`T.y`T.Wapalararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararaj.Aav#XaD.H`7#4`7#4ah#4.e.e`z`Nah.e`N.m.e#4`zak.e`n.y`T`n`T`Ja`ar.Car#faDaQaPaPaQaN`1.C#x`T#b`A#i.Uajararar.paR`T.y`T.y`nabaaararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararar.i.J#7a6aM#4`7#4ah#A.m.m.m.e.e`e#4`N#4ah.e.e`N.e#6#2amax`da0.W.y#H.y#`araa.w.m.m.R.maK.o.Car#.#kas#1.i.`#haK#d.uaraJ`s`T.Wa0`T`T`Xajararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararar.pav#jaKai#4`N.e.e.e.e.m.e.e#6.m.e.mah#4`7#4#4ah`B.m.valar.saZap`Ta0`Tap.u.p#GaQ#E#E.2.V#Jaraj.uajarar`Kar#7`PaPaPalaraA#v.Wa0.W.y.7aO.Cararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararar#.`CaD.gaiai.Q#4ah.e.m`e.m.m.m.e.e.m.m.e.m`z#4ah.gah#8`8ararar.v#U`J`T`T.7.Oar#daQ.RaPaPaPaM`U`7aY.HaY`7`7`7.H`7aPaP`7.uar#i.Y.y`Ta0`T`T#Z.Cararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararar.iavaKaW#4.g`7#4.gai`7#4#6.e.e.m#Aahah.e.m.e`eah#4`7.g`i.uar.Carar.1aSap`T`T.7`raa`UaP`7#E#4#EaP.2aPaPaPaP#EaP#EaP`N.R#t.n.Caray`I.y`T.W`T.7#0arararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararaAaB#Aak.m.m#6ah.e`k`7.g`7ahah.e.m`e#6ah.e.eah#4.e`7#2.wajararararar#m.Map`T.W.7`raa.eazaQ.3aQ.3aQaQaQaQaQaQaQaQaQaQ.3`Pah#narar#fau.y#H`T.y.7aCarararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararar.J`7`z.g`z.e.e.m#6`z#4`7#y.g.g`7#4.m.e#6.mah`e.m#A#4`QaBalar.Carar.Car#n`I.y`T`T.7`r.i.N.`.8`h`h`h.8`hav.8av.8.8.8.8av.`#K`0arararag.P.y`T.y`T.7.Jarararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararar#i`7#t.g`7.g`7.eah.m`N.e.e`7`k.g`7`7.e#6#6#6.e#6.m#6ahaT..arararararararayaua0.W`T`T.y#`ararararararararararararararararararararararaFaS.y`T`T#H.y#`arararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararajaD.G`N.e#4.g.g.eah.eah#4.eah`7#y`7.g#4ah#6`P.eah#A.m`7`Z.Jararararararar#J.Y.7`n.y#H.7aear.C.C`Kar.u.w.7#g`Jap.y.y#g.W#kar.CararararaE`V.y#H.W.7apalarararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararar.a.k.mah#Aah`7`7.g#4#4#4#4`7#y.g`k.g`kah#4ah.m.m`z`e#6#4#V#fararararararar.uax#oap`T`T`T`6ararararar.i`5#U.y`T.7#H`T`T`G#karararararara.#uap`T`n`n.O.iarararararararararararararararararararararararararararararararararararararararararararar", +"ararararararar.Car.8az.m.eah.m#4`k`7`7#4`7`7#4`kai.g.g.g`7.g#4ah.m.m`z.e#4a2aEarararararararar#BaSap`T`T`T#p.Cararararaj`y#o.y#H`n.W.y.y.7aCarararararar.8aZ.y`T.y.7aeararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararaE.e.m#6ahah.m#A#4`7.g#4`7#4`7`xaMai`7.g`7.g`7`z.m`e#4`N`Z.w#.ar.Cararararar...Map.7`T.7#Wajarararar.C#3aZap.7.7.7aG`T#oaCararararar.C.v#U`T.7`T`GaCararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararaJ`7.g.e#6.m.m.k`z`e`7.g#2.g`7.gaiai`7`7`7#4`7`k.e.m.e.e.g#v.v.uarar.Cararar.a#V.W.7.7`Tapaaarar.Car.C.safa0.7.7`T`T`T`daCarararararaj.w.xa0.7`T`T#cararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararar.Caram#6`7ah.e`z.e#4.e#4.e`k.gai.gai.g#y#4#4#4#4#yah.mah.e`e`Q#d#3.hararar`KaraJ#Ya#`T.7.7.y.parararararam#u.y.7`T.7.7.W`G#aararar.Car.u.0a#.7.7`T.yalararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararaj#Y`P`7#y`7`7ah`N`7.e.m`7.g`U`x`U.g#4`N.eah#4.g#4ah#4#4ahaM`W`s...4ararar.i`5#u.ya#.7`T#`ararararar#7aS`n.7`T.7`T`Tao`wararararar.paR`T.7.7.7`Xarararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararar.u#Y.m.g.g`k.g#4ahah#6ah.gai`x.gai#4`z.e#6ak`7.g.eah.g`7`7`7`Z`Y.0#maJarara.au`T.7.7.7`Aar.Cararar.`#u`n.7`T.7`T.7a#`war.Cararar#i.P.7`T`T`G#karararararararararararararararararararararararararararararararararararararararararar.C.Carar", +"arararararararararararar.C.w`N`7.g`7.g#4`z`zah.e#4.gai.gaiah.m.m#6.e`k.g#A`N.g#y`7#4`Q`ZaB#d.vaF`2a2.y.y`T`G#xar.Cararar.8aS.W.7.7aG.7.7`Gasararar.Carag.Y.y`T.7.7`8ararararararararararararararararararararararararararararararararararar.C.C.Cararararararar.C", +"arararararararararararar.CaraF`D#4`7ai#4`7#4ah#4.e`7`7ai`7.g.e.m#6#6.e.g`7ahah.e#4.g.g#yaMaD`Z#j.Y#Y.Kac`G`G#kararararar.8aS`T.7`T`T`T`T`T`Aararararar.U#w.y`T.7ap.uararararararararararararararararararararararararararar.C.Carararararararararararaa`0ay#m#Bav", +"ararararararararararararararar`H`h`D#4`k#2ai`7.e.m.mah`7.g`kah.e`P.m.m.e.eah#A`N.m`7ai.gaY`7.g`Q#l`Z#PaB#Y#Y.0.U`8.pajar#m.T.y`T.7.7`T.7`T.Aar.C`K.Cara.aS.y.7`G`6arararararararararar.Car.Car.Car.C.C.Car.Carararararararararararar.CaaaA.AaIa..s#X`Zai.Q`SaFaj", +"arararararararararararararar.Cararaaa.`Z#y#4`7.m#A.m`z.eah#y`7ah#A#6ahah.m.eah.e`zah#4#y`7.gai.g`7`7#4`7ai#l.d`D#Y`Y#Xam`5.Mac#U`G.7.7.7.y`Eararararar#7ao.y`T.7`Aarararararararararararararararararararararararar.ial#.`8aF.U.8#7#3#Y#jaD#l`U.g`7.e.e#YaF.Carar", +"ararararararararararararararararararar.iaF.t#2ah.m.k`N`7#y.e`7#y.e.m.eah.e.m#A`e.e`7.g`k.g`7.gaiaiai.gah.m.e#4`k`7.Q.n#laDaN`Z#jaNa2a2#V#Yam.F#m#n#f#f`5aZ#o`G#Haw#L.u.u.iaj.u##.uaaal#JaJ#``8`8ayag.U#Na..`.v`y.w`baNaNaD#M`QaMaiaMaY#4`7ah#A.k#4.V.J.Carar.Car", +"ararararararararararararararararararararararaA.8`Z.e#6`7.gah#4`7`7#6.e#4.e.e`e`B.m#4#4`k.g`7#y.g`7.gai.g#4ah#4#4.e.eah`z.mahah`7.g`7.gaM#l`QaM#l.daN`Z#j#j#j.ja2#j#Y`Y`Y#O#Y#Y`Y`t#j#j`Z`Z.SaD.SaD#l`QaM`U#2`Q`UaMaMaMai#4`7.g.e#6.m`7akaz.m`Z.8`fararararararar", +"arararararararararararararararararararar.Carararaj.J#3#8ah.m.e.e.gah#4`7ah.mah.e`e.m.e.e`7.g.g`7.e.m#y`k.g#4ah`7`N`z.eah`zah`B#6#A.m.m.m.m.e.e#4.g.g.gai`7.gaMaM#2.g.Qaiai.g.gaiaK.g`7.g#4#4#4ahahahah`7#y`7#4.e.m#4`7`7`N.e#4`e.m.k.e#8.v`A`Kararar.Cararararar", +"ararararararararararararararararararararararar.Cararar.i.Jam`W.g`e#A`e#4`7.e.mah#A.m.e#A#4`7.g`7.m.eah#4`N`7`zah#4#4`7ah#4#4.e.mah.e.e.e.e.m.mahah`7`z.m`e.m`N.m.eah.eah`zaPahah`z#6.m.e#6#6.m`e#6#6.m.e#4`7ah.e.mah#4.e.e`P#6#ya2.`#fajararar.Carararararararar", +"arararararararararararararararararararararararararararararar.CaAaEan#8.e.e#6.kakah`z`N`N`7.g.g.g#4.e.e`N`zah#4ah#4`7.g.g`Nahah.eah.e.m.eahahah`z#4#4`7#4ah.eah`z.e#4.mah`7`7#y#4ahahahah.e#6#6.eahah`z#4`7`7#yah.mak.k.m#2.0aUaA.Carararar.Carararararararararar", +"arararararararararararararararararararararararararararar.Carararararaj`l#Tana2.g.e.m.m#Aah.g`kai.g`N`z.e.e.m.e.e.e#4`k.g`7#4`zah.e.e`e#6.e`z#4.e`7`7#4`7`z.m.e.m.m.m.e.m.e#4`7`7#4#4.m.e.e`eah#6.eah`B`Pah.e#4.g`Z#XaU.Aajararararar.Cararararararararararararar", +"arararararararararararararararararararararararararararararararar.Cararararararal.J.o.s.Y#8ai.gahah#Aak#6.m.e#6`e.mah#4aiai.g`7`7ah.m#A.e.m.m#4.e#4`7`7`7`7`z#Aah.e.e`e.e.e.m#4`k`7`z.e.eaz.k.k#6`P.eaia2#vamaga``Kararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararar.Carararararararaj`f`A#na.an`Y#Sai#6`e#6.m.kak`B#6#4.m.eah#A.m`e.eakahahah#4#4ahah.eakak.k`q#haz.G#6.m#4#y`Q.d`Y#Xanav.UagaAaa.Carararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararar.Cararararararararararar`f#d.TaZ#g.N#7#3`5aT`xaiai#2.g#y#2aD.E#laT`Q`7#4.E#Y#V#Y#v.0#3.`...fasayaA##ajararararararararararar.Cararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararar.CarararararaE.M.y`6ararar.u#X.7.y.W`T`T`G#Z.i.u.u.i.N#U.W.Jararararararararararararararararar.Car.Cararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararar.Car.4#YaZapalarar.u`5`m`T.7`T`T.7aearararar.vao`Xajararararar.Car.Cararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararar#K`Z.W#zararajan`m.W`T`T`T.7`vararar.p#X.x.Jarararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararar.C`K.C`K.C`K.C`K.C`K.C`K.C`K.C.Carararararararararar.C`K.C`K.C`K.C`K.Car#.#v#U`warajar#Bafa0.7`T.7`m`varajar.AaS`X`o.C`K.C`K.C`K.C`K.Cararararararar.C`K.Carararararararararararar.C`K.C`Kararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar##.saS.y.7.7.7#0ajararararararararararararararararararararararararararar.Cararararararararararararararararararararararararararararararar", +"ararararararararararararararararar`0...8.8.8.8.8.8.8.8.8.8.8.8av.`aEaaararararararararaaav`h.8.8.8.8.8.8.8.8.8avav.8`h#far`0ac`T`T`G.yarag#7av.8avavav.8av.8av.8av.8av.`#nararararararaaav.`aIarararararararararararar#n.`.`.Uararararararararararararararararar", +"arararararararararararararararar#naW`B#D#F`P#F`P#F`P#F`P#F`PaQ#F.3`PaMaJararararararar#iaQ.3aQaQ#F#F`P#F#F`PaQ#FaQaQ.3.m#Qar.lao.W.7`nar#XaHaQaQ#Daz#D#D#Da3#D#D#D#D.3aH`Zarararar.Car#iaQ.3aQax`oar.Carararararararar#Y#haz`Zararararararararararararararararar", +"arararararararararararararararar.S#F`7aP#FaQaQaQaQaQaQaQaQ#F`B#F.R`7#D.sar.CarararararaA`7#E#EaPaQaQaQaQaQ#FaQ#taQaP`7aP#t.A.4.7`T.7.War#3#F`7#E.HaKaKaKaKaKaKaKaiaKaK`7.VararararararaA`7`N.R`P#M`8ar.Cararararararar#X#C.2`Sararararararararararararararararar", +"ararararararararararararararar`o.gaP#C#l.8.8.8.8.8.8.8.8.8`hav.5`NaP.m#dararararar.CaraAaPaP.eaD.8`h.8.8.8.8.8`h.8#G#C#E#6aEaj`T.7aG.yar.6#taP#E.A`K##.i.i.i.i.i.i.ia1.i.iarararar.CaraA`zaPaP.RaWaPaIararararararararax.m#C#Yararararararararararararararararar", +"ararararararararararararararar.iaYaP#t`Sarararararararararararaa`7aP#C#YarararararararaA`z#E#t.Vararararararararar#7.3`7`P#m`Ka0.7.7a0ar.6`P`z#E`EararararararararararararararararararaAaPaPaP.m.RaP`P#3.iar.Cararararax#t.m#Iararararararararararararararararar", +"ararararararararararararararar.i.HaP.m#Yar.C`K.C.C`K.C.C.C`Kar.p`7aP#t#IarararararararaAaP`N#taxarararararar.i.par.8aQ`7aQaE.C#H.7.7.yar`y#F#E`z.A`Ka1.i.i`o.iajarararararararararararaA.R.2#E#jaW.2.RaQ.d`0arararararax#C.m#Iararararararararararararararararar", +"ararararararararararararararar.iaYaP.m#Iarararararararararararal`7aP.m#Iararararar.CaraA`zaP.m`Saj.ia1.i.i`o.iaj.C#X`P.RaQ#maL`T.7.7apar.6aQ.RaPaY.HaY.gaYaKaW.Nar.Cararararararar.Car#i#EaPaWay#naWaW`7.m.HaFar.C.Cara5#t#C#Yararararararararararararararararar", +"ararararararararararararararar.iaYaP#t#Iararararararararararar.4.RaP#C#YarararararararaA.RaPaP`zaY.HaY.gaY.HaY.gaY.2aP`7#F`j.i.7`Ta#.yar.6`P`NaP#C.m#C.m#C.2az.`ar.CarararararararararaA#4aP.e.aar`8aM#F.RaW.m#7.Cararax.m.m#Iararararararararararararararararar", +"ararararararararararararararar.iaYaP.m#Iarararararararararararal`7aP#t#Iararararararar#iaPaPaPaP#C.m#C#C.m#C.m#C.m.2aPaQ`7aj`1aZ.y`G#gar`yaQ.RaP`7.H.HaY.HaKaW`Far.Cararararararararar#i#EaP#Cagararaa#I`P.R#EaQ#Y`3arax#t#C#Iararararararararararararararararar", +"ararararararararararararararar.iaYaP#t#Iarararararararararararal.RaP.m#Iararararar.CaraA.RaPaPaP.HaY.H.H`7.H.HaY.HaY`7`S`8ar`C.T.y`G.yar.6#t`NaP.A`K#L.i`o.ia1`Kararararararararar.CaraA#4aP.eagar.Carar.8#taW`7aQaM.A`5#t.m#Iararararararararararararararararar", +"ararararararararararararararar.iaYaP.m#Yar`K.C`K.C`K.C`K.C`KaraX`7aP.m#IarararararararaAaPaP.m`SaL#L.ia1.ia1.ia1.ia1.iaraa.i.caS.y.7#gar.6`PaP.RaAar.Carar.Car.C.C`K.C`K.CararararararaAaPaP#Cagarar.Carar#n`7#C`7#CaPaKaP.m#Iararararararararararararararararar", +"ararararararararararararararar.i.HaP#t`Sarararararararararararaa`7aP#C#Yararararararar#i.RaP#taxararararararararararar.4aAar.8aS`n`dapar`y#F#4#EaJararararararararararararararararararaA.RaP.2agar.Carar`Kar`0aDaQ.RaP.2#E#t`Yararararararararararararararararar", +"ararararararararararararararar`o`7aP#C#l.8.8.8.8.8.8.8.8.8`hav.5.RaP#t`Sararararar.CaraAaP`N.m#dararararararararararararararaEau.y#o`Oar.6#F`NaP.sav.8`h.8.8.8.8.8.8.8`h`F`Kararar.Car#i#EaPaWagar.Cararar.Car.i`5aQ#EaP`N#t#Iararararararararararararararararar", +"ararararararararararararararar.CaD#t`7aP#F#F`P#F#F`P#F#F`PaQ#t#F`N`7#D.sararararararar.B`7.R#Caxarararararararararararar.CaraFau.y`Gabar#3.m.R.R.maQ#FaQ#F#F`P#F`P#F#FaQ.e`oararararar`E`7.RaPagararararararararara.#taW`7#C#Oararararararararararararararararar", +"arararararararararararararar.Car.U#C#F.3aQaQaQaQaQaQaQaQ#taQ#F`BaQaQaK.Bararararararar#iaQaQ.b#Yarararararararararararararar#fau.7aGabar#XaHaQaQaQ#FaQ#taQ`BaQaQaQ`B#F.3.ea1ararararar#iaQ.3a3#sar.Carararararar.CarayaM.3.b.jararararararararararararararararar", +"arararararararararararararararararaA..`h.8.8.8`h.8.8.8`h.8`h.8`h.`aEaaarararararararar`H`h.8.`.UararararararararararararararaJ`Y.7.7apajag.c.8`h.8`h.8`h.8`h.8.8`h.8`h`hav`Karararararaa`h.8`h`0ararararararararar`Kar.p.8.`.Uararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararal#v.7`Tab#f`Kararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararar.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.Carararararararararar.C.C.Cararararararararararararararar.i`5#e.7aqaj.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.Cararararararar.C.C.Carararararararararararar.C.C.C.Cararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.C#BaS`T`vararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararav.T`T`wararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararaI.M.7.Jararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.Carag#V.y`Eararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararaA`t`Talararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar`H#d.yajararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar.i.saO.Cararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar", +"ararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar`KaE#1arararararararararararararararararararararararararararararararararararararararararararararararararararararararararararararar" +}; diff --git a/code/wxfred2/res/bitmap1.xpm b/code/wxfred2/res/bitmap1.xpm new file mode 100644 index 0000000000..6cf78d75f5 --- /dev/null +++ b/code/wxfred2/res/bitmap1.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *bitmap1_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmggggmmggggm", +"mmmmggmmggmgmmgg", +"mmmmgmmmmgmgmmmg", +"mmmmgmmmmgmgmmmg", +"mmmmgmmmmgmgmmgg", +"mmmmggmmggmggggm", +"mmmmmggggmmgmmmm", +"mmmmmmmmmmmgmmmm", +"mmmmmmmmmmmgmmmm", +"mmmmmmmmmmmgmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm" +}; diff --git a/code/wxfred2/res/black_do.xpm b/code/wxfred2/res/black_do.xpm new file mode 100644 index 0000000000..8bee1137e1 --- /dev/null +++ b/code/wxfred2/res/black_do.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *black_do_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmm````mmmm", +"mmmmmmm``m```mmm", +"mmmmmmm`m````mmm", +"mmmmmmm``````mmm", +"mmmmmmm``````mmm", +"mmmmmmmm````mmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm" +}; diff --git a/code/wxfred2/res/bmp00001.xpm b/code/wxfred2/res/bmp00001.xpm new file mode 100644 index 0000000000..2c804978f1 --- /dev/null +++ b/code/wxfred2/res/bmp00001.xpm @@ -0,0 +1,34 @@ +/* XPM */ +static char *bmp00001_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 7 11 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"eeeeeee", +"e`eeeee", +"e``eeee", +"e```eee", +"e````ee", +"e`````e", +"e````ee", +"e```eee", +"e``eeee", +"e`eeeee", +"eeeeeee" +}; diff --git a/code/wxfred2/res/chained.xpm b/code/wxfred2/res/chained.xpm new file mode 100644 index 0000000000..125d6507a5 --- /dev/null +++ b/code/wxfred2/res/chained.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *chained_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"kkkkkkkkk``kkkkk", +"kkkkkkkkk``kkkkk", +"kkkkkkkkk``kkkkk", +"kkkkkkk``````kkk", +"kkkkkk``f``f``kk", +"kkkkkk``k``k``kk", +"kkkkkk``kffk``kk", +"kkkkkk``kkkk``kk", +"kkkkkk``kkkk``kk", +"kkkkkk``kffk``kk", +"kkkkkk``k``k``kk", +"kkkkkk``f``f``kk", +"kkkkkkk``````kkk", +"kkkkkkkkk``kkkkk", +"kkkkkkkkk``kkkkk", +"kkkkkkkkk``kkkkk" +}; diff --git a/code/wxfred2/res/chained_directive.xpm b/code/wxfred2/res/chained_directive.xpm new file mode 100644 index 0000000000..7d1b3823a1 --- /dev/null +++ b/code/wxfred2/res/chained_directive.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *chained_directive_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"mmmmmmmmmggmmmmm", +"mmmmmmmmmggmmmmm", +"mmmmmmmmmggmmmmm", +"mmmmmmmggggggmmm", +"mmmmmmggggggggmm", +"mmmmmmggmggmggmm", +"mmmmmmggmggmggmm", +"mmmmmmggmmmmggmm", +"mmmmmmggmmmmggmm", +"mmmmmmggmggmggmm", +"mmmmmmggmggmggmm", +"mmmmmmggggggggmm", +"mmmmmmmggggggmmm", +"mmmmmmmmmggmmmmm", +"mmmmmmmmmggmmmmm", +"mmmmmmmmmggmmmmm" +}; diff --git a/code/wxfred2/res/data.xpm b/code/wxfred2/res/data.xpm new file mode 100644 index 0000000000..acfadb2774 --- /dev/null +++ b/code/wxfred2/res/data.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"kkkkkkkkkkkkkkkk", +"kkkkfffffffffkkk", +"kkkkfmmmmmmmefkk", +"kkkkfmmmmmmmemfk", +"kkkkfmm```mm````", +"kkkkfmmmmmmmmme`", +"kkkkfmm``m``mme`", +"kkkkfmmmmmmmmme`", +"kkkkfmm```m`mme`", +"kkkkfmmmmmmmmme`", +"kkkkfmm`m```mme`", +"kkkkfmmmmmmmmme`", +"kkkkfmmmmmmmmme`", +"kkkkfeeeeeeeeee`", +"kkkk````````````", +"kkkkkkkkkkkkkkkk" +}; diff --git a/code/wxfred2/res/data00.xpm b/code/wxfred2/res/data00.xpm new file mode 100644 index 0000000000..51db73ad1e --- /dev/null +++ b/code/wxfred2/res/data00.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data00_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....acccc##cccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....accc#cc#ccb`", +"....acccc##cccb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data05.xpm b/code/wxfred2/res/data05.xpm new file mode 100644 index 0000000000..6df19cef7d --- /dev/null +++ b/code/wxfred2/res/data05.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data05_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....accc####ccb`", +"....accc#cccccb`", +"....accc#cccccb`", +"....accc###cccb`", +"....accc#cc#ccb`", +"....acccccc#ccb`", +"....acccccc#ccb`", +"....accc#cc#ccb`", +"....acccc##cccb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data10.xpm b/code/wxfred2/res/data10.xpm new file mode 100644 index 0000000000..23368e4259 --- /dev/null +++ b/code/wxfred2/res/data10.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data10_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....acc#ccc##cb`", +"....ac##cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....ac###cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data15.xpm b/code/wxfred2/res/data15.xpm new file mode 100644 index 0000000000..f3156c67b7 --- /dev/null +++ b/code/wxfred2/res/data15.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data15_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....acc#cc####b`", +"....ac##cc#cccb`", +"....acc#cc#cccb`", +"....acc#cc###cb`", +"....acc#cc#cc#b`", +"....acc#ccccc#b`", +"....acc#ccccc#b`", +"....acc#cc#cc#b`", +"....ac###cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data20.xpm b/code/wxfred2/res/data20.xpm new file mode 100644 index 0000000000..d86f205d60 --- /dev/null +++ b/code/wxfred2/res/data20.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data20_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##ccc##cb`", +"....a#cc#c#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....acc#cc#cc#b`", +"....ac#ccc#cc#b`", +"....a#cccc#cc#b`", +"....a#cc#c#cc#b`", +"....a####cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data25.xpm b/code/wxfred2/res/data25.xpm new file mode 100644 index 0000000000..ef370f57c4 --- /dev/null +++ b/code/wxfred2/res/data25.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data25_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##cc####b`", +"....a#cc#c#cccb`", +"....accc#c#cccb`", +"....accc#c###cb`", +"....acc#cc#cc#b`", +"....ac#cccccc#b`", +"....a#ccccccc#b`", +"....a#cc#c#cc#b`", +"....a####cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data30.xpm b/code/wxfred2/res/data30.xpm new file mode 100644 index 0000000000..6f38b2bedc --- /dev/null +++ b/code/wxfred2/res/data30.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data30_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##ccc##cb`", +"....a#cc#c#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....ac##cc#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data35.xpm b/code/wxfred2/res/data35.xpm new file mode 100644 index 0000000000..2e579bd3ef --- /dev/null +++ b/code/wxfred2/res/data35.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data35_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##cc####b`", +"....a#cc#c#cccb`", +"....accc#c#cccb`", +"....accc#c###cb`", +"....ac##cc#cc#b`", +"....accc#cccc#b`", +"....accc#cccc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data40.xpm b/code/wxfred2/res/data40.xpm new file mode 100644 index 0000000000..49980c1a9c --- /dev/null +++ b/code/wxfred2/res/data40.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data40_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....accc#cc##cb`", +"....acc##c#cc#b`", +"....acc##c#cc#b`", +"....ac#c#c#cc#b`", +"....ac#c#c#cc#b`", +"....a#cc#c#cc#b`", +"....a####c#cc#b`", +"....accc#c#cc#b`", +"....accc#cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data45.xpm b/code/wxfred2/res/data45.xpm new file mode 100644 index 0000000000..c0823f2159 --- /dev/null +++ b/code/wxfred2/res/data45.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data45_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....accc#c####b`", +"....acc##c#cccb`", +"....acc##c#cccb`", +"....ac#c#c###cb`", +"....ac#c#c#cc#b`", +"....a#cc#cccc#b`", +"....a####cccc#b`", +"....accc#c#cc#b`", +"....accc#cc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data50.xpm b/code/wxfred2/res/data50.xpm new file mode 100644 index 0000000000..f043ac10e0 --- /dev/null +++ b/code/wxfred2/res/data50.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data50_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....a####cc##cb`", +"....a#cccc#cc#b`", +"....a#cccc#cc#b`", +"....a###cc#cc#b`", +"....a#cc#c#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data55.xpm b/code/wxfred2/res/data55.xpm new file mode 100644 index 0000000000..6697418db7 --- /dev/null +++ b/code/wxfred2/res/data55.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data55_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....a####c####b`", +"....a#cccc#cccb`", +"....a#cccc#cccb`", +"....a###cc###cb`", +"....a#cc#c#cc#b`", +"....accc#cccc#b`", +"....accc#cccc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data60.xpm b/code/wxfred2/res/data60.xpm new file mode 100644 index 0000000000..4a54d56894 --- /dev/null +++ b/code/wxfred2/res/data60.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data60_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##ccc##cb`", +"....a#cc#c#cc#b`", +"....a#cccc#cc#b`", +"....a#cccc#cc#b`", +"....a###cc#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data65.xpm b/code/wxfred2/res/data65.xpm new file mode 100644 index 0000000000..e89db7d164 --- /dev/null +++ b/code/wxfred2/res/data65.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data65_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##cc####b`", +"....a#cc#c#cccb`", +"....a#cccc#cccb`", +"....a#cccc###cb`", +"....a###cc#cc#b`", +"....a#cc#cccc#b`", +"....a#cc#cccc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data70.xpm b/code/wxfred2/res/data70.xpm new file mode 100644 index 0000000000..11669bbc6b --- /dev/null +++ b/code/wxfred2/res/data70.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data70_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....a####cc##cb`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....acc#cc#cc#b`", +"....ac#ccc#cc#b`", +"....ac#ccc#cc#b`", +"....ac#cccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data75.xpm b/code/wxfred2/res/data75.xpm new file mode 100644 index 0000000000..c4fc29df4b --- /dev/null +++ b/code/wxfred2/res/data75.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data75_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....a####c####b`", +"....a#cc#c#cccb`", +"....a#cc#c#cccb`", +"....acc#cc###cb`", +"....acc#cc#cc#b`", +"....acc#ccccc#b`", +"....ac#cccccc#b`", +"....ac#ccc#cc#b`", +"....ac#cccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data80.xpm b/code/wxfred2/res/data80.xpm new file mode 100644 index 0000000000..21b352350a --- /dev/null +++ b/code/wxfred2/res/data80.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data80_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##ccc##cb`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac##cc#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data85.xpm b/code/wxfred2/res/data85.xpm new file mode 100644 index 0000000000..0a2f6d817a --- /dev/null +++ b/code/wxfred2/res/data85.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data85_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##cc####b`", +"....a#cc#c#cccb`", +"....a#cc#c#cccb`", +"....a#cc#c###cb`", +"....ac##cc#cc#b`", +"....a#cc#cccc#b`", +"....a#cc#cccc#b`", +"....a#cc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data90.xpm b/code/wxfred2/res/data90.xpm new file mode 100644 index 0000000000..2e80650ad8 --- /dev/null +++ b/code/wxfred2/res/data90.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data90_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##ccc##cb`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....a#cc#c#cc#b`", +"....ac###c#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....accc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/data95.xpm b/code/wxfred2/res/data95.xpm new file mode 100644 index 0000000000..1d82f8bd10 --- /dev/null +++ b/code/wxfred2/res/data95.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *data95_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #ff00ff", +"# c #c22e2e", +"a c #808080", +"b c #c0c0c0", +"c c #ffffff", +"d c #000000", +"e c #000000", +"f c #000000", +"g c #000000", +"h c #000000", +"i c #000000", +"j c #000000", +"k c #000000", +"l c #000000", +"m c #000000", +/* pixels */ +"................", +"....aaaaaaaaaaa`", +"....acccccccccb`", +"....ac##cc####b`", +"....a#cc#c#cccb`", +"....a#cc#c#cccb`", +"....a#cc#c###cb`", +"....ac###c#cc#b`", +"....accc#cccc#b`", +"....accc#cccc#b`", +"....accc#c#cc#b`", +"....ac##ccc##cb`", +"....acccccccccb`", +"....abbbbbbbbbb`", +"....````````````", +"................" +}; diff --git a/code/wxfred2/res/freddoc.ico b/code/wxfred2/res/freddoc.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c05566a293efa323f2affa228bca30f8c428d67 GIT binary patch literal 3310 zcmcJR&1+m$6u{5)g=VP1Nj6!9HfABs?!g7=tQxX#QHXRC5Eo5Ax!p-1V2VilKnSx_ z5P}c7=t4yoZt@ol2rkTp?2?UvLLikOIKj<;!Q=1TJ2QFHOqxdYzPTUgl5f{UZf1hrtRmmnMcy3~xy^c(zCf=D3R=P5(XGIUr6|(G z$dX=2yWPg1@h7UbqH~$b1~=41a+l}1aPf11ne3vH*<_l_TxN4_a)zqskoEkl`-j3i zveW8Cme-58{8z*HT9%Kmoo)Rv&$up@&04jed5&Ja?0=d3GSBF!7i+8a7{_f*#m%N*nL{dcE7&W{HYjk?moTMY!|gm|9-;pQ?+wG zNuQA#KbBn8o6}pMJM|+&l|`c z?KE^yr$RE0IDSN>Rpz8m>ht=7dgjSL&aGDK^E(XY|KMYh_dXGM|AX{iFU*KsdmyrU zQ{>Tgkxv&y?$|s2CTsMMAE$16hrb7PQ%Nxvrx8Pe5j8c56C=x5r}nRH>HPAYjE#*+ zyh5rT3V9D#YJg0n^JtHa{s={SF$Jidyt>^ z{*b*FFXYP~ek75-*PdR|LlPZ2ht8pMrsG>r#_5|Srf$g#Xu9jM4%;uT9x?h>Yw zq$LSTm`ZY&7)yeb3`n-Yc+hLSqiW1}kZ?$Iza+GC^! zfqVhB07oESe6+?v4FVj&IJmL+xY-n739tkp0tw?0fF-ao;1o~<+m2ZAXZ z6(>&&kL=;l7~6cjyd~et%F2ptY;4Hp=B8|IZOP8gj%;sl%l`hp92^|T;o+eiA0Nxf z$%%BkUFrO#^3AhnyvGIAwRgZK;zh~gnrPC!S2WCW&pd35>nQiMQFUfFubyZ0Pg~;7 zz8qZ!n*M&9lLzA{FyD4+d<>VQ5b;R?o=PJG<2!wr$X^e74(H{Xh3M|L5rc)&IGF E0QgtBa{vGU literal 0 HcmV?d00001 diff --git a/code/wxfred2/res/green_do.xpm b/code/wxfred2/res/green_do.xpm new file mode 100644 index 0000000000..f55b6abaa2 --- /dev/null +++ b/code/wxfred2/res/green_do.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *green_do_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmm####mmmm", +"mmmmmmm##m###mmm", +"mmmmmmm#m####mmm", +"mmmmmmm######mmm", +"mmmmmmm######mmm", +"mmmmmmmm####mmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm" +}; diff --git a/code/wxfred2/res/root.xpm b/code/wxfred2/res/root.xpm new file mode 100644 index 0000000000..34afb44e71 --- /dev/null +++ b/code/wxfred2/res/root.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *root_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkjjjjkkkk", +"kkkkkkkjjmjjjkkk", +"kkkkkkkjmjjjjkkk", +"kkkkkkkjjjjjjkkk", +"kkkkkkkjjjjjjkkk", +"kkkkkkkkjjjjkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkk" +}; diff --git a/code/wxfred2/res/root_directive.xpm b/code/wxfred2/res/root_directive.xpm new file mode 100644 index 0000000000..f99286e053 --- /dev/null +++ b/code/wxfred2/res/root_directive.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *root_directive_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmggggmmmm", +"mmmmmmmggmgggmmm", +"mmmmmmmgmggggmmm", +"mmmmmmmggggggmmm", +"mmmmmmmggggggmmm", +"mmmmmmmmggggmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm", +"mmmmmmmmmmmmmmmm" +}; diff --git a/code/wxfred2/res/toolbar.xpm b/code/wxfred2/res/toolbar.xpm new file mode 100644 index 0000000000..bcdb40592a --- /dev/null +++ b/code/wxfred2/res/toolbar.xpm @@ -0,0 +1,46 @@ +/* XPM */ +static char *toolbar_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 437 23 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #808080", +"f c #c0c0c0", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`````fffffffffffffffffffffffffff`ffff", +"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``ff``ff``f```ff``ff``f```````fffffff```````fffffffffffffffffffffffffjjjjjffffffffffffjjjjjffffffffffffffff```````ffffff```fffff```ffffffff````ffffffffff```ffff", +"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``ff``ff``ff``ff``ff``f```````fffffff```````ffffffffffffbbbbfffffffffjffffffffffffffffffffjffffffffffffffff```````fffff`fffffffffff`ffffffffff```fffffff``ffffff", +"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`````fffffffff`````fffffffffffebffffbefffffffjffffffffffffffffffffjfffffffffffffffff`````ffff``fffffffffffff``ffffffffff``ffff```fffffff", +"ffffffffffffffffffffffffffffffffffbffffffffffffffffffffbb``bbfffffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff```````fffffffffffffffffffffffffffffffffff``ffffffffffffffffffffff`````fffffffff`````fffffffffffbfmmmff`fffffffjffffffbbbbffffffffffjfffffffffffffffff`````ffff`fffffffffffffff`fffffffffffffffffffff`ffff", +"ffffffff`ffffffffffffffffffffffffbbbfffffffffffffffffbbeffffebbfffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`````````fff```````f``fff```fffffffffff```fffffffffffbfmmfffff`ffffffjffffebffffbeffffffffjffffffffffffff``ff```ffff`fffffffffffffffff`fffffff``fffffffff```ffff", +"ffffffff``ffffffffffffffffffffff`````fffffffffffffffbbffffffffbbffffffffffffffffgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`````fffffffffffffffffffffffeeeeffffffffffff```````fff```````f``fff```ff``fff``ff```fffffffffffbfmffffff`fffffffffffbfmmmff`fffffffffffffffffffffffffff```fff`fffffffffffffffffff`ffffff```fffffffff`fffff", +"ffffffff```fffffffffffffffffffffefbfefffffffffffffffbffffffffffbffffffffffffffffgfffffffffffffffffff``ffff``fffffffffffffff``ffff``fffffffffffffff```````ffffffffffff``ffff``f```````fffffff``ffff``f```````fffffff``ffff``f``ffff``ffffffffffffffffffffffffffffffffffe````effffffffffff`````fffff`````ffffffff`fff``fff``fff`ffffffffffffbffffffmf`ffffffffffbfmmfffff`ffffffffffffffffffff``fffff`ffff`fffffffffmfffffffff`ffffffffffffffffffffffff", +"ffffffff````ffffffffffffffffffffffbffffffffffffffffbeffffffffffebfffffffffffffffgfffffffffffffffffffe`effe`efffffffffffffffe`effe`effffffffffffffffffffe`ffffffffffffe`effe`effffffe`fffffffe`effe`effffffe`fffffffe`effe`efe`effe`efffffff```````ffffffffffffffffffff`ffff`fffffffff``f`````fffff`````ff``ffffffffff`f`ffffffffffffffffffbfffffmme`ffffffffffbfmffffff`ffffffffffffffffffffffffffffffff`ffffffffmjmffffffff`ffffffffffffffffffffffff", +"ffffffff`````ffffffffffffffff`efffbfffe`fffffffffffbffffffffffffbfffffffffffffffgffffffffffffffffffff``ff``fffffffffffffffff``ff``ffffffffffffffffffffe`ffffffffffffff``ff``ffffffe`fffffffff``ff``ffffffe`fffffffff``ff``fff``ff``fffffffffffffffffffffffffffffffffff`ffff`fffffffff``ff```fffffff```fff``fffffffffff`ffffffffffffffffffffbffmmmf`fffffffffffbffffffmf`ffffffffffffffffff``fffffffffff`ffffffffmjjjmffffffff`fffffffffffffffffffffff", +"ffffffff``````ffffffffffffffb`fffffffff`bffffffffff`ffffffffffff`ffffffffffff```````ffffffffffffffffff````fffffffffffffffffff````ffffffffffffffffffffe`ffffffffffffffff````ffffffe`fffffffffff````ffffffe`fffffffffff````fffff````fffffffff````````ffbffffffffffffffff`ffff`fffffffffffff```fffffff```ffffffffffffffff`ffffffffffffffffffffe`fffe`e`ffffffffffbfffffmme`fffffffffffffffffffffffffffffff`ffffffffmjjjmffffffff`fffffffffff``ffffffffff", +"ffffffff```````ffffffffffffbb`bbbfffbbb`bbfffffffff`ffffffffffff`ffffffffffff```````fffffffffffffffffff``ffffffffffffffffffffe``effffffffffffffffffff`ffffffffffffffffff``fffffff`ffffffffffffe``effffff`fffffffffffff``ffffffe``efffffffffffffffffffbbfffffffffffffffffffffefffffffffffff`fffffffff`ffffffffffffffff```fffffffffffffffffffff````bem`ffffffffffbffmmmf`fffffffffffffffff``fffffffffffff`fffffffmjj`jjmfffffff`ffffffffff``fffffffffff", +"ffffffff````````ffffffffffffb`fffffffff`bffffffffffbffffffffffffbfffffffffffff`````fffffffffffffffffff````ffffffffffffffffffff``ffffffffffffffffffff``fffffffffffffffff````fffff``fffffffffffff``ffffff``ffffffffffff````ffffff``ffffffffff`````fffffbbbfffffffffffffeeeeeee`ffffffff``ffffffffffffffffff``fffffffffff`fffffffffffffffffffffffffff`bjefffffffffe`fffe`e`fffffffffffffffffffffffffffffff`fffffffmj`jjjmfffffff`ffffffffff`ffffffffffff", +"ffffffff`````ffffffffffffffff`efffbfffe`fffffffffffbefffffbffffebfffffffffffff`````jjjjjjjjffffffffff``ff``fffffffffffffffffff``fffffffffffffffffff``fffffffffffffffff``ff``fff``ffffffffffffff``fffff``ffffffffffff``ff``fffff``ffffffffffffffffffffbbbbffffffffffff````````ffffffff``fffff```````ffffff``ffffffffffffffffffffffffffffffffffffffff`bjeffffffffff````bem`fffffffffffff``ffffffff``fffff`fffffffm`jjjjmfffffff`ffffffffff``fffffffffff", +"ffffffff``f``fffffffffffffffffffffbfffffffffffffffffbfffff`effbbffffffffffffffh```ffffffffffffffffffe`effe`effffffffffffffffff``ffffffffffffffffff``fffffffffffffffffe`effe`ef``fffffffffffffff``ffff``ffffffffffffe`effe`effff``ffffffffff```````fffbbbbbfffffffffffeeeeeee`fffffffffffffff```````ffffffffffffffff```````fffffffffff```````ffffffff`bjeffffffffffffff`bjefffffffffffffffffffff`ff`fffff`ffffff`mmmmmmffffff`ffffffffffff`fffffffffff", +"ffffffff`fff``ffffffffffffffffffefbfefffffffffffffffbbffffb`ebbefffffffffffffhf```ffffffffffffffffff``ffff``ffffffffffffffffff``ffffffffffffffffff```````ffffffffffff``ffff``f```````ffffffffff``ffff```````fffffff``ffff``ffff``ffffffffffffffffffffbbbbbbffffffffff````````ffffffffffffffff`````fffffffffffffffff```````fffffffffff```````fffffffff`bjfffffffffffffff`bjeffffff```````ffffffffff`fffff`fffff`fffffffffffff`ffffffffffffffffffffffff", +"ffffffffffff``ffffffffffffffffff`````ffffffffffffffffbffffbb`bffffffffffffffhfff`ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``````ffffbbbbffffffffffffeeeeeee`ffffffff``ffffff`````fffffff``fffffffff`````fffffffffffff`````fffffffffff`fffffffffffffffff`bjefffff```````ffffffff``ffffff`ffff`ffffffffffffff`ffff``fffffff``````````f", +"fffffffffffff``ffffffffffffffffffbbbffffffffffffffffffffffbbb`effffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbbffffffffffff```````effffffff``fffffff```ffffffff``fffffffff`````fffffffffffff`````fffffffffffffffjffffffffffffff`bjfffjff`````ffffffffffffffffff`ff`ffffffffffffff`ffff```````````mmmmmmm`ff", +"fffffffffffff``fffffffffffffffffffbfffffffffffffffffffffffbbbb`bffffffffffhffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff````````fffffbbffffffffffffffffffffffffffffffffffff```ffffffffffffffffffff```fffffffffffffff```ffffffffffffffffjfffffffffffffff`ffffjff`````fffffffff``ffffffff``ffffffffffffff`fffffff``mmmmmmmmmmmmm``ff", +"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffff```fffffffffffffff```ffffffffffffffffjffffffffffffffffffffjfff```ffffffffffffffffffff``fffffffffffff``ffffffff```mmmmmmmmmm``fff", +"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``ff``ff``ff``ff``ff``fffffffffff`fffffffffffffffff`fffffffffffffffffjffffffffffffffffffffjfff```ffffffffffffffffffffff`fffffffffff`ffffffffffff````mmmmm```ffff", +"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``ff``ff``ff``ff``ff``fffffffffffffffffffffffffffffffffffffffffffffffjjjjjffffffffffffjjjjjffff`ffffffffffffffffffffffff```fffff```fffffffffffffffff``````ffffff", +"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`````ffffffffffffffffffffffffffffffff" +}; diff --git a/code/wxfred2/res/toolbar1.xpm b/code/wxfred2/res/toolbar1.xpm new file mode 100644 index 0000000000..dbb9c55c0d --- /dev/null +++ b/code/wxfred2/res/toolbar1.xpm @@ -0,0 +1,46 @@ +/* XPM */ +static char *toolbar1_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 184 23 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee``eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeggggeeeeeeeeeeeeeeeeee````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeee`eeeeeeeeeeeeeeeeeeeeeeee`````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef``feeeeeeeeeeeeeeeeeeeeggggggggeeeeeeeeeeeeeee``````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeee``eeeeeeeeeeeeeeeeeeeeee```````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee```ee```eeeeeeeeeeeeeeeeggggeeeeggggeeeeeeeeeeeeeee``eeeeeeeeeeeeeeeeeeebbbbeeeeeeeeeeeeeeeeeeeee``eeeeeeeeeee", +"eeeeeee```eeeeeeeeeeeeeeeeeeeeeee`````eeeeeeeeeeeeeee`eeeeeeeeeeeeeeeeeee`feeeefe``eeeeeeeeeeeeeegggeeeeeeeegggeeeeeeeeeeeeee``eeeeeeeeeeeeeeeeefbeeeebfeeeeeeeeeeeeeee`fe`eef``eeeeeeee", +"eeeeeee````eeeeeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeeee``feeeeeeeeeef`eeeeeee`eemeeeff`eeeeeeeeeeeeeeggeeef``feggggeeeeeeeeeeeeee``eeeeeeeeeeeeeeeeebeeeeee`eeeeeeeeeeeeee`eef`ee`ee`eeeeeee", +"eeeeeee`````eeeeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeee``feeeeeeeeeef``eeeeeef`emeeefef`feeeeeeeeeeeeggee```ee`gggeggeeeeeeeeeeee````eeeeeeeeeeeeeeebeeeeeeee`eeeeeeeeeeeee`ee``ee`ee`e`eeeee", +"eeeeeee``````eeeeeeeeeeeeee`eeeee```eeeee`eeeeeeee`feeeeeeeeeef```eeeeee`eeeeeeeeef``feeeeeeeeeegge`feeeeggg`eegeeeeeeeeee``e``e``eeeeeeeeeeeeebeeeeeeee`eeeeeeeeeeeeee`ee`ee`ee`fe`eeee", +"eeeeeee```````eeeeeeeeeeee``eeeeeeeeeeeee``eeeeee`feeeeeeeeeef````eeeeee`eeeeeee```ee```eeeeeeeggee`eeeegggf`eeggeeeeeeee`eee``eee`eee`eeeeeeeebeeeeeeee`eeeeeeeeeeeeee`ee`ee`ee`ee`eeee", +"eeeeeee````````eeeeeeeeee```````eeeee```````eeeee`feeeeeeeeef`````eeeeeef`eefee`feeeefe``eeeeeeggef`eeegggef`feggeeeeeeee`eee``eee`eee``eeeeeeebeeeeeeef`eeeeeeeeeeee``e`eeeeeee`ee`eeee", +"eeeeeee`````````eeeeeeee````````eeeee````````eeee`feeeeeeeee``````eeeeeee`ffefe`eemeeeff`eeeeeegge`eeegggeff``eggeeeeeeee`ee`````````````eeeeeeebeeeeee`eeeeeeeeeeee`ee``eeeeeeeeeefeeee", +"eeeeeee````````eeeeeeeeee```````eeeee```````eeeee`feeeeeeeeeee````eeeeeee`fffff`emeeefef`feeeeegge`eegggefef``eggeeeeeeee`e``````````````eeeeeeef`eeef`f`eeeeeeeeeee`eee`eeeeeeeeefeeeee", +"eeeeeee``````eeeeeeeeeeeee``eeeeeeeeeeeee``eeeeee`feeeeeeeeeee`ee`eeeeeeee`````eeeeeeeff``eeeeeggef`gggefef``feggeeeeeeeee```eeeee`eee``eeeeeeeeee````bfe`eeeeeeeeeee`eeeeeeeeeeee`eeeee", +"eeeeeee``e```eeeeeeeeeeeeee`eeeee```eeeee`eeeeeee`feeeeeeeeeef`eeeeeeeeeeeeef``eeeeeefef``eeeeeegeegggefef```eegeeeeeeeee```eeeeee`eee`eeeeeeeeeeeeeeee`bjfeeeeeeeeeee`eeeeeeeeeee`eeeee", +"eeeeeee`eee```eeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeee`feeeeeeeef`eeeeeeeeeeeeeeeef`eefefef``feeeeeegggggffff````eggeeeeeeee`````eee``eeeeeeeeeeeeeeeeeeeeee`bjfeeeeeeeeeefeeeeeeeeee`eeeeee", +"eeeeeeeeeee```eeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeee``feeeeeef``eeeeeeeeeeeeeeeee`ffefef```eeeeeeegggg````````eeggeeeee`e```eee```eeeeeeeeeeeeeeeeeeeeeeeee`bjfeeeeeeeeee`eeeeeeeee`eeeeee", +"eeeeeeeeeeee```eeeeeeeeeeeeeeeeee```eeeeeeeeeeeeeee``ffffff``eeeeeeeeeeeeeeeeee`fffff````eeeeeeeeggeeef``feeeggeeeeee````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`bjeeeeeeeeeee`eeeeeee`eeeeeee", +"eeeeeeeeeeee```eeeeeeeeeeeeeeee```````eeeeeeeeeeeeeee``````eeeeeeeeeeeeeeeeeeeee````````eeeeeeeeeegggeeeeeegggeeeeeee```eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`eeeeeeeeeeeee`eeeeee`eeeeeee", +"eeeeeeeeeeeee``eeeeeeeeeeeeeeeee`````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef``feeeeeeeeeeeeeggggggggggeeeeeeee````eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee```eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeggggeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" +}; diff --git a/code/wxfred2/res/variable.xpm b/code/wxfred2/res/variable.xpm new file mode 100644 index 0000000000..a35d4d250e --- /dev/null +++ b/code/wxfred2/res/variable.xpm @@ -0,0 +1,39 @@ +/* XPM */ +static char *variable_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 16 1", +/* colors */ +"` c #000000", +". c #800000", +"# c #008000", +"a c #808000", +"b c #000080", +"c c #800080", +"d c #008080", +"e c #c0c0c0", +"f c #808080", +"g c #ff0000", +"h c #00ff00", +"i c #ffff00", +"j c #0000ff", +"k c #ff00ff", +"l c #00ffff", +"m c #ffffff", +/* pixels */ +"kkkkkkkkkkkkkkkk", +"kkkkfffffffffkkk", +"kkkkfmmmmmmmefkk", +"kkkkfmmmmmmmemfk", +"kkkkfmmgggmmgggg", +"kkkkfmmmmmmmmmeg", +"kkkkfmmggmggmmeg", +"kkkkfmmmmmmmmmeg", +"kkkkfmmgggmgmmeg", +"kkkkfmmmmmmmmmeg", +"kkkkfmmgmgggmmeg", +"kkkkfmmmmmmmmmeg", +"kkkkfmmmmmmmmmeg", +"kkkkfeeeeeeeeeeg", +"kkkkgggggggggggg", +"kkkkkkkkkkkkkkkk" +}; diff --git a/code/wxfred2/res/wxFREDIcon.xpm b/code/wxfred2/res/wxFREDIcon.xpm new file mode 100644 index 0000000000..83557b79c4 --- /dev/null +++ b/code/wxfred2/res/wxFREDIcon.xpm @@ -0,0 +1,279 @@ +/* XPM */ +static char *wxFREDIcon_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 256 2", +/* colors */ +"`` c #fcfefc", +"`. c #fefffe", +"`# c #fdfefd", +"`a c #ffffff", +"`b c #e9e9e6", +"`c c #dddcd6", +"`d c #fbfcfb", +"`e c #abacae", +"`f c #9b9d9f", +"`g c #d4d5d4", +"`h c #c3c3c4", +"`i c #9fa0a2", +"`j c #a7a8ac", +"`k c #d9d8d5", +"`l c #908f8c", +"`m c #9a9ca0", +"`n c #c4c5c6", +"`o c #ebeceb", +"`p c #97989b", +"`q c #9d9ea1", +"`r c #d4d5d5", +"`s c #f7f7f7", +"`t c #5b5d61", +"`u c #999b9e", +"`v c #828386", +"`w c #67696d", +"`x c #6b6d71", +"`y c #d6d4cf", +"`z c #565757", +"`A c #929598", +"`B c #f7f8f7", +"`C c #c4c5c5", +"`D c #88888c", +"`E c #d9d9da", +"`F c #727476", +"`G c #fefffd", +"`H c #f5f6f6", +"`I c #abadaf", +"`J c #f6f6f7", +"`K c #b3b4b5", +"`L c #b7b7b8", +"`M c #989a9c", +"`N c #b9b7b0", +"`O c #727271", +"`P c #8f9194", +"`Q c #cacbcb", +"`R c #e9e9e9", +"`S c #949699", +"`T c #9b9c9e", +"`U c #bbbcbd", +"`V c #f5f5f4", +"`W c #cacbca", +"`X c #9e9e9d", +"`Y c #797979", +"`Z c #6e6d6d", +"`0 c #676667", +"`1 c #504f4e", +"`2 c #363634", +"`3 c #353534", +"`4 c #383839", +"`5 c #424243", +"`6 c #6e6e6d", +"`7 c #999a9a", +"`8 c #c8c9c9", +".` c #dcdcdb", +".. c #bcbbbb", +".# c #c7c8c8", +".a c #dcdddc", +".b c #e9ebea", +".c c #e3e4e2", +".d c #a9a497", +".e c #a7a294", +".f c #8a8270", +".g c #8e8c85", +".h c #5f5d58", +".i c #292a2b", +".j c #222121", +".k c #282829", +".l c #6e6f6e", +".m c #f5f6f5", +".n c #fefefe", +".o c #e3e2dd", +".p c #ada796", +".q c #b4b1a7", +".r c #a8a292", +".s c #c2bdb0", +".t c #d0cabd", +".u c #6b6c6e", +".v c #1b1a1a", +".w c #1c1b1b", +".x c #2e2e2e", +".y c #e7e8e7", +".z c #fbfdfb", +".A c #fafcfa", +".B c #ccc9c2", +".C c #807968", +".D c #898987", +".E c #78797a", +".F c #96928a", +".G c #726c5c", +".H c #3e3f42", +".I c #5f5f5e", +".J c #919191", +".K c #e5e5e5", +".L c #c6c7c6", +".M c #848484", +".N c #565658", +".O c #5f5c56", +".P c #817a68", +".Q c #66686b", +".R c #87888a", +".S c #949086", +".T c #aaa494", +".U c #fafcfd", +".V c #fcfdfc", +".W c #757575", +".X c #171717", +".Y c #161616", +".Z c #464747", +".0 c #deddd7", +".1 c #9c9583", +".2 c #959390", +".3 c #96938a", +".4 c #ada99d", +".5 c #c1bbae", +".6 c #a2a2a2", +".7 c #333333", +".8 c #1f1f1f", +"#` c #232323", +"#. c #727170", +"## c #8e8a80", +"#a c #a7a295", +"#b c #a69e8b", +"#c c #bbb7ac", +"#d c #d2cfc5", +"#e c #f9fafb", +"#f c #edeeed", +"#g c #dfdfdf", +"#h c #c9caca", +"#i c #d7d7d7", +"#j c #f1f2f1", +"#k c #b2b3b1", +"#l c #6b6c6b", +"#m c #444544", +"#n c #3a3a3a", +"#o c #302f2e", +"#p c #373736", +"#q c #474544", +"#r c #565555", +"#s c #5b5b5c", +"#t c #656565", +"#u c #848584", +"#v c #b2b2b2", +"#w c #fafbfa", +"#x c #d4d5d6", +"#y c #cecfd1", +"#z c #f4f4f4", +"#A c #aeafae", +"#B c #8a8477", +"#C c #9fa0a0", +"#D c #c6c8c7", +"#E c #d4d4d4", +"#F c #ebecec", +"#G c #f2f4f3", +"#H c #fbfbfb", +"#I c #e0e1e1", +"#J c #828385", +"#K c #9e9fa1", +"#L c #a6a7a9", +"#M c #9c9e9f", +"#N c #6a6d73", +"#O c #82817c", +"#P c #747168", +"#Q c #808389", +"#R c #f4f4f3", +"#S c #989a9b", +"#T c #858789", +"#U c #86888a", +"#V c #ebedec", +"#W c #eff0f0", +"#X c #9fa1a2", +"#Y c #c2c3c4", +"#Z c #d9dadb", +"#0 c #d8d7d2", +"#1 c #86837c", +"#2 c #93959a", +"#3 c #cfd1d0", +"#4 c #cccdcd", +"#5 c #cecfcf", +"#6 c #98999c", +"#7 c #f7f8f8", +"#8 c #fdfffd", +"a` c #f9f9f9", +"a. c #f3f4f3", +"a# c #e7e6e4", +"aa c #d9d7d2", +"ab c #fcfdfd", +"ac c #f6f6f5", +"ad c #000000", +"ae c #000000", +"af c #000000", +"ag c #000000", +"ah c #000000", +"ai c #000000", +"aj c #000000", +"ak c #000000", +"al c #000000", +"am c #000000", +"an c #000000", +"ao c #000000", +"ap c #000000", +"aq c #000000", +"ar c #000000", +"as c #000000", +"at c #000000", +"au c #000000", +"av c #000000", +"aw c #000000", +"ax c #000000", +"ay c #000000", +"az c #000000", +"aA c #000000", +"aB c #000000", +"aC c #000000", +"aD c #000000", +"aE c #000000", +"aF c #000000", +"aG c #000000", +"aH c #000000", +"aI c #000000", +"aJ c #000000", +"aK c #000000", +"aL c #000000", +"aM c #000000", +"aN c #000000", +"aO c #000000", +"aP c #000000", +"aQ c #000000", +"aR c #000000", +"aS c #000000", +"aT c #000000", +"aU c #000000", +"aV c #000000", +"aW c #000000", +"aX c #000000", +"aY c #000000", +"aZ c #000000", +"a0 c #000000", +"a1 c #000000", +"a2 c #000000", +"a3 c #000000", +"a4 c #000000", +"a5 c #000000", +"a6 c #000000", +"a7 c #000000", +"a8 c #000000", +/* pixels */ +"```.`.`.`.`#`a`b`c`a`#`.`a`a`.``", +"`d`e`f`g`h`i`j`k`l`m`n`o`p`q`r`a", +"`s`t`u`a`v`w`x`y`z`A`B`C`D`E`F`G", +"`H`I`J`a`K`L`M`N`O`P`Q`R`S`T`U`a", +"`V`W`X`Y`Z`0`1`2`3`4`5`6`7`8`a`#", +".`...#.a.b.c.d.e.f.g.h.i.j.k.l.m", +"`.`a`a.n`a.o.p.q.r.s.t.u.v.w.x.y", +".z.A`a.n`a.B.C.D.E.F.G.H.I.J.K`a", +"``.n.L.M.N.O.P.Q.R.S.T.U.V`a`#.A", +"`a.W.X.Y.Z.0.1.2.3.4.5`a.V`a`a`a", +"`a.6.7.8#`#.###a#b#c#d#e#f#g#h#i", +".z`a#j#k#l#m#n#o#p#q#r#s#t#u#v.y", +"``#w#x#y#z`R#A###B#C#D#E#F#G#H`a", +"`a#I#J#K#L#M#N#O#P#Q#R#S#T#U#V`a", +"`a#W#K#X`8#Y#Z#0#1#2#3#4#5#6#7#8", +"```.a`a..n`#`aa#aaabac`.`.`a````" +}; diff --git a/code/wxfred2/voiceactingmanagereditor.cpp b/code/wxfred2/voiceactingmanagereditor.cpp index c6ffc18d06..c12ebca791 100644 --- a/code/wxfred2/voiceactingmanagereditor.cpp +++ b/code/wxfred2/voiceactingmanagereditor.cpp @@ -19,7 +19,6 @@ #include "voiceactingmanagereditor.h" #include -#include "voicefilemanager.h" BEGIN_EVENT_TABLE(dlgVoiceActingManagerEditor, wxDialog) @@ -38,7 +37,5 @@ dlgVoiceActingManagerEditor::~dlgVoiceActingManagerEditor() void dlgVoiceActingManagerEditor::OnGenerateFileNames(wxCommandEvent &WXUNUSED(event)) { - dlgVoiceFileManager *dlg = new dlgVoiceFileManager(this); - dlg->ShowModal(); - dlg->Destroy(); + } diff --git a/code/wxfred2/voicefilemanager.cpp b/code/wxfred2/voicefilemanager.cpp deleted file mode 100644 index 0b4f4fa895..0000000000 --- a/code/wxfred2/voicefilemanager.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Created by Ian "Goober5000" Warfield for the FreeSpace2 Source Code Project. - * You may not sell or otherwise commercially exploit the source or things you - * create based on the source. - */ - - - -// precompiled header for compilers that support it -#include - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#ifndef WX_PRECOMP - #include -#endif - -#include "voicefilemanager.h" -#include - - -BEGIN_EVENT_TABLE(dlgVoiceFileManager, wxDialog) -END_EVENT_TABLE() - - -dlgVoiceFileManager::dlgVoiceFileManager(wxWindow *parent) - : wxDialog() -{ - wxXmlResource::Get()->LoadDialog(this, parent, "dlgVoiceFileManager"); -} - -dlgVoiceFileManager::~dlgVoiceFileManager() -{} - diff --git a/code/wxfred2/voicefilemanager.h b/code/wxfred2/voicefilemanager.h deleted file mode 100644 index 5e2c92bd2d..0000000000 --- a/code/wxfred2/voicefilemanager.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Created by Ian "Goober5000" Warfield for the FreeSpace2 Source Code Project. - * You may not sell or otherwise commercially exploit the source or things you - * create based on the source. - */ - - - -#ifndef _VOICE_FILE_MANAGER_H -#define _VOICE_FILE_MANAGER_H - -class dlgVoiceFileManager : public wxDialog -{ - public: - // constructor/destructors - dlgVoiceFileManager(wxWindow *parent); - ~dlgVoiceFileManager(); - - // event handlers - // event functions go here - - protected: - // events - DECLARE_EVENT_TABLE() - - private: - // dialog control stuff goes here -}; - -#endif diff --git a/code/wxfred2/wxFRED.fbp b/code/wxfred2/wxFRED.fbp new file mode 100644 index 0000000000..b8beaea06b --- /dev/null +++ b/code/wxfred2/wxFRED.fbp @@ -0,0 +1,35362 @@ + + + + + + XRC + 1 + source_name + 0 + UTF-8 + connect + wxFRED + 1000 + none + 0 + wxFRED + + D:\FSO\SCP E branch\code\wxfred2 + + 1 + 1 + 0 + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + FREDMenu + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + File + m_menu1 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + New + mnuFileNew + none + Ctrl+N + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Open... + mnuFileOpen + none + Ctrl-O + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Save + mnuFileSave + none + Ctrl+S + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Save As... + mnuFileSaveAs + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Revert + mnuFileRevert + none + + + + + + + m_separator1 + none + + + Save Format + mnuFileSaveFormat + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + FS2 open + mnuFileSaveFormatFs2Open + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + FS2 retail + mnuFileSaveFormatFs2Retail + none + + + + + + + + Import + mnuFileImport + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + FS1 mission... + mnuFileImportFreespace1Mission + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + FS1 weapon loadouts... + mnuFileImportWeaponLoadouts + none + + + + + + + + m_separator2 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Run Freespace + mnuFileRunFreespace + none + Alt+R + + + + + + m_separator3 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Recent File List + mnuFileRecentFileList + none + + + + + + + m_separator4 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Exit + mnuFileExit + none + + + + + + + + Edit + m_menu2 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Undo + mnuEditUndo + none + Ctrl+Z + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Delete + mnuEditDelete + none + Del + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Delete Wing + mnuEditDeleteWing + none + Ctrl+Del + + + + + + m_separator5 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Disable Undo + mnuEditDisableUndo + none + + + + + + + + View + m_menu3 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Toolbar + mnuViewToolbar + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Status Bar + mnuViewStatusBar + none + + + + + + + m_separator6 + none + + + Display Filter + mnuViewDisplayFiter + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Ships + mnuViewDisplayFilterShowShips + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Player Starts + mnuViewDisplayFilterShowPlayerStarts + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Waypoints + mnuViewDisplayFilterShowWaypoints + none + + + + + + + m_separator7 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Friendly + mnuViewDisplayFilterShowFriendly + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Hostile + mnuViewDisplayFilterShowHostile + none + + + + + + + + m_separator8 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Hide Marked Objects + mnuViewHideMarkedObjects + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Hidden Objects + mnuViewShowHiddenObjects + none + + + + + + + m_separator9 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Ship Models + mnuViewShowShipModels + none + Shift+Alt+M + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Outlines + mnuViewShowOutlines + none + Shift+Alt+O + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Ship Info + mnuViewShowShipInfo + none + Shift+Alt+I + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Coordinates + mnuViewShowCoordinates + none + Shift+Alt+C + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Grid Positions + mnuViewShowGridPositions + none + Shift+Alt+P + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Distances + mnuViewShowDistances + none + D + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Model Paths + mnuViewShowModelPaths + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Model Dock Points + mnuViewShowModelDockPoints + none + + + + + + + m_separator10 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Grid + mnuViewShowGrid + none + Shift+Alt+G + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Horizon + mnuViewShowHorizon + none + Shift+Alt+H + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Double Fine Gridlines + mnuViewDoubleFineGridlines + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Anti-Aliased Gridlines + mnuViewAntiAliasedGridlines + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show 3-D Compass + mnuViewShow3DCompass + none + Shift+Alt+3 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show Background + mnuViewShowBackground + none + Shift+Alt+B + + + + + + m_separator11 + none + + + Viewpoint Shift+V + mnuViewViewpoint + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Camera + mnuViewViewpointCamera + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Current Ship + mnuViewViewpointCurrentShip + none + + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Save Camera Pos + mnuViewSaveCameraPos + none + Ctrl+P + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Restore Camera Pos + mnuViewRestoreCameraPos + none + Ctrl+R + + + + + + m_separator12 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Lighting From Suns + mnuViewLightingFromSuns + none + + + + + + + + Speed + m_menu4 + protected + + Movement + mnuSpeedMovement + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x1 + mnuSpeedMovementX1 + none + 1 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x2 + mnuSpeedMovementX2 + none + 2 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x3 + mnuSpeedMovementX3 + none + 3 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x5 + mnuSpeedMovementX5 + none + 4 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x8 + mnuSpeedMovementX8 + none + 5 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x10 + mnuSpeedMovementX10 + none + 6 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x50 + mnuSpeedMovementX50 + none + 7 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x100 + mnuSpeedMovementX100 + none + 8 + + + + + + + Rotation + mnuSpeedRotation + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x1 + mnuSpeedRotationX1 + none + Shift+1 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x5 + mnuSpeedRotationX5 + none + Shift+2 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x12 + mnuSpeedRotationX12 + none + Shift+3 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x25 + mnuSpeedRotationX25 + none + Shift+4 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + x50 + mnuSpeedRotationX50 + none + Shift+5 + + + + + + + + Editors + m_menu5 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Ships + mnuEditorsShips + none + Shift+S + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Wings + mnuEditorsWings + none + Shift+W + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Objects + mnuEditorsObjects + none + Shift+O + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Waypoint Paths + mnuEditorsWaypointPaths + none + Shift+Y + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Mission Objectives + mnuEditorsMissionObjectives + none + Shift+G + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Events + mnuEditorsEvents + none + Shift+E + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Team Loadout + mnuEditorsTeamLoadout + none + Shift+P + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Background + mnuEditorsBackground + none + Shift+I + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Reinforcements + mnuEditorsReinforcements + none + Shift+R + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Asteroid Field + mnuEditorsAsteroidField + none + Shift+A + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Mission Specs + mnuEditorsMissionSpecs + none + Shift+N + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Briefing + mnuEditorsBriefing + none + Shift+B + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Debriefing + mnuEditorsDebriefing + none + Shift+D + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Shield System + mnuEditorsShieldSystem + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Command Briefing + mnuEditorsCommandBriefing + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Set Global Ship Flags + mnuEditorsSetGlobalShipFlags + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Voice Manager + mnuEditorsVoiceActingManager + none + + + + + + + m_separator13 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Campaign + mnuEditorsCampaign + none + Shift+C + + + + + + + Groups + m_menu6 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 1 + mnuGroupsGroup1 + none + Ctrl+1 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 2 + mnuGroupsGroup2 + none + Ctrl+2 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 3 + mnuGroupsGroup3 + none + Ctrl+3 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 4 + mnuGroupsGroup4 + none + Ctrl+4 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 5 + mnuGroupsGroup5 + none + Ctrl+5 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 6 + mnuGroupsGroup6 + none + Ctrl+6 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 7 + mnuGroupsGroup7 + none + Ctrl+7 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 8 + mnuGroupsGroup8 + none + Ctrl+8 + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 9 + mnuGroupsGroup9 + none + Ctrl+9 + + + + + + Set Group + mnuGroupsSetGroup + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 1 + mnuGroupsSetGroupGroup1 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 2 + mnuGroupsSetGroupGroup2 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 3 + mnuGroupsSetGroupGroup3 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 4 + mnuGroupsSetGroupGroup4 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 5 + mnuGroupsSetGroupGroup5 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 6 + mnuGroupsSetGroupGroup6 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 7 + mnuGroupsSetGroupGroup7 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 8 + mnuGroupsSetGroupGroup8 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Group 9 + mnuGroupsSetGroupGroup9 + none + + + + + + + + + Misc + m_menu7 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Level Object + mnuMiscLevelObject + none + L + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Align Object + mnuMiscAlignObject + none + Ctrl+L + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Mark Wing + mnuMiscMarkWing + none + W + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Control Object + mnuMiscControlObject + none + T + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Next Object + mnuMiscNextObject + none + Tab + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Prev Object + mnuMiscPreviousObject + none + Ctrl+Tab + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Adjust Grid + mnuMiscAdjustGrid + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Next Subsystem + mnuMiscNextSubsystem + none + K + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Prev Subsystem + mnuMiscPrevSubsystem + none + Shift+K + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Cancel Subsystem + mnuMiscCancelSubsystem + none + Alt+K + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Mission Statistics + mnuMiscMissionStatistics + none + Ctrl+Shift+D + + + + + + m_separator14 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Error Checker + mnuMiscErrorChecker + none + Shift+H + + + + + + + Help + m_menu8 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Help Topics + mnuHelpHelpTopics + none + F1 + + + + + + m_separator15 + none + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + About FRED2 + mnuHelpAboutFRED2 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Show SEXP Help + mnuHelpShowSexpHelp + none + + + + + + + + + + + 1 + 1 + + + 0 + wxID_ANY + + + + SelectTeamMenu + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Select Team + m_menu9 + protected + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Team 1 + mnuSelectTeamTeam1 + none + + + + + + + + 0 + 1 + + wxID_ANY + wxITEM_NORMAL + Team 2 + mnuSelectTeamTeam2 + none + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + + + dlgAboutBox + + 560,215 + wxCAPTION|wxCLOSE_BOX|wxSTAY_ON_TOP|wxSYSTEM_MENU + ; + About FRED2 + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer52 + wxVERTICAL + none + + 2 + wxEXPAND + 1 + + + wxBOTH + + + 0 + + gbSizer1 + wxFLEX_GROWMODE_SPECIFIED + none + 0 + + 15 + 1 + 0 + wxALL|wxLEFT|wxRIGHT + 0 + 10 + + + res/V_fred.xpm; Load From File + + 1 + 1 + + + + wxID_ANY + + + m_bitmap3 + protected + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + 1 + 2 + wxALL + 0 + 1 + + + + 1 + 1 + + + + wxID_ANY + FRED2_OPEN - FreeSpace Editor, Version 3.6.13 + + + m_staticText57 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + 1 + 2 + wxALL + 1 + 1 + + + + 1 + 1 + + + + wxID_ANY + Copyright 1999 Volition, Inc. All Rights Reserved + + + m_staticText58 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + wxEXPAND + 2 + 1 + + 4 + protected + 0 + + + + 3 + 1 + 2 + wxALL + 3 + 1 + + + + 1 + 1 + + + + wxID_ANY + Bravely maintained by Goober5000, taylor, Karajorma and the SCP Team Ported to OGL by RandomTiger, Phreak, and Fry_Day Ported to wxWidgets by Goober5000, taylor and The E + + + m_staticText59 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + wxALL + 5 + 1 + + + + 1 + 1 + + + + wxID_ANY + "Fred2 is the omega of all giant unwieldy pieces of code. It's big, it's horrifying, and it just doesn't care. View it at your own risk" - Dave Baranec + + + m_staticText62 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + 1 + 3 + wxEXPAND + 7 + 1 + + 4 + protected + 0 + + + + 0 + 1 + 2 + wxEXPAND|wxSHAPED + 7 + 1 + + + bSizer53 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + OK + + + m_button46 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Report a Bug + + + m_button47 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Visit Forums + + + m_button48 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + 591,315 + 591,315 + dlgAsteroidFieldEditor + + 591,315 + wxCAPTION|wxCLOSE_BOX|wxRESIZE_BORDER + ; + Asteroid Field Editor + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer59 + wxVERTICAL + none + + 5 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Enabled + + + chkAsteroidsEnabled + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxSHAPED + 1 + + + bSizer60 + wxHORIZONTAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Field Properties + + sbSizer24 + wxVERTICAL + none + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Mode + + sbSizer31 + wxHORIZONTAL + none + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Active Field + + + optActiveField + protected + + + wxRB_GROUP + + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Passive Field + + + optPassiveField + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + wxID_ANY + Content + + sbSizer30 + wxVERTICAL + none + + + 3 + wxALL|wxEXPAND + 0 + + + bSizer62 + wxHORIZONTAL + none + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Asteroid + + + optFieldtypeAsteroid + protected + + + wxRB_GROUP + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Ship + + + optFieldTypeShip + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + 2 + wxBOTH + + + 0 + + fgSizer12 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Brown + + + chkBrownRocks + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboObjType1 + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Blue + + + chkBlueRocks + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboObjType2 + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Orange + + + chkOrangeRocks + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboObjType3 + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Number: + + + m_staticText67 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + numObjects + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Avg. Speed + + + m_staticText68 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numAvgSpeed + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer19 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL + 1 + + wxID_ANY + Outer Box + + sbSizer27 + wxVERTICAL + none + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer15 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + m_staticText87 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min X: + + + m_staticText69 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMinX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + -1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max X: + + + m_staticText70 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMaxX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min Y: + + + m_staticText71 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMinY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + -1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Y: + + + m_staticText72 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMaxY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min Z: + + + m_staticText73 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMinZ + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + -1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Z: + + + m_staticText74 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numOuterBoxMaxZ + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + wxID_ANY + Inner Box + + sbSizer28 + wxVERTICAL + none + + + 5 + wxEXPAND + 1 + + 2 + wxBOTH + + + 0 + + fgSizer151 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Enable + + + chkInnerBox + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min X: + + + m_staticText691 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMinX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max X: + + + m_staticText701 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMaxX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min Y: + + + m_staticText711 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMinY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Y: + + + m_staticText721 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMaxY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min Z: + + + m_staticText731 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMinZ + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Z: + + + m_staticText741 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + numInnerBoxMaxZ + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL|wxEXPAND + 1 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + astConfirm + protected + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + -1,-1 + -1,-1 + dlgBackgroundEditor + + 688,543 + wxDEFAULT_DIALOG_STYLE + + Background Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer89 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer91 + wxVERTICAL + none + + 5 + wxSHAPED + 0 + + + bSizer90 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + "Background 1" "Background 2" + + 1 + 1 + + + 0 + wxID_ANY + + + cboBackgroundPreset + protected + + 1 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Import + + + btnImportBackground + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Bitmaps + + sbSizer35 + wxHORIZONTAL + none + + + 5 + wxEXPAND + 0 + + + bSizer92 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + lclBGBitmaps + protected + + + wxLC_ICON + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer93 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Add + + + btnAddBGBitmap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete + + + btnDeleteBGBitmap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 1 + + + bSizer95 + wxVERTICAL + none + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboBGBitmapSelect + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + 2 + wxBOTH + + + 0 + + fgSizer31 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + P + + + m_staticText152 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnBGBitmapP + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + B + + + m_staticText153 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnBGBitmapB + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + H + + + m_staticText154 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnBGBitmapH + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Scale (x/y) + + + m_staticText155 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer96 + wxHORIZONTAL + none + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 7 + + txtBGBitmapScaleX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 18.000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 6 + + txtBGBitmapScaleY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + # of divisions (x/y) + + + m_staticText156 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer961 + wxHORIZONTAL + none + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 6 + + txtBGBitmapDivisionsX + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 6 + + txtBGBitmapDivisionsY + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Nebula + + sbSizer36 + wxHORIZONTAL + none + + + 5 + + 0 + + + bSizer100 + wxVERTICAL + none + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Full Nebula + + + chkFullNebula + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer32 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Range + + + m_staticText157 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtNebulaRange + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Pattern + + + m_staticText158 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + "nbackblue1" "nbackblue2" "nbackcyan" "nbackgreen" "nbackpurp1" "nbackpurp2" "nbackred" "nbackblack" + + 1 + 1 + + + 0 + wxID_ANY + + + cboNebulaPattern + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Lightning Storm + + + m_staticText159 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + "none" "s_standard" "s_active" "s_emp" "s_medium" + + 1 + 1 + + + 0 + wxID_ANY + + + cboLightningStorm + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Pattern + + + m_staticText160 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + "None" "Pattern01" "Pattern02" "Pattern03" + + 1 + 1 + + + 0 + wxID_ANY + + + cboNebulaPattern + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Color + + + m_staticText161 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + "Red" "Blue" "Gold" "Purple" "Maroon" "Green" "Grey Blue" "Violet" "Grey Green" + + 1 + 1 + + + 0 + wxID_ANY + + + cboNebulaColour + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Toggle ship trails + + + m_checkBox41 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + wxID_ANY + Nebula Poofs + + sbSizer42 + wxVERTICAL + none + + + 5 + + 0 + + + bSizer101 + wxVERTICAL + none + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofGreen01 + + + chkPoofGreen01 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofGreen02 + + + chkPoofGreen02 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofRed01 + + + chkPoofRed01 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofRed02 + + + chkPoofRed02 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofPurp01 + + + chkPoofPurp01 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + PoofPurp02 + + + chkPoofPurp02 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 1 + + 2 + wxBOTH + + + 0 + + fgSizer33 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + P + + + m_staticText163 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnNebPoofPitch + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + B + + + m_staticText164 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnNebPoofBank + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + H + + + m_staticText165 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnNebPoofHeading + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer102 + wxVERTICAL + none + + 5 + wxALIGN_RIGHT + 0 + + + bSizer1001 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Swap with + + + btnBGSwap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + "Background 1" "Background 2" + + 1 + 1 + + + 0 + wxID_ANY + + + cboBackgroundSwap + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Suns + + sbSizer37 + wxHORIZONTAL + none + + + 5 + wxEXPAND + 1 + + + bSizer1021 + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + lclBGSunbitmaps + protected + + + wxLC_ICON + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer103 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Add + + + btnAddSunBitmap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete + + + btnDeleteSunBitmap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxSHAPED + 1 + + + bSizer104 + wxVERTICAL + none + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboSelectSun + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 2 + wxBOTH + + + 0 + + fgSizer311 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + P + + + m_staticText1521 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnSunBitmapP + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + B + + + m_staticText1531 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnSunBitmapB + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + H + + + m_staticText1541 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 359 + + 0 + + spnSunBitmapH + protected + + + wxSP_ARROW_KEYS|wxSP_WRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxSHAPED + 0 + + + bSizer105 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Scale + + + m_staticText179 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSunScale + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Ambient Light + + sbSizer38 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 3 + wxHORIZONTAL + 1 + + 0 + + fgSizer40 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Red + + + m_staticText180 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + 0 + + sldAmbientRed + protected + + + wxSL_HORIZONTAL + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + + txtAmbientRed + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Green + + + m_staticText182 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + 0 + + sldAmbientGreen + protected + + + wxSL_HORIZONTAL + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + + txtAmbientGreen + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Blue + + + m_staticText184 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + 0 + + sldAmbientBlue + protected + + + wxSL_HORIZONTAL + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 255 + + + txtAmbientBlue + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Misc. + + sbSizer39 + wxVERTICAL + none + + + 5 + wxEXPAND|wxSHAPED + 0 + + + bSizer106 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Number of Stars: + + + m_staticText186 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 500 + + + m_staticText187 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 2000 + + 0 + + sldNumStars + protected + + + wxSL_HORIZONTAL + + + + wxFILTER_NONE + wxDefaultValidator + + 500 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Takes place inside Subspace + + + m_checkBox48 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 2 + wxHORIZONTAL + 1 + + 0 + + fgSizer37 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Skybox Model + + + btnSkyboxSelect + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSkybox + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Environment Map + + + btnEnvMap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtEnvMap + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + wxID_ANY + Skybox Flags + + sbSizer40 + wxVERTICAL + none + + + 5 + wxEXPAND + 1 + + 3 + wxBOTH + + + 0 + + fgSizer41 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Lighting + + + chkSBNoLighting + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Transparent + + + chkSBTransparent + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Force Clamp + + + chkSBForceClamp + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Z-Buffer + + + chkSBNoZBuffer + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Cull + + + chkSBNoCull + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Glowmaps + + + chkSBNoGlowmaps + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + 380,311 + 380,311 + dlgCommandBriefingEditor + + 380,311 + wxCAPTION|wxCLOSE_BOX|wxSTAY_ON_TOP|wxSYSTEM_MENU + ; + Command Briefing Editor + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer30 + wxVERTICAL + none + + 3 + wxALIGN_LEFT|wxSHAPED + 1 + + + bSizer31 + wxVERTICAL + none + + 3 + wxALIGN_CENTER_HORIZONTAL|wxEXPAND + 0 + + + bSizer32 + wxHORIZONTAL + none + + 3 + wxALIGN_TOP + 0 + + + bSizer33 + wxVERTICAL + none + + 3 + wxEXPAND + 0 + + + bSizer34 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 1 + + + + 1 + 1 + + + + wxID_ANY + No stages + + + txtNumCBStages + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Prev + + + btnPrev + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Next + + + btnNext + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL + 0 + + + bSizer35 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Add + + + btnAdd + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT|wxRIGHT + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Insert + + + btnInsert + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Delete + + + btnDelete + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 5 + protected + 5 + + + + 1 + wxEXPAND + 0 + + + bSizer36 + wxVERTICAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + &OK + + + wxID_OK + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + &Cancel + + + wxID_CANCEL + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Stage Text + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 2 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtStageText + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 1 + + 4 + wxBOTH + 1 + + 0 + + fgSizer28 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Ani File + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtAniFile + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + <default> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Browse + + + btnAniBrowse + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Voice Wave File + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtVoiceWaveFile + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Browse + + + btnVoiceBrowse + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + res/bmp00001.xpm; Load From File + + 1 + 0 + + 1 + + + + + + wxID_ANY + MyButton + + + btnVoicePlay + protected + + + + wxBU_AUTODRAW|wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + + + dlgDebriefingEditor + + 602,329 + wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX + ; + Debriefing Editor + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer21 + wxHORIZONTAL + none + + 3 + wxALIGN_TOP|wxALL|wxEXPAND + 0 + + + bSizer22 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + + bSizer23 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 1 + + + + 1 + 1 + + + + wxID_ANY + No stages + + + txtStages + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Prev + + + btnPrev + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Next + + + btnNext + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 0 + + + bSizer24 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Add + + + btnAdd + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Insert + + + btnInsert + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + Delete + + + btnDelete + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL|wxEXPAND|wxTOP + 0 + + + + 1 + 1 + + + + wxID_ANY + Usage Formula + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + + treeUsageFormula + protected + + 250,200 + wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_MULTIPLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + wxSUNKEN_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_TOP|wxALL|wxEXPAND + 0 + + + bSizer25 + wxVERTICAL + none + + 0 + wxEXPAND|wxALL + 0 + + + bSizer26 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Voice Wave File + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtVoiceWaveFile + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Browse + + + btnBrowse + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + res/bmp00001.xpm; Load From File + + 1 + 0 + + 1 + + + + + + wxID_ANY + MyButton + + + btnPlay + protected + + + + wxBU_AUTODRAW|wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Stage Text + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtStageText + protected + + 320,100 + wxTE_MULTILINE|wxTE_LINEWRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Recommendation Text + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtRecommendationText + protected + + 320,100 + wxTE_MULTILINE|wxTE_LINEWRAP + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + dlgEventsEditor + + 641,551 + wxDEFAULT_DIALOG_STYLE + + Events Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer70 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizer30 + wxFLEX_GROWMODE_ALL + none + 0 + 0 + + 3 + wxALL|wxEXPAND + 2 + + + bSizer71 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + m_treeCtrl8 + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer28 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Directive Text + + + m_staticText123 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtDirectiveText + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Directive Keypress Text + + + m_staticText124 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + m_textCtrl59 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxBOTTOM|wxEXPAND|wxTOP + 0 + + + bSizer72 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + New Event + + + btnNewEvent + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Insert Event + + + btnInsertEvent + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete Event + + + btnDeleteEvent + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Repeat Count + + + m_staticText125 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtRepeatCount + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Trigger Count + + + m_staticText126 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtTriggerCount + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Interval Time + + + m_staticText127 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtIntervalTime + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Score + + + m_staticText128 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtScore + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + "Team 1" "Team 2" + + 1 + 1 + + + 0 + wxID_ANY + + + cboTeam + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Chained + + + chkChained + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Chain Delay + + + m_staticText129 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtChainDelay + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 2 + + + bSizer73 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Messages + + sbSizer341 + wxVERTICAL + none + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + m_listBox2 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + + bSizer74 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Name + + + m_staticText131 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtMessageName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Message Text + + + m_staticText132 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 2 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtMessageText + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer781 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + New Message + + + btnNewMessage + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete Message + + + btnDeleteMessage + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Message Properties + + sbSizer34 + wxVERTICAL + none + + + 3 + wxEXPAND + 0 + + 3 + wxBOTH + + + 0 + + fgSizer29 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + ANI File + + + m_staticText133 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboMessageANI + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Browse + + + btnANIBrowse + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Audio File + + + m_staticText134 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboMessageAudio + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxSHAPED + 0 + + + bSizer75 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Browse + + + btnAudioBrowse + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER|wxALL|wxEXPAND + 0 + + + res/bmp00001.xpm; Load From File + + 1 + 0 + + 1 + + + + 0 + + wxID_ANY + MyButton + + + m_bpButton3 + protected + + + + wxBU_AUTODRAW + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + 0 + + + bSizer77 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Team + + + m_staticText138 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboTeamMessage + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + (TvT only) + + + m_staticText139 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer78 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + OK + + + btnConfirm + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Cancel + + + btnCancel + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSEXPArgument + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + wxSIMPLE_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 2 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSEXPInfo + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + 495,414 + 495,413 + dlgMissionObjectivesEditor + + 495,414 + wxDEFAULT_DIALOG_STYLE + + Mission Objectives + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer63 + wxVERTICAL + none + + 3 + wxEXPAND + 2 + + + bSizer64 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer69 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + tctObjectives + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer65 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + + bSizer66 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Display Types + + + m_staticText117 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + "Primary Goals" "Secondary Goals" "Bonus Goals" + + 1 + 1 + + + 0 + wxID_ANY + + + m_choice27 + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Current Objective + + sbSizer33 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + 1 + + 0 + + fgSizer27 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Type + + + m_staticText118 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + "Primary Goal" "Secondary Goal" "Bonus Goal" + + 1 + 1 + + + 0 + wxID_ANY + + + cboCurrObjType + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Name + + + m_staticText119 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtCurrObjName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Objective Text + + + m_staticText120 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtCurrObjText + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Score + + + m_staticText121 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtCurrObjScore + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Team + + + m_staticText122 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboCurrObjTeam + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Objective Invalid + + + cboCurrObjInvalid + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Don't Play Completion Sound + + + cboCurrObjNoCompletionSound + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + bSizer67 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + New Obj. + + + btnNewObjective + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + OK + + + btnConfirm + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Cancel + + + btnCancel + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSexpHelp + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + 800,590 + 800,590 + dlgMissionSpecsEditor + + 800,590 + wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU + ; + Mission Specs + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer71 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + + + 0 + + fgSizer10 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL|wxEXPAND + 1 + + + bSizer57 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Meta Info + + sbSizer222 + wxVERTICAL + none + + + 0 + wxALL|wxEXPAND + 0 + + 2 + wxHORIZONTAL + 1 + 0 + 0 + + fgSizer2 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + + wxID_ANY + Title: + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtTitle + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Untitled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + + wxID_ANY + Designer: + + + wxID_STATIC1 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtDesigner + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Someone + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Created: + + + m_staticText65 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + xx/xx/xx + + + txtCreated + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Last Modified: + + + m_staticText67 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + xx/xx/xx + + + txtModified + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Mission Type + + sbSizer33 + wxVERTICAL + none + + + 0 + wxEXPAND + 1 + + + bSizer54 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer55 + wxVERTICAL + none + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND|wxRIGHT + 1 + + + + 1 + 1 + + + + wxID_ANY + Single Player + + + optSinglePlayer + protected + + + wxRB_GROUP + + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + Multi Player + + + optMultiPlayer + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + + wxID_ANY + Training + + + optTraining + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer561 + wxVERTICAL + none + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 1 + + + + 1 + 0 + + + + wxID_ANY + Cooperative + + + optCooperative + protected + + + wxRB_GROUP + + + + wxFILTER_NONE + wxDefaultValidator + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 1 + + + + 1 + 0 + + + + wxID_ANY + Team Vs. Team + + + optTeamVsTeam + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 1 + + + + 1 + 0 + + + + wxID_ANY + Dogfight + + + optDogfight + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Multiplayer + + sbSizer212 + wxVERTICAL + none + + + 0 + wxSHAPED + 1 + + 2 + wxBOTH + 1 + + 0 + + fgSizer5 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Respawns: + + + m_staticText75 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + + + 0 + wxID_ANY + 0 + 999 + + 0 + + spnMaxRespawns + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max Respawn Delay: + + + m_staticText76 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + + + 0 + wxID_ANY + 0 + 999 + + -1 + + spnMaxRespawnDelay + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 0 + + wxID_ANY + Squadron Reassignment + + sbSizer17 + wxVERTICAL + none + + + 0 + wxEXPAND + 1 + + 2 + wxBOTH + 1 + + 0 + + fgSizer3 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Name: + + + m_staticText74 + protected + + + wxALIGN_CENTRE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSquadronName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL|wxEXPAND|wxSHAPED + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Logo + + + btnSquadronLogo + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSquadronLogo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + bSizer91 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Player Entry Delay + + + m_staticText159 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 30 + + 0 + + m_spinCtrl18 + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + wxALIGN_BOTTOM|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Mission Description + + + m_staticText781 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + bSizer78 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Support Ships + + sbSizer21 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + + bSizer571 + wxVERTICAL + none + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Disallow Support Ships + + + chkDisallowSupportShips + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Support Ships repair hull + + + chkSupportShipsRepairHull + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 3 + wxBOTH + 2 + + 0 + + fgSizer6 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 4 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Hull Repair Ceiling + + + m_staticText77 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtHullRepairCeiling + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + % + + + m_staticText78 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Subsystem Repair + + + m_staticText79 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSubsystemRepair + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + % + + + m_staticText80 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Ship Trails + + sbSizer22 + wxVERTICAL + none + + + 0 + wxALIGN_CENTER_HORIZONTAL + 0 + + + bSizer651 + wxVERTICAL + none + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Toggle (off in nebula; on elsewhere) + + + chkToggleNebula + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer66 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER|wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Minimum Speed to display + + + chkMinimumTrailSpeed + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + + + 0 + wxID_ANY + 45 + 999 + + 0 + + spnMinimumTrailSpeed + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Built-in Command Messages + + sbSizer211 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + 1 + + 0 + + fgSizer7 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 0 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Sender + + + m_staticText71 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboMessageSender + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + Persona + + + m_staticText72 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboPersona + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Music and Sound + + sbSizer221 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + 1 + + 0 + + fgSizer8 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 0 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Default + + + m_staticText73 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboMusic + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + If Music pack is present + + + m_staticText741 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 70 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboMusicPackPresent + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Sound Environment + + + btnSoundEnvironment + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Custom Wing Names + + + btnCustomWingNames + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + bSizer68 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Flags + + sbSizer23 + wxVERTICAL + none + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + All Teams at War + + + chkAllTeamsAtWar + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Red Alert mission + + + chkRedAlert + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Scramble Mission + + + chkScramble + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Disallow Promotion/Badges + + + chkNoPromotion + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Disable Built-In Messages + + + chkDisableBuiltinMessages + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Disable Built-In Command Messages + + + chkDisableBuiltinCommandMessages + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Traitor + + + chkNoTraitor + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + All Ships beam-freed by default + + + chkAllShipsBeamfree + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Allow daisy-chained docking + + + chkDaisychainedDocking + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Briefing + + + chkNoBriefing + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Toggle Debriefing (On/Off) + + + chkToggleDebrief + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Use Autopilot Cinematics + + + chkUseAutopilotCinematics + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Deactivate Hardcoded Autopilot + + + chkDeactivateHardcodedAutopilot + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Player Starts under AI control (NO MULTI) + + + chkPlayerStartsAsAI + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + 2D Mission + + + chk2DMission + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + AI Options + + sbSizer231 + wxHORIZONTAL + none + + + 5 + wxEXPAND + 1 + + 2 + wxBOTH + 1 + + 0 + + fgSizer9 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxLEFT + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + AI Profile + + + m_staticText771 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboAIProfile + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Loading Screen + + sbSizer7 + wxVERTICAL + none + + + 0 + wxEXPAND + 1 + + 2 + wxBOTH + 1 + + 0 + + fgSizer4 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + 640x480 + + + btnLoadingScreen640x480 + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtLoadingScreen640x480 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER|wxALL|wxEXPAND + 1 + + + + 1 + 0 + 1 + + + + wxID_ANY + 1024x768 + + + btnLoadingScreen1024x768 + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtLoadingScreen1024x768 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + bSizer73 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 0 + protected + 0 + + + + 5 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtMissionDescription + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Designer Notes + + + m_staticText791 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtDesignerNotes + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + dbtMissionSpecs + protected + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + dlgObjectOrientation + + 319,203 + wxDEFAULT_DIALOG_STYLE + + Object Orientation Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer115 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bSizer116 + wxVERTICAL + none + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Position + + sbSizer64 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer50 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + X: + + + m_staticText217 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnPositionX + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Y: + + + m_staticText218 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnPositionY + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Z: + + + m_staticText220 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnPositionZ + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + OK + + + btnConfirm + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + MyButton + + + btnCancel + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer118 + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + + "Point at Object" "Point at Location" "Rotation" + + 1 + 1 + + + 0 + wxID_ANY + + + cboPointToType + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + PointToSizer + wxVERTICAL + none + + 5 + wxEXPAND | wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + pnlPointTo + protected + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + + + dlgSetGlobalShipFlagsEditor + + 206,162 + wxCAPTION|wxCLOSE_BOX|wxSTAY_ON_TOP|wxSYSTEM_MENU + ; + Set Global Ship Flags + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer39 + wxVERTICAL + none + + 5 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + bSizer40 + wxVERTICAL + none + + 5 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Global No-Shields + + + btnGlobalNoShields + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Global No-Subspace-Drive + + + btnGlobalNoSubspaceDrive + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Global Primitive-Sensors + + + btnGlobalPrimitiveSensors + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Global Affected-By-Gravity + + + btnGlobalAffectedByGravity + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + 334,150 + 334,150 + dlgShieldSystemEditor + + 334,150 + wxCAPTION|wxCLOSE_BOX + ; + Shield System Editor + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + wxTRANSPARENT_WINDOW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer28 + wxVERTICAL + none + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 0 + + + bSizer29 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + wxID_ANY + All ships of type + + sbSizer10 + wxVERTICAL + none + + + 3 + wxEXPAND|wxALL + 0 + + + + + 1 + 1 + + + + wxID_ANY + + + cboShipType + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Have shield systems + + + optShipTypeHasShieldSystem + protected + + + wxRB_GROUP + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + No shield systems + + + optShipTypeNoShieldSystem + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + wxID_ANY + All ships on team + + sbSizer11 + wxVERTICAL + none + + + 3 + wxEXPAND|wxALL + 0 + + + + + 1 + 1 + + + + wxID_ANY + + + cboShipTeam + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Have shield systems + + + optShipTeamHasShieldSystem + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + No shield systems + + + optShipTeamNoShieldSystem + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + dlgShieldConfirm + protected + + + + + + + + + + + + + + + wxBOTH + + 1 + 1 + impl_virtual + + + + + wxID_ANY + -1,-1 + -1,-1 + dlgVoiceActingManagerEditor + + 570,353 + wxCAPTION|wxCLOSE_BOX|wxSTAY_ON_TOP|wxSYSTEM_MENU + ; + Voice Acting Manager + + + wxFILTER_NONE + wxDefaultValidator + + wxWS_EX_BLOCK_EVENTS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer107 + wxVERTICAL + none + + 5 + + 1 + + 2 + wxBOTH + 0,1 + 0,1 + 0 + + fgSizer34 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + File Name Options + + sbSizer42 + wxVERTICAL + none + + + 3 + wxALL + 0 + + wxID_ANY + Abbreviations + + sbSizer45 + wxVERTICAL + none + + + 5 + wxEXPAND + 1 + + 2 + wxBOTH + + + 0 + + fgSizer29 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Campaign + + + m_staticText118 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevCampaign + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Mission + + + m_staticText119 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevMission + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cmd. Briefing Stage + + + m_staticText120 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevCB + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Briefing Stage + + + m_staticText121 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevBriefing + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Debriefing Stage + + + m_staticText122 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevDebrief + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Message + + + m_staticText123 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAbbrevMessage + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + wxID_ANY + Other + + sbSizer46 + wxHORIZONTAL + none + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + File Extension + + + m_staticText124 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboVAFileExt + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + bSizer72 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Example + + + m_staticText125 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 1 + + + + 1 + 0 + + + 0 + wxID_ANY + + 0 + + txtExampleFileName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Don't replace existing files + + + chkVANoReplaceExistingFiles + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Generate File Names + + + btnGenerateFileNames + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Script options + + sbSizer44 + wxVERTICAL + none + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Script Entry Format + + sbSizer47 + wxHORIZONTAL + none + + + 3 + wxALL|wxEXPAND + 3 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtScriptEntryFormat + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + $filename - Name of the message file $message - Text of the message $persona - Persona of the sender $sender - Name of the sender Note that $persona and $sender will only appear for the Message section + + + m_staticText133 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 190 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxSHAPED + 0 + + + "Everything" "Just Command Briefings" "Just Briefings" "Just Debriefings" "Just Messages" + + 1 + 1 + + + 0 + wxID_ANY + Export + 1 + + + rdbExportOptions + protected + + 0 + + wxRA_SPECIFY_COLS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Generate Script + + + btnGenerateScript + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxSYS_COLOUR_BTNFACE + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + 862,705 + 862,705 + frmCampaignEditor + + 862,705 + wxCAPTION|wxCLOSE_BOX|wxFRAME_NO_TASKBAR|wxFRAME_SHAPED|wxSYSTEM_MENU + + Campaign Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer44 + wxHORIZONTAL + none + + 3 + wxEXPAND + 0 + + + bSizer45 + wxVERTICAL + none + + 3 + wxALIGN_LEFT|wxALL|wxTOP + 0 + + + + 1 + 1 + + + + wxID_ANY + Available missions + + + wxID_STATIC1 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + + wxID_ANY + + + lstAvailableMissions + protected + + + wxLB_SINGLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + bSizer46 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Campaign name + + + wxID_STATIC2 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 2 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtCampaignName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Type + + + wxID_STATIC3 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + "single" "multi coop" "multi teams" + + 1 + 1 + + + + wxID_ANY + + + cboCampaignType + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Campaign description + + + wxID_STATIC4 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtCampaignDescription + protected + + + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_RIGHT|wxALL + 0 + + + 0 + + 1 + 1 + + + + wxID_ANY + Uses custom tech database + + + chkUsesCustomTechDatabase + protected + + + wxCHK_2STATE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + wxID_ANY + Mission options + + sbSizer15 + wxHORIZONTAL + none + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Briefing cutscene + + + wxID_STATIC5 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 2 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtBriefingCutscene + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Main hall index + + + wxID_STATIC6 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + 0 + 9 + + 0 + + spnMainHallIndex + protected + + 50,-1 + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 0 + + + bSizer47 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM + 0 + + + bSizer48 + wxVERTICAL + none + + 3 + wxALIGN_LEFT|wxALL|wxLEFT|wxRIGHT|wxTOP + 0 + + + + 1 + 1 + + + + wxID_ANY + Branches + + + wxID_STATIC7 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT + 0 + + + + 1 + 1 + + + + wxID_ANY + + + treeBranches + protected + + 250,200 + wxTR_EDIT_LABELS|wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_SINGLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + wxSUNKEN_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_TOP|wxALL|wxEXPAND + 1 + + + bSizer49 + wxVERTICAL + none + + 3 + wxALIGN_RIGHT|wxALL|wxEXPAND + 0 + + wxID_ANY + Branch Options + + sbSizer16 + wxVERTICAL + none + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Move Up + + + btnMoveUp + protected + + 100,-1 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Move Down + + + btnMoveDown + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Toggle Loop + + + btnToggleLoop + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Realign Tree + + + btnRealignTree + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxLEFT|wxRIGHT + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Load Mission + + + btnLoadMission + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Close + + + btnClose + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtHelp + protected + + -1,50 + wxTE_MULTILINE|wxTE_READONLY + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_LEFT|wxALL + 0 + + + + 1 + 1 + + + + wxID_ANY + Mission loop description + + + wxID_STATIC8 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtMissionLoopDescription + protected + + -1,50 + wxTE_MULTILINE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 3 + wxBOTH + 1 + + 0 + + fgSizer31 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Loop brief anim + + + wxID_STATIC9 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 2 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtLoopBriefAnim + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Browse + + + txtLoopBriefAnimBrowse + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 0 + + + + 1 + 1 + + + + wxID_ANY + Loop brief voice + + + wxID_STATIC + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 2 + + + + 1 + 1 + + + + wxID_ANY + + 0 + + txtLoopBriefVoice + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 0 + 1 + + + + wxID_ANY + Browse + + + txtLoopBriefVoiceBrowse + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND | wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + pnlCampaignGraph + protected + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + wxSUNKEN_BORDER|wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + + 0 + wxID_ANY + MyMenuBar + + + m_menubar2 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + File + file + protected + + + 0 + 1 + + ID_NEW + wxITEM_NORMAL + New + new + none + Ctrl-N + + + + + + + 0 + 1 + + ID_OPEN + wxITEM_NORMAL + Open + open + none + Ctrl-O + + + + + + + 0 + 1 + + ID_SAVE + wxITEM_NORMAL + Save + save + none + Ctrl-S + + + + + + + 0 + 1 + + ID_SAVE_AS + wxITEM_NORMAL + Save As... + saveAs + none + + + + + + + m_separator22 + none + + + + 0 + 1 + + ID_EXIT + wxITEM_NORMAL + Exit + exit + none + + + + + + + + Other + other + protected + + + 0 + 1 + + ID_ERROR_CHECKER + wxITEM_NORMAL + Error Checker + errorChecker + none + Alt-H + + + + + + + Initial Status + initialStatus + protected + + + 0 + 1 + + ID_SHIPS + wxITEM_NORMAL + Ships + ships + none + + + + + + + + 0 + 1 + + ID_WEAPONS + wxITEM_NORMAL + Weapons + weapons + none + + + + + + + + + + wxSYS_COLOUR_BTNFACE + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + frmShipsEditor + + 493,640 + wxCAPTION|wxCLOSE_BOX|wxFRAME_NO_TASKBAR|wxSYSTEM_MENU + + Edit Ship + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + + 0 + wxID_ANY + MyMenuBar + + + m_menubar3 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Select Ship + selectShip + protected + + + + + bSizer93 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + + bSizer89 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + 4 + wxBOTH + + + 0 + + fgSizer36 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Ship Name + + + m_staticText154 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtShipName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Wing + + + m_staticText161 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + None + + + txtWing + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Ship Class + + + m_staticText155 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboShipClass + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Hotkey + + + m_staticText163 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboHotkey + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + AI Class + + + m_staticText156 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboAIClass + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Persona + + + m_staticText164 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboPersona + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Team + + + m_staticText157 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboTeam + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Kill Score + + + m_staticText165 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtKillscore + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cargo + + + Cargo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboCargo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Assist % + + + m_staticText166 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtAssistPercentage + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Alt Name + + + m_staticText159 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboAltName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Player Ship + + + chkPlayerShip + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Callsign + + + m_staticText160 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboCallsign + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + Combo! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Set As Player Ship + + + btnMakePlayerShip + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Texture Replacement + + + btnTextureReplacement + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Alt Ship Class + + + btnAltShipClass + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + bSizer91 + wxVERTICAL + none + + 3 + wxSHAPED + 0 + + + bSizer92 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Prev + + + btnPrevWing + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Next + + + btnNextWing + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete + + + btnDelete + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Reset + + + btnReset + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Weapons + + + btnWeapons + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Player Orders + + + btnPlayerOrders + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Special Exp + + + btnSpecialExplosion + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Special Hits + + + btnSpecialHits + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + + bSizer95 + wxHORIZONTAL + none + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Misc + + + btnMiscOptions + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Initial Status + + + btnInitialStatus + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Initial Orders + + + btnInitialOrders + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + TBL Info + + + btnTBLInfo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Hide Cues + + + btnHideCues + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 1 + + + bSizer96 + wxHORIZONTAL + none + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Arrival + + sbSizer53 + wxVERTICAL + none + + + 3 + wxALL|wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer39 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Location + + + m_staticText167 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboArrivalLocation + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Target + + + m_staticText168 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboArrivalTarget + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Distance + + + m_staticText169 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtArrivalDistance + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Delay + + + m_staticText170 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer98 + wxHORIZONTAL + none + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnArrivalDelay + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Seconds + + + m_staticText171 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Restrict Arrival Paths + + + btnRestrictArrivalPaths + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cue + + + m_staticText172 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + tctArrivalCues + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Warp Effect + + + chkNoArrivalWarp + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + wxID_ANY + Departure + + sbSizer54 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer391 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Location + + + m_staticText1671 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboDepartureLocation + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Target + + + m_staticText1681 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboDepartureTarget + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + m_staticText184 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + m_staticText183 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Delay + + + m_staticText1701 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + bSizer981 + wxHORIZONTAL + none + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnArrivalDelay1 + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Seconds + + + m_staticText1711 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Restrict Departure Paths + + + btnRestrictDeparturePaths + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cue + + + m_staticText185 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + + tctDepartureCues + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Warp Effect + + + chkNoDepartureWarp + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxSYS_COLOUR_BTNFACE + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + frmTeamLoadoutEditor + + 500,462 + wxDEFAULT_FRAME_STYLE + + Team Loadout Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + + 0 + wxID_ANY + MyMenuBar + + + m_menubar4 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Select Team + m_menu15 + protected + + + 1 + 1 + + wxID_ANY + wxITEM_NORMAL + Team 1 + menuTeam1 + none + + + + + + + + 0 + 0 + + wxID_ANY + wxITEM_NORMAL + Team 2 + menuTeam2 + none + + + + + + + + Options + m_menu16 + protected + + + 0 + 0 + + wxID_ANY + wxITEM_NORMAL + Balance Teams + meuBalanceTeams + none + + + + + + + + + + bSizer79 + wxVERTICAL + none + + 5 + wxEXPAND + 1 + + + bSizer80 + wxHORIZONTAL + none + + 3 + wxALL|wxEXPAND + 1 + + + bSizer81 + wxVERTICAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Available starting ships + + + m_staticText137 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + From Variable + + + m_staticText139 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + lbxStartShipsVariable + protected + + + wxLB_SINGLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + From Table Entry + + + m_staticText140 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cklShipsFromTbl + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + + bSizer82 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Extra available + + + m_staticText141 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_RIGHT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 99 + + 0 + + spnExtraShipsAvailable + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Set amount from variable + + + m_staticText142 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboSetShipAmountFromVariable + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + 0 + + + bSizer83 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Amount used in Wings: + + + m_staticText143 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + None + + + txtShipsUsedInWings + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + bSizer811 + wxVERTICAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Available starting weapons + + + m_staticText1371 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + From Variable + + + m_staticText1391 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + lbxStartWeaponsVariable + protected + + + wxLB_SINGLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + From Table Entry + + + m_staticText1401 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 1 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cklWeaponsFromTbl + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + + bSizer821 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Extra available + + + m_staticText1411 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_RIGHT|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 99999 + + 0 + + spnExtraWeaponsAvailable + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Set amount from variable + + + m_staticText1421 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboSetWeaponAmountFromVariable + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + 0 + + + bSizer831 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Amount used in Wings: + + + m_staticText1431 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + None + + + txtWeaponsUsedInWings + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer92 + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + 0 + protected + 0 + + + + 5 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + OK + + + btnConfirm + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Cancel + + + btnCancel + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxSYS_COLOUR_BTNFACE + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + frmWingEditor + + 487,541 + wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU + + Wings Editor + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer101 + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + + bSizer102 + wxHORIZONTAL + none + + 5 + + 0 + + 2 + wxBOTH + + + 0 + + fgSizer43 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Wing Name + + + m_staticText186 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtWingName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Leader + + + m_staticText187 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboWingLeader + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + # of Waves + + + m_staticText188 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 999 + + 0 + + spnWaveNumber + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Wave Threshold + + + m_staticText189 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 10 + + 0 + + spnWaveThreshold + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Hotkey + + + m_staticText190 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboHotkey + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + bSizer104 + wxVERTICAL + none + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Reinforcement Unit + + + chkReinforcement + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + Ignore for counting Goals + + + chkIgnoreForGoals + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Arrival Music + + + chkNoArrivalMusic + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Arrival Message + + + chkNoArrivalMessage + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Dynamic Goals + + + chkNoDynamicGoals + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxSHAPED + 0 + + + bSizer105 + wxVERTICAL + none + + 3 + wxALL|wxSHAPED + 0 + + + bSizer106 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Prev + + + btnPrev + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Next + + + btnNext + protected + + + wxBU_EXACTFIT + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Delete Wing + + + btnDeleteWing + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Disband Wing + + + btnDisbandWing + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Initial Orders + + + btnInitialOrders + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Hide Cues + + + btnHideCues + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bSizer107 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Squad Logo + + + btnSquadLogo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtSquadLogo + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer108 + wxHORIZONTAL + none + + 3 + wxALL + 1 + + wxID_ANY + Arrival + + sbSizer55 + wxVERTICAL + none + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer44 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Location + + + m_staticText191 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboArrivalLocation + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Delay + + + m_staticText192 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer109 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 999 + + 0 + + spnArrivalDelay + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Seconds + + + m_staticText193 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + wxID_ANY + Delay Between Waves + + sbSizer58 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + + bSizer110 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Min + + + m_staticText194 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + -1,-1 + 2 + + txtMinWaveDelay + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Max + + + m_staticText195 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtMaxWaveDelay + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer45 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Target + + + m_staticText196 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboArrivalTarget + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Distance + + + m_staticText197 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtArrivalDistance + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Restrict Arrival Paths + + + btnRestrictArrivalPaths + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cue: + + + m_staticText198 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + tctArrivalCues + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Warp Effect + + + chkNoArrivalWarp + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 1 + + wxID_ANY + Departure + + sbSizer551 + wxVERTICAL + none + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer441 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Location + + + m_staticText1911 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboDepartureLocation + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Delay + + + m_staticText1921 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizer1091 + wxHORIZONTAL + none + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + 0 + 999 + + 0 + + spnDepartureDelay + protected + + + wxSP_ARROW_KEYS + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Seconds + + + m_staticText1931 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 17 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + m_staticText215 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxEXPAND + 0 + + 2 + wxBOTH + + + 0 + + fgSizer451 + wxFLEX_GROWMODE_SPECIFIED + none + 2 + 0 + + 3 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Target + + + m_staticText1961 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + + 1 + 1 + + + 0 + wxID_ANY + + + cboDepartureTarget + protected + + 0 + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + + m_staticText216 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 0 + 1 + + + 0 + wxID_ANY + Restrict Arrival Paths + + + btnRestrictDeparturePaths + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Cue: + + + m_staticText1981 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALL|wxEXPAND + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + + tctDepartureCues + protected + + + wxTR_DEFAULT_STYLE + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + 1 + + + 0 + wxID_ANY + No Warp Effect + + + chkNoDepartureWarp + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxSYS_COLOUR_BTNFACE + wxBOTH + + 1 + 1 + impl_virtual + + + + 0 + wxID_ANY + + + frmWaypointEditor + + 211,94 + wxDEFAULT_FRAME_STYLE + + Waypoint Path/Jump Node + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + + 0 + wxID_ANY + MyMenuBar + + + menuWaypoint + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Select Waypoint Path + menuPaths + protected + + + + + bSizer78 + wxHORIZONTAL + none + + 3 + wxALIGN_CENTER|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + Name: + + + m_staticText136 + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + wxALIGN_CENTER|wxALL + 0 + + + + 1 + 1 + + + 0 + wxID_ANY + + 0 + + txtWaypointName + protected + + + + + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/code/wxfred2/wxfred.xrc b/code/wxfred2/wxfred.xrc index 9dbad5a84d..bbf912f326 100644 --- a/code/wxfred2/wxfred.xrc +++ b/code/wxfred2/wxfred.xrc @@ -1,2596 +1,3450 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - 1 - 1 - - - - 1 - 1 - - - - - - - - 1 - 1 - - - - 1 - 1 - - - - 1 - 1 - - - - - - 1 - 1 - - - - 1 - 1 - - - - - - - - - - - - - - - 1 - 1 - - - - 1 - - - - 1 - 1 - - - - 1 - 1 - - - - 1 - 1 - - - - 1 - - - - 1 - - - - 1 - - - - - - 1 - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - 1 - - - - 1 - 1 - - - - - - - - 1 - - - - 1 - - - - - - - - - - - - - 1 - 1 - - - - - - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - 1 - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Asteroid Field Editor - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxVERTICAL - - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - - - wxALIGN_LEFT|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - 2 - 2 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - wxALIGN_LEFT|wxALL - 5 - - 2 - 2 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - 10 - 0 - 100 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 0 - - - - - - - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - 2 - 6 - 0 - 0 - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5 - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5 - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -1000.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 1000.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -1000.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 1000.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -1000.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 1000.0 - - - - - - - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - 2 - 2 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5 - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -500.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 500.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -500.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 500.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - -500.0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 500.0 - - - - - - - - - - wxALIGN_RIGHT|wxALL - 5 - - - 1 - - - - wxALIGN_RIGHT|wxALL - 5 - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Mission Specs - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - Untitled - - - - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - Info - - - - - - wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM - 10 - - 2 - 2 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT - 5 - - - 0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT - 5 - - - 0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 0 - - - 0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT - 5 - - - 0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL - 0 - - - 0 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT - 5 - - - 0 - - - - - - wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE - 0 - - - - - - wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE - 0 - - - - - - wxGROW|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - <none> - - - - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - wxGROW|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - wxALIGN_LEFT|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - 3 - 0 - 100 - - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - wxVERTICAL - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxALIGN_LEFT|wxBOTTOM - 5 - - - - 0 - - - - wxALIGN_LEFT|wxTOP - 5 - - - - 0 - - - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxALIGN_LEFT|wxBOTTOM - 5 - - - - 0 - - - - wxALIGN_LEFT|wxTOP - 5 - - - - 0 - - - - wxALIGN_LEFT|wxBOTTOM - 5 - - - - 0 - - - - wxGROW|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxRIGHT - 5 - - - - 0 - - - - wxALIGN_LEFT - 5 - - - - 0 - - - - wxGROW - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 0 - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT - 5 - - - 0 - - - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - - wxGROW - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 0 - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT - 5 - - 100 - - - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - - - - wxGROW|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxALL - 0 - - - - 0 - - - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 0 - - - - 0 - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - wxALIGN_RIGHT|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - - - - - wxALIGN_RIGHT|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Debriefing Editor - 1 - - wxHORIZONTAL - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - wxGROW|wxTOP|wxBOTTOM - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT - 5 - - - - - - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - - - - wxALIGN_CENTER_HORIZONTAL|wxBOTTOM - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT - 5 - - - - - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM|wxADJUST_MINSIZE - 5 - - 250,200 - - - - - - - wxALIGN_TOP|wxALL - 5 - - wxVERTICAL - - wxGROW|wxALL - 0 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - 320,100 - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - 320,100 - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Shield System Editor - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 5 - - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 5 - - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - - - - - wxALIGN_RIGHT|wxALL - 5 - - - - - - wxALIGN_RIGHT|wxALL - 5 - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Command Briefing Editor - 1 - - wxVERTICAL - - wxALIGN_LEFT|wxALL - 5 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_TOP|wxLEFT|wxRIGHT|wxTOP - 5 - - wxVERTICAL - - wxGROW|wxTOP|wxBOTTOM - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT - 5 - - - - - - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - - - - wxALIGN_CENTER_HORIZONTAL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT - 5 - - - - - - wxALIGN_CENTER_VERTICAL - 5 - - - - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5 - - - wxALIGN_TOP|wxLEFT - 5 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxTOP|wxBOTTOM - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxTOP|wxBOTTOM - 5 - - - - - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - - - - - wxGROW - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - <default> - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - wxGROW|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - none - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Set Global Ship Flags - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxVERTICAL - - wxGROW|wxALL - 5 - - - - - - wxGROW|wxALL - 5 - - - - - - wxGROW|wxALL - 5 - - - - - - wxGROW|wxALL - 5 - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Voice Acting Manager - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 20 - - -1,50 - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Voice File Manager - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 10 - - wxVERTICAL - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 0 - - 2 - 2 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - wxGROW|wxALL - 5 - - wxVERTICAL - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - 0 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 10 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - wxGROW|wxALL - 5 - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 400,300 - Campaign Editor - 1 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - wxVERTICAL - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - - - - - wxGROW|wxTOP|wxBOTTOM - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - single - multi coop - multi teams - - 0 - - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - - - - - wxALIGN_RIGHT|wxALL - 5 - - - - 0 - - - - wxGROW|wxALL - 5 - - wxHORIZONTAL - - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 50,-1 - - 0 - 0 - 9 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM - 5 - - wxVERTICAL - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - 250,200 - - - - - - - wxALIGN_TOP|wxLEFT|wxTOP|wxBOTTOM - 5 - - wxVERTICAL - - wxALIGN_RIGHT|wxALL - 5 - - wxVERTICAL - - - wxGROW|wxALL - 2 - - 100,-1 - - - - - wxGROW|wxALL - 2 - - - - - - wxGROW|wxALL - 2 - - - - - - - - wxGROW|wxALL - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT - 5 - - - - - - wxGROW|wxALL - 5 - - - - - - - - - - wxGROW|wxALL - 5 - - -1,50 - - - - - wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxLEFT|wxRIGHT|wxBOTTOM - 5 - - -1,50 - - - - - wxGROW|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - wxGROW|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - - - - - - - - - - wxWS_EX_BLOCK_EVENTS - 568,297 - About FRED2 - 1 - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - - wxVERTICAL - - wxALIGN_LEFT|wxBOTTOM - 5 - - wxHORIZONTAL - - wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5 - - - wxGROW|wxLEFT - 5 - - wxVERTICAL - - wxGROW|wxALL - 5 - - - 1 - - - - wxGROW|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxGROW|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 591,315 + Asteroid Field Editor + 1 + + wxVERTICAL + + + wxALL + 5 + + + 0 + + + + + wxSHAPED + 5 + + wxHORIZONTAL + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + + wxALL|wxEXPAND + 3 + + + + 1 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + wxALL + 3 + + wxVERTICAL + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALL + 3 + + + + 0 + + + + + wxALL + 3 + + + 0 + + + + + + + + 5 + + 2 + 2 + 0 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALL + 3 + + 0 + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALL + 3 + + 0 + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALL + 3 + + 0 + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 0 + 0 + 10 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + + + + + wxEXPAND + 3 + + 2 + 2 + 0 + 0 + + + + + wxALL + 3 + + wxVERTICAL + + + + wxEXPAND + 3 + + 2 + 2 + 0 + 0 + + + + + wxALL + 3 + + + -1 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + -1000 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + 1000 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + -1000 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + 1000 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + -1000 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + 1000 + 0 + + + + + + + + + wxALL + 3 + + wxVERTICAL + + + + wxEXPAND + 5 + + 2 + 2 + 0 + 0 + + + + + wxALL + 3 + + + 0 + + + + + wxEXPAND + 3 + 0,0 + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + + + + + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL|wxEXPAND + 3 + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 803,625 + Mission Specs + 1 + + wxVERTICAL + + + wxEXPAND + 5 + + 2 + 3 + 0 + 0 + + + + + wxALL + 3 + + wxVERTICAL + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALL|wxEXPAND + 0 + + 2 + 2 + 0 + 0 + 1 + 0 + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + 0 + + + + + wxALL|wxEXPAND + 3 + + Untitled + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + Someone + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + -1 + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 0 + + wxHORIZONTAL + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND|wxRIGHT + 2 + + + + 1 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 2 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 2 + + + 0 + + + + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 2 + + + 0 + + 1 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 2 + + 0 + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxEXPAND + 2 + + 0 + + 0 + + + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxSHAPED + 0 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + 0 + 0 + 999 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 3 + + + -1 + + + + + wxALL + 3 + + + 0 + 0 + -1 + 999 + + + + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 0 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT + 3 + + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + wxALIGN_LEFT|wxALL|wxEXPAND|wxSHAPED + 3 + + + + 0 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + + + + + wxALL + 3 + + wxVERTICAL + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 5 + + wxVERTICAL + + + wxALL + 3 + + + 0 + + + + + wxALL + 3 + + + 0 + + + + + + + wxEXPAND + 5 + + 2 + 3 + 0 + 0 + 2 + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 4 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT + 4 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL + 0 + + + -1 + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALIGN_CENTER_HORIZONTAL + 0 + + wxVERTICAL + + + wxALL + 3 + + + 0 + + + + + wxEXPAND + 5 + + wxHORIZONTAL + + + wxALIGN_CENTER|wxALL + 3 + + + 0 + + + + + wxALL + 3 + + + 0 + 45 + 0 + 999 + + + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 5 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + Combo! + + + + + + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + 0 + + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 5 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + 0 + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + + 70 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + Combo! + + + + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + wxALL + 3 + + wxVERTICAL + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + wxALL + 2 + + + 0 + + + + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + + wxEXPAND + 5 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxLEFT + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + 0 + + + + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND + 0 + + 2 + 2 + 0 + 0 + 1 + + + + wxALIGN_CENTER|wxALL|wxEXPAND + 3 + + + + 0 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + wxALIGN_CENTER|wxALL|wxEXPAND + 3 + + + + 0 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + + + + + + + wxALL|wxEXPAND + 5 + + wxVERTICAL + + + wxALL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + + 0 + + + + + wxALL + 5 + + + -1 + + + + + wxALL|wxEXPAND + 5 + + + + 0 + + + + + wxEXPAND + 5 + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 602,329 + Debriefing Editor + 1 + + wxHORIZONTAL + + + wxALIGN_TOP|wxALL|wxEXPAND + 3 + + wxVERTICAL + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + + + wxALIGN_LEFT|wxALL|wxEXPAND|wxTOP + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 250,200 + + + + + + + wxALIGN_TOP|wxALL|wxEXPAND + 3 + + wxVERTICAL + + + wxEXPAND|wxALL + 0 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + res/bmp00001.xpm + 0 + + + + + + + wxALIGN_LEFT|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 320,100 + + 0 + + + + + wxALIGN_LEFT|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + 320,100 + + 0 + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 334,150 + Shield System Editor + 1 + + wxVERTICAL + + + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + wxVERTICAL + + + + wxEXPAND|wxALL + 3 + + 0 + + + + + + wxALIGN_LEFT|wxALL + 3 + + + + 0 + + + + + wxALIGN_LEFT|wxALL + 3 + + + 0 + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + wxVERTICAL + + + + wxEXPAND|wxALL + 3 + + 0 + + + + + + wxALIGN_LEFT|wxALL + 3 + + + 0 + + + + + wxALIGN_LEFT|wxALL + 3 + + + 0 + + + + + + + + + wxEXPAND + 5 + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 380,311 + Command Briefing Editor + 1 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL|wxSHAPED + 3 + + wxVERTICAL + + + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_TOP|wxALL + 3 + + wxVERTICAL + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxLEFT|wxRIGHT + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + 5,5 + + + + wxALL|wxEXPAND + 1 + + wxVERTICAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + + + + + wxALIGN_LEFT|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + + 0 + + + + + wxEXPAND + 3 + + 2 + 4 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + <default> + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + none + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + res/bmp00001.xpm + 0 + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 206,162 + Set Global Ship Flags + 1 + + wxVERTICAL + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + wxVERTICAL + + + wxEXPAND|wxALL + 5 + + + 0 + + + + + wxEXPAND|wxALL + 5 + + + 0 + + + + + wxEXPAND|wxALL + 5 + + + 0 + + + + + wxEXPAND|wxALL + 5 + + + 0 + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 651,382 + Voice Acting Manager + 1 + + 2 + 2 + 0 + 0 + 0,1 + 0,1 + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALL + 3 + + wxVERTICAL + + + + wxEXPAND + 5 + + 2 + 2 + 0 + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 3 + + + 0 + + + + + + + + + wxALL + 3 + + wxHORIZONTAL + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + 0 + + + + + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + 0 + + 0 + + + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + + wxALL|wxEXPAND + 3 + + + + 0 + + + + + wxALL + 3 + + + 190 + + + + + + + wxALL|wxSHAPED + 3 + + + + 0 + + Everything + Just Command Briefings + Just Briefings + Just Debriefings + Just Messages + + 1 + + + + + wxEXPAND + 5 + 0,0 + + + + wxALL|wxEXPAND + 3 + + + 0 + + + + + + + + + 862,705 + #f0f0f0 + Campaign Editor + 1 + + wxHORIZONTAL + + + wxEXPAND + 3 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL|wxTOP + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + + + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + 0 + + single + multi coop + multi teams + + + + + + + + wxALIGN_LEFT|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + + 0 + + + + + wxALIGN_RIGHT|wxALL + 3 + + + + 0 + + + + + wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 50,-1 + 0 + 0 + 9 + + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND + 3 + + wxHORIZONTAL + + + wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM + 3 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL|wxLEFT|wxRIGHT|wxTOP + 3 + + + 0 + + + + + wxALL|wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT + 3 + + + 250,200 + + + + + + + wxALIGN_TOP|wxALL|wxEXPAND + 3 + + wxVERTICAL + + + wxALIGN_RIGHT|wxALL|wxEXPAND + 3 + + wxVERTICAL + + + + wxEXPAND|wxALL + 3 + + 100,-1 + + 0 + + + + + wxEXPAND|wxALL + 3 + + + 0 + + + + + wxEXPAND|wxALL + 3 + + + 0 + + + + + + + wxEXPAND|wxALL + 3 + + + 0 + + + + + wxEXPAND|wxLEFT|wxRIGHT + 3 + + + 0 + + + + + wxEXPAND|wxALL + 3 + + + 0 + + + + + + + + + wxEXPAND|wxALL + 3 + + + -1,50 + + 0 + + + + + wxALIGN_LEFT|wxALL + 3 + + + -1 + + + + + wxALL|wxEXPAND + 3 + + + -1,50 + + 0 + + + + + wxEXPAND + 5 + + 2 + 3 + 0 + 0 + 1 + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 3 + + + -1 + + + + + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 3 + + + 0 + + + + + wxALIGN_CENTER_VERTICAL|wxALL + 3 + + + 0 + + + + + + + + + wxEXPAND | wxALL + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wxWS_EX_BLOCK_EVENTS + 560,215 + About FRED2 + 1 + + wxVERTICAL + + + wxEXPAND + 2 + + 0 + 0 + + + + 0,0 + 10,1 + wxALL|wxLEFT|wxRIGHT + 15 + + res/V_fred.xpm + + + + 0,2 + 1,1 + wxALL + 3 + + + -1 + + + + 1,2 + 1,1 + wxALL + 3 + + + -1 + + + + 2,2 + 1,1 + wxEXPAND + 0 + 0,4 + + + 3,2 + 1,1 + wxALL + 3 + + + -1 + + + + 5,2 + 1,1 + wxALL + 0 + + + -1 + + + + 7,3 + 1,1 + wxEXPAND + 5 + 0,4 + + + 7,2 + 1,1 + wxEXPAND|wxSHAPED + 0 + + wxHORIZONTAL + + + wxALL + 3 + + + 0 + + + + + wxALL + 3 + + + 0 + + + + + wxALL + 3 + + + 0 + + + + + + + + + diff --git a/code/wxfred2/wxfred2.cpp b/code/wxfred2/wxfred2.cpp index 181460f6fc..5948dd4afe 100644 --- a/code/wxfred2/wxfred2.cpp +++ b/code/wxfred2/wxfred2.cpp @@ -20,6 +20,7 @@ #include #include "fredframe.h" #include "wxfred_xrc.h" +#include "mission.h" IMPLEMENT_APP(wxFRED2) @@ -27,8 +28,8 @@ bool wxFRED2::OnInit() { wxXmlResource::Get()->InitAllHandlers(); InitXmlResource(); - - FREDFrame *frame = new FREDFrame(_T("Untitled - FRED2_OPEN 3.6.5 - FreeSpace 2 Mission Editor"), 50, 50, 800, 600); + wxFREDMission* the_Mission = new wxFREDMission(); + FREDFrame *frame = new FREDFrame(_T("Untitled - FRED2_OPEN 3.6.5 - FreeSpace 2 Mission Editor"), 50, 50, 800, 600, the_Mission); SetTopWindow(frame); frame->Show(TRUE); diff --git a/configure.ac b/configure.ac index dc488f02fc..b92ae2b47c 100644 --- a/configure.ac +++ b/configure.ac @@ -35,6 +35,8 @@ AC_SUBST(CXXFLAGS) AC_SUBST(CFLAGS) AC_SUBST(LDFLAGS) +PKG_PROG_PKG_CONFIG() + dnl The configuration options dnl ------------------------- @@ -67,19 +69,6 @@ AC_ARG_ENABLE(speech, [fs2_speech=no], ) -AC_ARG_WITH(ogl-libs, - AC_HELP_STRING([--with-ogl-libs=DIR], - [Use OpenGL libraries from this directory]), - [fs2_ogl_libs="$withval"], - [fs2_ogl_libs=""], -) -AC_ARG_WITH(ogl-incs, - AC_HELP_STRING([--with-ogl-incs=DIR], - [Use OpenGL Includes from this directory]), - [fs2_ogl_incs="$withval"], - [fs2_ogl_incs=""], -) - AC_ARG_ENABLE(inferno, AC_HELP_STRING([--enable-inferno], [Make an Inferno build]), @@ -132,7 +121,7 @@ case "$target" in # linux echo "Using 64-bit Unix defines (for $host_os)" fs2_os_unix="yes" - D_CFLAGS="$D_CFLAGS -m64 -march=athlon64 -ansi -pedantic" + D_CFLAGS="$D_CFLAGS -m64 -march=athlon64 -ansi" D_CFLAGS="$D_CFLAGS -DLUA_USE_LINUX" ;; *-*-linux*) @@ -196,7 +185,7 @@ fi if test "$fs2_debug" = "yes" ; then AC_DEFINE([_DEBUG]) - D_CFLAGS="$D_CFLAGS -O0 -g -Wall -Wextra -Wno-unused-parameter -Wno-write-strings -Wshadow -funroll-loops -DLUA_USE_APICHECK" + D_CFLAGS="$D_CFLAGS -O0 -g -Wall -Wextra -Wno-unused-parameter -Wno-write-strings -Wshadow -funroll-loops" D_LDFLAGS="$D_LDFLAGS -g" if test "$fs2_fred" = "yes" ; then @@ -342,44 +331,11 @@ FS2_LDFLAGS=$FS2_LDFLAGS" $THEORA_LIBS" D_CFLAGS=$D_CFLAGS" $OGG_CFLAGS" FS2_LDFLAGS=$FS2_LDFLAGS" $OGG_LIBS" -dnl DirectX - Win32 only -if test "$fs2_os_win32" = "yes" ; then - FS2_CXXFLAGS=$FS2_CXXFLAGS" -I/c:/dxsdk/include" - FS2_LDFLAGS=$FS2_LDFLAGS" -L/c:/dxsdk/lib" -fi - -dnl libpng -FS2_LDFLAGS="$FS2_LDFLAGS -lpng" - -dnl OpenGL libs and CFLAGS -if test "$fs2_os_win32" = "yes" ; then - if test "x$fs2_ogl_libs" != "x" ; then - FS2_LDFLAGS="$FS2_LDFLAGS -L$fs2_ogl_libs -lopengl32 -lglu32" - else - FS2_LDFLAGS="$FS2_LDFLAGS -lopengl32 -lglu32" - fi -elif test "$fs2_os_unix" = "yes" ; then - if test "x$fs2_ogl_libs" != "x" ; then - FS2_LDFLAGS="$FS2_LDFLAGS -L$fs2_ogl_libs -lGL -lGLU" - else - FS2_LDFLAGS="$FS2_LDFLAGS -lGL -lGLU" - fi - if test "x$fs2_ogl_incs" != "x" ; then - FS2_CXXFLAGS="$FS2_CXXFLAGS -I$fs2_ogl_incs" - fi - AC_DEFINE([SCP_UNIX]) - AC_DEFINE([NO_DIRECT3D]) -elif test "$fs2_os_osx" = "yes" ; then - FS2_CXXFLAGS="$FS2_CXXFLAGS -I/System/Library/Frameworks/OpenGL.framework/Headers" - FS2_LDFLAGS="$FS2_LDFLAGS -framework OpenGL" - AC_DEFINE([SCP_UNIX]) - AC_DEFINE([NO_DIRECT3D]) - ## don't need the CFLAGS here if recent SDL is used -fi - dnl OpenAL if test "$fs2_os_unix" = "yes" ; then - FS2_LDFLAGS="$FS2_LDFLAGS -lopenal" + AM_PATH_OPENAL(:,AC_MSG_ERROR([*** OpenAL installation not found!])) + D_CFLAGS=$D_CFLAGS" $OPENAL_CFLAGS" + FS2_LDFLAGS=$FS2_LDFLAGS" $OPENAL_LIBS" elif test "$fs2_os_osx" = "yes" ; then FS2_LDFLAGS="$FS2_LDFLAGS -framework OpenAL" AC_CHECK_HEADER(/Library/Frameworks/OpenAL.framework/Headers/al.h, @@ -391,7 +347,63 @@ elif test "$fs2_os_osx" = "yes" ; then AC_MSG_ERROR([*** Cannot find OpenAL which is required! ***]))])]) fi -dnl OGG Vorbis +dnl DirectX - Win32 only +if test "$fs2_os_win32" = "yes" ; then + FS2_CXXFLAGS=$FS2_CXXFLAGS" -I/c:/dxsdk/include" + FS2_LDFLAGS=$FS2_LDFLAGS" -L/c:/dxsdk/lib" +fi + +dnl libpng +FS2_LDFLAGS="$FS2_LDFLAGS -lpng" + +dnl OpenGL libs and CFLAGS +if test "$fs2_os_win32" = "yes" ; then + if test "x$GL_LIBS" != "x" ; then + FS2_LDFLAGS="$FS2_LDFLAGS -L$GL_LIBS -lopengl32 -lglu32" + else + FS2_LDFLAGS="$FS2_LDFLAGS -lopengl32 -lglu32" + fi +elif test "$fs2_os_unix" = "yes" ; then + AM_PATH_OPENGL(:,AC_MSG_ERROR([*** OpenGL installation not found!])) + D_CFLAGS=$D_CFLAGS" $OPENGL_CFLAGS" + FS2_LDFLAGS=$FS2_LDFLAGS" $OPENGL_LIBS" + AC_DEFINE([SCP_UNIX]) + AC_DEFINE([NO_DIRECT3D]) +elif test "$fs2_os_osx" = "yes" ; then + FS2_CXXFLAGS="$FS2_CXXFLAGS -I/System/Library/Frameworks/OpenGL.framework/Headers" + FS2_LDFLAGS="$FS2_LDFLAGS -framework OpenGL" + AC_DEFINE([SCP_UNIX]) + AC_DEFINE([NO_DIRECT3D]) + ## don't need the CFLAGS here if recent SDL is used +fi + +dnl PNG libs +PKG_CHECK_MODULES([PNG], [libpng >= 1.2.20]) +D_CFLAGS=$D_CFLAGS" $PNG_CFLAGS" +FS2_LDFLAGS=$FS2_LDFLAGS" $PNG_LIBS" + +dnl LUA +## Checking for lua.pc and if that fails lua5.1.pc +PKG_CHECK_MODULES( + [LUA], + [lua >= 5.1.3], + [], ## do nothing special + [PKG_CHECK_MODULES([LUA], [lua5.1 >= 5.1.3], [])]) +D_CFLAGS=$D_CFLAGS" $LUA_CFLAGS" +FS2_LDFLAGS=$FS2_LDFLAGS" $LUA_LIBS" + +dnl JPEG +AC_CHECK_LIB(jpeg, jpeg_start_decompress, + [AC_CHECK_HEADER(jpeglib.h, , + dnl NOTE: this is failure + AC_MSG_ERROR([*** JPEG installation missing or broken!]) + )], + AC_MSG_ERROR([*** JPEG installation missing or broken!]) +) +FS2_LDFLAGS=$FS2_LDFLAGS" -ljpeg" + + +dnl OGG Vorbis/Theora (static libs) if test "$fs2_os_unix" = "yes" ; then if test "x$fs2_static_ogg" != "x" ; then FS2_LIBS="$FS2_LIBS $fs2_static_ogg/libtheora.a" @@ -437,18 +449,15 @@ LIBS="$FS2_LIBS" dnl The makefiles we create -AC_OUTPUT([Makefile libjpeg/Makefile lua/Makefile code/Makefile]) +AC_OUTPUT([Makefile code/Makefile]) echo echo echo Configure options: echo -if test "x$fs2_ogl_libs" != "x" ; then - echo Using OpenGL libs from . : $fs2_ogl_libs -fi -if test "x$fs2_ogl_incs" != "x" ; then - echo Using OpenGL includes from . : $fs2_ogl_incs +if test "x$GL_LIBS" != "x" ; then + echo Using OpenGL libs from . : $GL_LIBS fi if test "x$fs2_static_jpeg" != "x" ; then echo Using libjpeg.a from ... : $fs2_static_jpeg diff --git a/libjpeg/Makefile.am b/libjpeg/Makefile.am deleted file mode 100644 index ea229374b6..0000000000 --- a/libjpeg/Makefile.am +++ /dev/null @@ -1,86 +0,0 @@ -## libjpeg/Makefile.am for fs2_open -## -## $Id: Makefile.am,v 1.4 2005-07-07 16:36:58 taylor Exp $ - - -EXTRA_DIST = README - - -# D_ variants are defaults and should always be used -AM_CFLAGS = @D_CFLAGS@ -Wno-main -AM_LDFLAGS = @D_LDFLAGS@ - -noinst_LIBRARIES = libjpeg.a - -############################################################################### -## -## Begin JPEG library -## - -libjpeg_a_SOURCES = \ - cderror.h \ - cdjpeg.h \ - jcapimin.c \ - jcapistd.c \ - jccoefct.c \ - jccolor.c \ - jcdctmgr.c \ - jchuff.c \ - jchuff.h \ - jcinit.c \ - jcmainct.c \ - jcmarker.c \ - jcmaster.c \ - jconfig_lnx.h \ - jconfig_vc.h \ - jcomapi.c \ - jcparam.c \ - jcphuff.c \ - jcprepct.c \ - jcsample.c \ - jctrans.c \ - jdapimin.c \ - jdapistd.c \ - jdatadst.c \ - jdatasrc.c \ - jdcoefct.c \ - jdcolor.c \ - jdct.h \ - jddctmgr.c \ - jdhuff.c \ - jdhuff.h \ - jdinput.c \ - jdmainct.c \ - jdmarker.c \ - jdmaster.c \ - jdmerge.c \ - jdphuff.c \ - jdpostct.c \ - jdsample.c \ - jdtrans.c \ - jerror.c \ - jerror.h \ - jfdctflt.c \ - jfdctfst.c \ - jfdctint.c \ - jidctflt.c \ - jidctfst.c \ - jidctint.c \ - jidctred.c \ - jinclude.h \ - jmemansi.c \ - jmemmgr.c \ - jmemsys.h \ - jmorecfg.h \ - jpegint.h \ - jpeglib.h \ - jquant1.c \ - jquant2.c \ - jutils.c \ - jversion.h \ - transupp.h - -## -## End JPEG library -## -############################################################################### diff --git a/lua/Makefile.am b/lua/Makefile.am deleted file mode 100644 index 52cb0ff9a3..0000000000 --- a/lua/Makefile.am +++ /dev/null @@ -1,77 +0,0 @@ -## lua/Makefile.am for fs2_open -## -## $Id: Makefile.am,v 1.2 2007-01-07 12:39:30 taylor Exp $ - - -# D_ variants are defaults and should always be used -AM_CFLAGS = @D_CFLAGS@ -AM_LDFLAGS = @D_LDFLAGS@ - -noinst_LIBRARIES = liblua.a - -############################################################################### -## -## Begin Lua library -## - -liblua_a_SOURCES = \ - lapi.c \ - lapi.h \ - lauxlib.c \ - lauxlib.h \ - lbaselib.c \ - lcode.c \ - lcode.h \ - ldblib.c \ - ldebug.c \ - ldebug.h \ - ldo.c \ - ldo.h \ - ldump.c \ - lfunc.c \ - lfunc.h \ - lgc.c \ - lgc.h \ - linit.c \ - liolib.c \ - llex.c \ - llex.h \ - llimits.h \ - lmathlib.c \ - lmem.c \ - lmem.h \ - loadlib.c \ - lobject.c \ - lobject.h \ - lopcodes.c \ - lopcodes.h \ - loslib.c \ - lparser.c \ - lparser.h \ - lstate.c \ - lstate.h \ - lstring.c \ - lstring.h \ - lstrlib.c \ - ltable.c \ - ltable.h \ - ltablib.c \ - ltests.c \ - ltm.c \ - ltm.h \ - luaconf.h \ - lua.h \ - lua.c \ - lualib.h \ - lundump.c \ - lundump.h \ - lvm.c \ - lvm.h \ - lzio.c \ - lzio.h \ - print.c - -## -## End Lua library -## -############################################################################### diff --git a/oggvorbis/lib/ogg_static.lib b/oggvorbis/lib/ogg_static.lib index 142794eef53d27da5647b8b64766aefcd786880a..bd66ac94b7d547241440128fd89a7822282c172e 100644 GIT binary patch delta 9644 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 DWahvL diff --git a/oggvorbis/lib/ogg_static_d.lib b/oggvorbis/lib/ogg_static_d.lib index 9c3600d59865c9d58c764bcaec084f872776efa8..e7afe8702c762b73bf35736ab8ba5b7a3db00681 100644 GIT binary patch literal 64190 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 literal 59072 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 LMN<}w<@x^rJ)hb2 diff --git a/oggvorbis/lib/theora_static.lib b/oggvorbis/lib/theora_static.lib index 9fb09cc69bd49a332efdcbf201c3196d231c534f..d62cddd5ddf23551a48ee8b5601ee41a3976c3d2 100644 GIT binary patch literal 260528 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 Y;yHUc>x+USRIB><=k+KMk|I{{e^gLUnf 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

uSDjMx@|<5ZxLXNSYW@C=7i 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 Ju!R$}{|hjqhS2~3 delta 60812 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 UBjyV_#k1oCbGUZTXUehv0eW+S;{X5v diff --git a/oggvorbis/lib/theora_static_d.lib b/oggvorbis/lib/theora_static_d.lib index f0597b083aab589f8fc75cc36b3b6f4bb10c6b0d..4e2c9e84439fdb3631473d8f933de1ba622fe3fd 100644 GIT binary patch literal 619478 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

(r{*-G95RvMl(koIY)(ll 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

HJ_Nk>8^!lzM2H-zKS`+XrB5wg}7B3ZOUbjm*i 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

2U8a4`*Ka`r9vPf!2Jd-ESM> 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 E0TUv7S^xk5 literal 381082 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 BMa}>K diff --git a/oggvorbis/lib/vorbis_static.lib b/oggvorbis/lib/vorbis_static.lib index f0bb66e4aebef8bca82cbb6b75f047029fda2065..e2d2c9c377f67b61ad914113561a11ca7d3106c1 100644 GIT binary patch delta 60821 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

    WtjysMKaRw=R$r#E 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 D!jA{% delta 133746 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 literal 262988 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�Aeq@0hu`lQI|Irq9K~+_}I)UYE_q`jvAL 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

    BzoE~jbr+)O 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 literal 519088 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�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 diff --git a/projects/MSVC_2005/Fred2.vcproj b/projects/MSVC_2005/Fred2.vcproj index 728b68b4df..5de63a76ef 100644 --- a/projects/MSVC_2005/Fred2.vcproj +++ b/projects/MSVC_2005/Fred2.vcproj @@ -30,8 +30,8 @@ - - - - - - diff --git a/projects/MSVC_2008/Fred2.vcproj b/projects/MSVC_2008/Fred2.vcproj index 2254fac962..36959028c7 100644 --- a/projects/MSVC_2008/Fred2.vcproj +++ b/projects/MSVC_2008/Fred2.vcproj @@ -1570,6 +1570,10 @@ RelativePath="..\..\code\fred2\shiptexturesdlg.cpp" > + + @@ -1827,6 +1831,10 @@ RelativePath="..\..\code\fred2\shiptexturesdlg.h" > + + diff --git a/projects/MSVC_2008/code.vcproj b/projects/MSVC_2008/code.vcproj index 33b9a113c5..4a8226cf97 100644 --- a/projects/MSVC_2008/code.vcproj +++ b/projects/MSVC_2008/code.vcproj @@ -1904,6 +1904,10 @@ + + @@ -3601,18 +3605,6 @@ > - - - - - - diff --git a/projects/MSVC_2008/zlib.vcproj b/projects/MSVC_2008/zlib.vcproj index 638aa70e07..aef0fb4611 100644 --- a/projects/MSVC_2008/zlib.vcproj +++ b/projects/MSVC_2008/zlib.vcproj @@ -1056,347 +1056,6 @@ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/MSVC_2010/Fred2.vcxproj b/projects/MSVC_2010/Fred2.vcxproj new file mode 100644 index 0000000000..c8696631c7 --- /dev/null +++ b/projects/MSVC_2010/Fred2.vcxproj @@ -0,0 +1,1220 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {92C8C611-75AA-4BD7-9B73-584822AAAEB5} + Fred2 + MFCProj + + + + Application + Static + NotSet + true + + + Application + Static + NotSet + true + + + Application + Static + NotSet + true + + + Application + Static + NotSet + true + + + Application + Static + NotSet + true + + + Application + Static + NotSet + true + + + Application + Static + NotSet + + + Application + Static + NotSet + + + Application + Static + NotSet + + + Application + Static + NotSet + + + Application + Static + NotSet + + + Application + Static + NotSet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + fred2_open_3_6_13d_INF_SSE2 + fred2_open_3_6_13d + fred2_open_3_6_13d_INF + fred2_open_3_6_13d_INF_SSE + fred2_open_3_6_13d_SSE2 + fred2_open_3_6_13d_SSE2 + fred2_open_3_6_13r + fred2_open_3_6_13r_INF + fred2_open_3_6_13r_INF_SSE + fred2_open_3_6_13r_INF_SSE2 + fred2_open_3_6_13r_SSE + fred2_open_3_6_13r_SSE2 + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib;%(AdditionalDependencies) + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;FRED;WINVER=0x410;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + + + _DEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;FRED;WINVER=0x500;_WIN32_WINNT=0x500;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + OldStyle + + + NDEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + wsock32.lib;winmm.lib;msacm32.lib;vfw32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;code.lib;libjpeg.lib;liblua.lib;libpng.lib;zlib.lib + $(OutDir)\$(TargetFileName) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + false + + + MachineX86 + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/Fred2.vcxproj.filters b/projects/MSVC_2010/Fred2.vcxproj.filters new file mode 100644 index 0000000000..41331f5d1c --- /dev/null +++ b/projects/MSVC_2010/Fred2.vcxproj.filters @@ -0,0 +1,520 @@ + + + + + {aca57a9c-6673-43b0-9f4b-88f108732502} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {6278499e-b4a9-478c-9518-6181587df03e} + h;hpp;hxx;hm;inl + + + {2807b250-bdd3-4a89-96d7-df52eec4ca5c} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/projects/MSVC_2010/Freespace2.sln b/projects/MSVC_2010/Freespace2.sln new file mode 100644 index 0000000000..55722065cf --- /dev/null +++ b/projects/MSVC_2010/Freespace2.sln @@ -0,0 +1,219 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Freespace2", "Freespace2.vcxproj", "{A8030FA3-CEAB-4297-99E3-CD2CFB89830B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg", "libjpeg.vcxproj", "{42A241F2-7996-4AAF-8491-FB885E2DC37D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblua", "liblua.vcxproj", "{332C7037-05BE-4202-93AC-182F1A2DF2AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "libpng.vcxproj", "{86C01EAC-2406-40A7-B744-AA858B7607A9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcxproj", "{A2AFF4A4-D3A1-4BD4-86D2-673592598C38}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "code", "code.vcxproj", "{C55F5706-E947-41EF-A3E8-6D711CD4ECD8}" + ProjectSection(ProjectDependencies) = postProject + {332C7037-05BE-4202-93AC-182F1A2DF2AC} = {332C7037-05BE-4202-93AC-182F1A2DF2AC} + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38} = {A2AFF4A4-D3A1-4BD4-86D2-673592598C38} + {86C01EAC-2406-40A7-B744-AA858B7607A9} = {86C01EAC-2406-40A7-B744-AA858B7607A9} + {42A241F2-7996-4AAF-8491-FB885E2DC37D} = {42A241F2-7996-4AAF-8491-FB885E2DC37D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Fred2", "Fred2.vcxproj", "{92C8C611-75AA-4BD7-9B73-584822AAAEB5}" + ProjectSection(ProjectDependencies) = postProject + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8} = {C55F5706-E947-41EF-A3E8-6D711CD4ECD8} + {332C7037-05BE-4202-93AC-182F1A2DF2AC} = {332C7037-05BE-4202-93AC-182F1A2DF2AC} + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38} = {A2AFF4A4-D3A1-4BD4-86D2-673592598C38} + {86C01EAC-2406-40A7-B744-AA858B7607A9} = {86C01EAC-2406-40A7-B744-AA858B7607A9} + {42A241F2-7996-4AAF-8491-FB885E2DC37D} = {42A241F2-7996-4AAF-8491-FB885E2DC37D} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Inferno SSE|Win32 = Debug Inferno SSE|Win32 + Debug Inferno SSE2|Win32 = Debug Inferno SSE2|Win32 + Debug Inferno|Win32 = Debug Inferno|Win32 + Debug SSE|Win32 = Debug SSE|Win32 + Debug SSE2|Win32 = Debug SSE2|Win32 + Debug|Win32 = Debug|Win32 + Release Inferno SSE|Win32 = Release Inferno SSE|Win32 + Release Inferno SSE2|Win32 = Release Inferno SSE2|Win32 + Release Inferno|Win32 = Release Inferno|Win32 + Release SSE|Win32 = Release SSE|Win32 + Release SSE2|Win32 = Release SSE2|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug|Win32.ActiveCfg = Debug|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Debug|Win32.Build.0 = Debug|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release|Win32.ActiveCfg = Release|Win32 + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B}.Release|Win32.Build.0 = Release|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug|Win32.ActiveCfg = Debug|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Debug|Win32.Build.0 = Debug|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release|Win32.ActiveCfg = Release|Win32 + {42A241F2-7996-4AAF-8491-FB885E2DC37D}.Release|Win32.Build.0 = Release|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug|Win32.ActiveCfg = Debug|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Debug|Win32.Build.0 = Debug|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release|Win32.ActiveCfg = Release|Win32 + {332C7037-05BE-4202-93AC-182F1A2DF2AC}.Release|Win32.Build.0 = Release|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug|Win32.ActiveCfg = Debug|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Debug|Win32.Build.0 = Debug|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release|Win32.ActiveCfg = Release|Win32 + {86C01EAC-2406-40A7-B744-AA858B7607A9}.Release|Win32.Build.0 = Release|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug|Win32.ActiveCfg = Debug|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Debug|Win32.Build.0 = Debug|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release|Win32.ActiveCfg = Release|Win32 + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38}.Release|Win32.Build.0 = Release|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug|Win32.ActiveCfg = Debug|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Debug|Win32.Build.0 = Debug|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release|Win32.ActiveCfg = Release|Win32 + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8}.Release|Win32.Build.0 = Release|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno SSE|Win32.ActiveCfg = Debug Inferno SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno SSE|Win32.Build.0 = Debug Inferno SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno SSE2|Win32.ActiveCfg = Debug Inferno SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno SSE2|Win32.Build.0 = Debug Inferno SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno|Win32.ActiveCfg = Debug Inferno|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug Inferno|Win32.Build.0 = Debug Inferno|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug SSE|Win32.ActiveCfg = Debug SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug SSE|Win32.Build.0 = Debug SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug|Win32.ActiveCfg = Debug|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Debug|Win32.Build.0 = Debug|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno SSE|Win32.ActiveCfg = Release Inferno SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno SSE|Win32.Build.0 = Release Inferno SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno SSE2|Win32.ActiveCfg = Release Inferno SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno SSE2|Win32.Build.0 = Release Inferno SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno|Win32.ActiveCfg = Release Inferno|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release Inferno|Win32.Build.0 = Release Inferno|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release SSE|Win32.ActiveCfg = Release SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release SSE|Win32.Build.0 = Release SSE|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release|Win32.ActiveCfg = Release|Win32 + {92C8C611-75AA-4BD7-9B73-584822AAAEB5}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/projects/MSVC_2010/Freespace2.vcxproj b/projects/MSVC_2010/Freespace2.vcxproj new file mode 100644 index 0000000000..17925ddf5e --- /dev/null +++ b/projects/MSVC_2010/Freespace2.vcxproj @@ -0,0 +1,1157 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {A8030FA3-CEAB-4297-99E3-CD2CFB89830B} + Freespace2 + + + + Application + false + NotSet + true + + + Application + false + NotSet + true + + + Application + false + NotSet + true + + + Application + false + NotSet + true + + + Application + false + NotSet + true + + + Application + false + NotSet + true + + + Application + false + NotSet + + + Application + false + NotSet + + + Application + false + NotSet + + + Application + false + NotSet + + + Application + false + NotSet + + + Application + false + NotSet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + fs2_open_3_6_13d + fs2_open_3_6_13r + fs2_open_3_6_13d_INF + fs2_open_3_6_13d_INF_SSE + fs2_open_3_6_13d_INF_SSE2 + fs2_open_3_6_13d_SSE + fs2_open_3_6_13d_SSE2 + fs2_open_3_6_13r_INF + fs2_open_3_6_13r_INF_SSE + fs2_open_3_6_13r_INF_SSE2 + fs2_open_3_6_13r_SSE + fs2_open_3_6_13r_SSE2 + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + false + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + true + false + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;ole32.lib;advapi32.lib;gdi32.lib;user32.lib;%(AdditionalDependencies) + NotSet + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libcmt.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + false + + + MachineX86 + + + true + + + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + ProgramDatabase + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + ProgramDatabase + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + ProgramDatabase + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;INF_BUILD;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + ProgramDatabase + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + true + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Copying build... + copy /y "$(TargetPath)" "$(FS2PATH)\$(TargetFileName)" + + $(FS2PATH)\$(TargetFileName);%(Outputs) + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)$(ProjectName).tlb + + + + + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;USE_OPENAL;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level2 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;_VC08;_SSE2;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;vfw32.lib;msacm32.lib;comctl32.lib;openal32.lib;ogg_static.lib;vorbis_static.lib;vorbisfile_static.lib;theora_static.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(Configuration);../../oggvorbis/lib;../../openal/libs/win32;../../openal/libs/win64;%(AdditionalLibraryDirectories) + false + false + libc.lib;libcd.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + true + $(TargetDir)$(TargetName).pdb + true + $(TargetDir)$(TargetName).map + Windows + UseLinkTimeCodeGeneration + false + + + MachineX86 + + + "$(IntDir)*.sbr" %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + {c55f5706-e947-41ef-a3e8-6d711cd4ecd8} + false + + + {42a241f2-7996-4aaf-8491-fb885e2dc37d} + false + + + {332c7037-05be-4202-93ac-182f1a2df2ac} + false + + + {86c01eac-2406-40a7-b744-aa858b7607a9} + false + + + {a2aff4a4-d3a1-4bd4-86d2-673592598c38} + false + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/code.vcxproj b/projects/MSVC_2010/code.vcxproj new file mode 100644 index 0000000000..01faf72e6e --- /dev/null +++ b/projects/MSVC_2010/code.vcxproj @@ -0,0 +1,1343 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {C55F5706-E947-41EF-A3E8-6D711CD4ECD8} + code + + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level4 + true + EditAndContinue + NDEBUG;%(UndefinePreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + $(OutDir)code.lib + true + %(IgnoreSpecificDefaultLibraries) + + + + %(AdditionalOptions) + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;INF_BUILD;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + ../../code;../../libjpeg;../../libpng;../../lua;../../oggvorbis/include;../../openal/include;../../zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;PDB_DEBUGGING;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + + + _DEBUG;%(UndefinePreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)code.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + "%(RootDir)%(Directory)gc" "%(RootDir)%(Directory)%(Filename)" +"%(RootDir)%(Directory)gc" /h "%(RootDir)%(Directory)grammar.h" "%(RootDir)%(Directory)%(Filename)" + + %(RootDir)%(Directory)phrases.cfg;%(RootDir)%(Directory)grammar.h;%(Outputs) + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/code.vcxproj.filters b/projects/MSVC_2010/code.vcxproj.filters new file mode 100644 index 0000000000..51bf7f5a44 --- /dev/null +++ b/projects/MSVC_2010/code.vcxproj.filters @@ -0,0 +1,1873 @@ + + + + + {16293009-1d93-484a-846f-dcb07316547c} + + + {271f0e62-ae8d-45d5-ae5a-ebb16d5ca6c4} + + + {a7e43a85-dd31-4d09-90f4-eb5e09e61bb9} + + + {8b831318-1881-4d35-8fba-27d3b19c4bdc} + + + {bc1db3dd-3a3a-4cfa-a937-e506937e6169} + + + {6dc2d54c-d2a1-4173-89e6-1708cee59f27} + + + {28708851-9642-4a48-ba3c-73a7e437f2fa} + + + {58ee2276-6169-435a-85b8-9023bbfba863} + + + {4ace400e-31f1-4939-8b0d-6cb7534fbed7} + + + {1d2746e4-3e3c-433e-aeab-e85bf0085e0d} + + + {2f7f7195-f66a-46a0-bf1d-fdd7de709d3e} + + + {30665de6-7ec7-42b4-b6de-7da88828aba0} + + + {fd4f39a4-4486-4b3f-ba06-01ce340bb52d} + + + {302080fd-4351-4e50-b564-de2eb2388460} + + + {2722fbe3-8a1f-4c4f-ac44-a19aebe88fba} + + + {097357e4-f580-4ff6-a66e-2c79841209e1} + + + {4d88e59d-0e24-401a-9bba-677103b42016} + + + {05d8b62e-5a58-4e2a-ac4f-01d1a77c8924} + + + {6a02bc1e-e658-42a0-b3a7-1b8705d26450} + + + {981d4713-50cf-427a-a9ac-5fbf6bcb2505} + + + {6e59147f-314d-4731-845f-3f1d2378e160} + + + {de4026e1-341e-4653-90dc-efb23b8d945e} + + + {3046400a-cda3-40a4-be0b-0be663e67af7} + + + {b4451db7-ea7b-4ac0-ba7a-874a9c89bd9d} + + + {38f64747-51aa-4348-a5d0-dac6143ca14e} + + + {7748e888-fae3-47a1-a255-5918f158993f} + + + {3a949639-d54c-47c6-92fe-2d9890a46c18} + + + {6f93a9a6-6fd3-4afd-b8e2-8a23beea1b41} + + + {ef96ebc9-f803-4351-9769-8b733369a0ec} + + + {d6cee94b-1134-469f-9ecc-9590848bf934} + + + {1d27ba41-63dc-41d6-8e8b-96bbcdd8e746} + + + {b52d54f8-32fa-4429-8b6d-224242ec8314} + + + {57556725-ebe3-42cf-a8d7-91b1be6eb1b6} + + + {e3454afb-be12-45af-9f07-7c6a1f80a28f} + + + {53780bee-e6b6-4cbd-a348-89ede0a81e98} + + + {46757c9d-1c64-4f83-b3d9-eab82e0e0f11} + + + {75adf504-b9f8-4926-af08-9afdf594dde8} + + + {b16b94b6-a253-4020-868a-0d6a3150ced7} + + + {046f682e-1fa8-4318-ac68-7e61801ed9a8} + + + {73764146-6133-4a00-9463-532184af6694} + + + {9db79e68-6640-4232-9f4c-7811fcd113f4} + + + {a46119c3-864f-48b2-8830-d2e9dbc8f9bc} + + + {72395cf4-a4d5-4414-8169-18325390c726} + + + {4e490ec4-3d32-4544-8b4f-c3b3c9daf08f} + + + {4e3a7c4e-b208-4f65-b68b-6088762f1549} + + + {ea046106-a870-4c3b-86c7-aca70ee2c79f} + + + {efcb428f-2785-4284-9b38-444976158c42} + + + {d09fb706-57c8-4486-96eb-cda09ebe9fd7} + + + {d7c86572-8f03-49cb-8a32-41aecb5d50b9} + + + {789075d9-5184-430c-805e-6eee25ac385f} + + + {a9dd5287-17a3-4c92-a8ec-49325c3964f2} + + + {c965279b-d0c5-445e-b188-4689a7260690} + + + {32108f5a-45a1-439b-9896-730018077ae5} + + + {25c68a5e-5388-4000-9e50-06969c08876c} + + + {cc1e07e9-5157-4df2-b909-5918a92fb0ce} + + + {4b6dadcf-c79a-45df-a025-411a39d9e0fa} + + + {0f5c779b-0b8b-48af-9b0b-570d6e2b5e9c} + + + {a398cd63-314d-40b6-8873-ddf4ff3f4fc9} + + + {8bc44419-7657-4c95-8125-85fdbe456685} + + + {9ecb8211-7db5-4b2f-bf0f-502f3c1b2341} + + + {ec188d39-3334-4d89-bc36-dde4b7815c42} + + + {4feafd16-d55a-4ce8-b2a7-31ea81d03b2b} + + + {eaaf5609-a655-4b46-95b4-bee16c341561} + + + {ab2a00a5-8e90-4bec-ba37-9ba23bfc53cd} + + + {53d524f2-cb9c-4b53-a547-329b308436f1} + + + {1b375441-5abe-4fff-8f94-f88efdb84d9a} + + + {15b5cbd5-0511-43d9-b151-5283e6e67bb7} + + + {34eefea3-a25d-40cd-8198-13c48ad8a6eb} + + + + + AI + + + AI + + + AI + + + AI + + + AI + + + AI + + + Anim + + + Anim + + + Asteroid + + + Bmpman + + + Camera + + + CFile + + + CFile + + + CFile + + + CFile + + + CMeasure + + + ControlConfig + + + ControlConfig + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Debris + + + DebugConsole + + + DebugConsole + + + DebugConsole + + + Fireball + + + Fireball + + + GameHelp + + + GameHelp + + + GameSequence + + + GameSnd + + + GameSnd + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + Graphics + + + Graphics + + + Graphics\SoftwareGr + + + Graphics\SoftwareGr + + + Graphics\SoftwareGr + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Graphics\OpenGLGr\OpenGL CPPs + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + JumpNode + + + Lab + + + Lab + + + Lighting + + + Math + + + Math + + + Math + + + Math + + + Math + + + Math + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + Model + + + Model + + + Model + + + Model + + + Model + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Observer + + + OsApi + + + OsApi + + + OsApi + + + OsApi + + + OsApi + + + Palman + + + Parse + + + Parse + + + Parse + + + Parse + + + Parse + + + Particle + + + PcxUtils + + + Physics + + + Playerman + + + Playerman + + + Popup + + + Popup + + + Radar + + + Radar + + + Radar + + + Render + + + Render + + + Render + + + Render + + + Render + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound\ogg + + + Starfield + + + Starfield + + + Starfield + + + Stats + + + Stats + + + Stats + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Ui + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Nebula + + + Nebula + + + Localization + + + Localization + + + TgaUtils + + + Demo + + + InetFile + + + InetFile + + + InetFile + + + ExceptionHandler + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Decals + + + ddsutils + + + pngutils + + + Cmdline + + + fs2netd + + + fs2netd + + + fs2netd + + + Species_Defs + + + jpgutils + + + Autopilot + + + iff_defs + + + ExternalDLL + + + + + AI + + + AI + + + AI + + + AI + + + AI + + + AI + + + Anim + + + Anim + + + Asteroid + + + Bmpman + + + Bmpman + + + Camera + + + CFile + + + CFile + + + CFile + + + CMeasure + + + ControlConfig + + + Cutscene + + + Cutscene + + + Cutscene + + + Cutscene + + + Debris + + + DebugConsole + + + DebugConsole + + + DirectX + + + DirectX + + + DirectX + + + DirectX + + + DirectX + + + DirectX + + + Fireball + + + GameHelp + + + GameHelp + + + GameSequence + + + GameSnd + + + GameSnd + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + GlobalIncs + + + Graphics + + + Graphics + + + Graphics + + + Graphics + + + Graphics\SoftwareGr + + + Graphics\SoftwareGr + + + Graphics\SoftwareGr + + + Graphics\SoftwareGr + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Graphics\OpenGLGr\OpenGL Headers + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Hud + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + Io + + + JumpNode + + + Lab + + + Lab + + + Lighting + + + Math + + + Math + + + Math + + + Math + + + Math + + + Math + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + MenuUI + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + Mission + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + MissionUI + + + Model + + + Model + + + Model + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Object + + + Observer + + + OsApi + + + OsApi + + + OsApi + + + OsApi + + + Palman + + + Parse + + + Parse + + + Parse + + + Parse + + + Parse + + + Particle + + + PcxUtils + + + Physics + + + Playerman + + + Playerman + + + Popup + + + Popup + + + Radar + + + Radar + + + Radar + + + Render + + + Render + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Ship + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound + + + Sound\ogg + + + Starfield + + + Starfield + + + Starfield + + + Stats + + + Stats + + + Stats + + + Ui + + + Ui + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Weapon + + + Nebula + + + Nebula + + + Localization + + + Localization + + + TgaUtils + + + Demo + + + InetFile + + + InetFile + + + InetFile + + + ExceptionHandler + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Network + + + Decals + + + ddsutils + + + pngutils + + + Cmdline + + + fs2netd + + + fs2netd + + + fs2netd + + + fs2netd + + + Species_Defs + + + jpgutils + + + Autopilot + + + iff_defs + + + ExternalDLL + + + ExternalDLL + + + Math + + + + + DirectX + + + DirectX + + + DirectX + + + + + Sound + + + \ No newline at end of file diff --git a/projects/MSVC_2010/libjpeg.vcxproj b/projects/MSVC_2010/libjpeg.vcxproj new file mode 100644 index 0000000000..9d95ca6e76 --- /dev/null +++ b/projects/MSVC_2010/libjpeg.vcxproj @@ -0,0 +1,728 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {42A241F2-7996-4AAF-8491-FB885E2DC37D} + libjpeg + + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + true + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + _LIB;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + NotSet + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + NotSet + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libjpeg.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/libjpeg.vcxproj.filters b/projects/MSVC_2010/libjpeg.vcxproj.filters new file mode 100644 index 0000000000..8ecc97f415 --- /dev/null +++ b/projects/MSVC_2010/libjpeg.vcxproj.filters @@ -0,0 +1,197 @@ + + + + + {0f620cf7-b3a0-4252-ba5b-2f6cda8ee6a7} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {a2765029-b843-417d-80cc-3d16ca4b295f} + h;hpp;hxx;hm;inl + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/projects/MSVC_2010/liblua.vcxproj b/projects/MSVC_2010/liblua.vcxproj new file mode 100644 index 0000000000..16fc98965f --- /dev/null +++ b/projects/MSVC_2010/liblua.vcxproj @@ -0,0 +1,734 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {332C7037-05BE-4202-93AC-182F1A2DF2AC} + liblua + + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + false + true + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + StaticLibrary + false + NotSet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + MaxSpeed + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + /MP %(AdditionalOptions) + Full + AnySuitable + true + Speed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + + + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)liblua.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/liblua.vcxproj.filters b/projects/MSVC_2010/liblua.vcxproj.filters new file mode 100644 index 0000000000..a5435e6568 --- /dev/null +++ b/projects/MSVC_2010/liblua.vcxproj.filters @@ -0,0 +1,185 @@ + + + + + {f96ab5ae-73ab-4e20-94bb-a5cba4738a2d} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {80036b76-a8c2-4086-b04c-da7307a54367} + h;hpp;hxx;hm;inl + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/projects/MSVC_2010/libpng.vcxproj b/projects/MSVC_2010/libpng.vcxproj new file mode 100644 index 0000000000..7ec1e6debc --- /dev/null +++ b/projects/MSVC_2010/libpng.vcxproj @@ -0,0 +1,724 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {86C01EAC-2406-40A7-B744-AA858B7607A9} + libpng + + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + ..\..\zlib;%(AdditionalIncludeDirectories) + PNG_DEBUG=1;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + MaxSpeed + AnySuitable + true + Speed + true + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + false + Default + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + + + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + MaxSpeed + AnySuitable + true + Speed + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + false + Default + MultiThreaded + false + false + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + + + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + true + ..\..\zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + false + Default + MultiThreaded + false + false + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + + + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\..;%(AdditionalIncludeDirectories) + + + $(OutDir)libpng.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + + + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + true + %(PreprocessorDefinitions) + \SCP\Builds\Trunk\fs2_open\libpng\scripts;%(AdditionalIncludeDirectories) + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/libpng.vcxproj.filters b/projects/MSVC_2010/libpng.vcxproj.filters new file mode 100644 index 0000000000..87735485dc --- /dev/null +++ b/projects/MSVC_2010/libpng.vcxproj.filters @@ -0,0 +1,82 @@ + + + + + {8981e5df-9c92-47b2-a390-fe7196f3d2f2} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {3c6acdc9-079d-4763-8283-b313335fced5} + h;hpp;hxx;hm;inl + + + {2f20c5a6-4182-46bb-8e64-1cfe7d633bd8} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Resource Files + + + + + Source Files + + + \ No newline at end of file diff --git a/projects/MSVC_2010/wxFRED2.vcxproj b/projects/MSVC_2010/wxFRED2.vcxproj new file mode 100644 index 0000000000..4ebcf0137f --- /dev/null +++ b/projects/MSVC_2010/wxFRED2.vcxproj @@ -0,0 +1,516 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno + Win32 + + + Release + Win32 + + + + + + + + + Application + false + + + Application + false + + + Application + false + + + Application + false + + + Application + false + + + Application + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(ProjectName)d + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(ProjectName)d_INF + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + true + $(ProjectName)d_INF_SSE2 + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(ProjectName)r + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(ProjectName)r_INF + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + false + $(ProjectName)r_INF_SSE2 + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + true + EditAndContinue + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/mswd;$(WXWIN)/lib/vc_lib/mswd;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;%(PreprocessorDefinitions) + NDEBUG;%(UndefinePreprocessorDefinitions) + .\Debug\Profile\wxfred2\ + true + .\Debug\Profile\wxfred2\wxFRED2.pch + .\Debug\Profile\wxfred2\ + .\Debug\Profile\wxfred2\ + EnableFastChecks + + + true + _DEBUG;%(PreprocessorDefinitions) + .\Debug\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + _DEBUG;%(PreprocessorDefinitions) + + + true + Debug/Profile/wxFRED2.bsc + "Debug\Profile\*.sbr" + + + true + true + Windows + libcd.lib;libcid.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28d_xrc.lib;wxmsw28d_html.lib;wxmsw28d_adv.lib;wxmsw28d_core.lib;wxbase28d_xml.lib;wxbase28d.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexd.lib;wxexpatd.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)/wxfred2_open_trunk_d.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)/wxfred2_open_trunk_d.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + true + EditAndContinue + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/mswd;$(WXWIN)/lib/vc_lib/mswd;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;INF_BUILD;%(PreprocessorDefinitions) + NDEBUG;%(UndefinePreprocessorDefinitions) + .\Debug_Inferno\Profile\wxfred2\ + true + .\Debug_Inferno\Profile\wxfred2\wxFRED2.pch + .\Debug_Inferno\Profile\wxfred2\ + .\Debug_Inferno\Profile\wxfred2\ + EnableFastChecks + + + true + _DEBUG;%(PreprocessorDefinitions) + .\Debug_Inferno\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + _DEBUG;%(PreprocessorDefinitions) + + + true + Debug_Inferno/Profile/wxFRED2.bsc + "Debug\Profile\*.sbr" + + + true + true + Windows + libcd.lib;libcid.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28d_xrc.lib;wxmsw28d_html.lib;wxmsw28d_adv.lib;wxmsw28d_core.lib;wxbase28d_xml.lib;wxbase28d.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexd.lib;wxexpatd.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)/wxfred2_open_trunk_INF_d.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)/wxfred2_open_trunk_INF_d.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + true + EditAndContinue + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/mswd;$(WXWIN)/lib/vc_lib/mswd;%(AdditionalIncludeDirectories) + _WINDOWS;WIN32;_DEBUG;INF_BUILD;%(PreprocessorDefinitions) + NDEBUG;%(UndefinePreprocessorDefinitions) + .\Debug_Inferno\Profile\wxfred2\ + true + .\Debug_Inferno\Profile\wxfred2\wxFRED2.pch + .\Debug_Inferno\Profile\wxfred2\ + .\Debug_Inferno\Profile\wxfred2\ + EnableFastChecks + + + true + _DEBUG;%(PreprocessorDefinitions) + .\Debug_Inferno\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + _DEBUG;%(PreprocessorDefinitions) + + + true + Debug_Inferno/Profile/wxFRED2.bsc + "Debug\Profile\*.sbr" + + + true + true + Windows + libcd.lib;libcid.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28d_xrc.lib;wxmsw28d_html.lib;wxmsw28d_adv.lib;wxmsw28d_core.lib;wxbase28d_xml.lib;wxbase28d.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexd.lib;wxexpatd.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)/wxfred2_open_trunk_INF_d.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)/wxfred2_open_trunk_INF_d.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + MultiThreadedDLL + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/msw;$(WXWIN)/lib/vc_lib/msw;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + _DEBUG;%(UndefinePreprocessorDefinitions) + .\Release\Profile\wxfred2\ + .\Release\Profile\wxfred2\wxFRED2.pch + .\Release\Profile\wxfred2\ + .\Release\Profile\wxfred2\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\Release\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + NDEBUG;%(PreprocessorDefinitions) + + + true + Release/Profile/wxFRED2.bsc + "Release\Profile\*.sbr" + + + true + true + Windows + libc.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28_xrc.lib;wxmsw28_html.lib;wxmsw28_adv.lib;wxmsw28_core.lib;wxbase28_xml.lib;wxbase28.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregex.lib;wxexpat.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)\wxfred2_open_trunk_r.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)\wxfred2_open_trunk_r.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + MultiThreadedDLL + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/msw;$(WXWIN)/lib/vc_lib/msw;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;INF_BUILD;%(PreprocessorDefinitions) + _DEBUG;%(UndefinePreprocessorDefinitions) + .\Release_Inferno\Profile\wxfred2\ + .\Release_Inferno\Profile\wxfred2\wxFRED2.pch + .\Release_Inferno\Profile\wxfred2\ + .\Release_Inferno\Profile\wxfred2\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\Release_Inferno\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + NDEBUG;%(PreprocessorDefinitions) + + + true + Release_Inferno/Profile/wxFRED2.bsc + "Release\Profile\*.sbr" + + + true + true + Windows + libc.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28_xrc.lib;wxmsw28_html.lib;wxmsw28_adv.lib;wxmsw28_core.lib;wxbase28_xml.lib;wxbase28.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregex.lib;wxexpat.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)\wxfred2_open_trunk_INF_r.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)\wxfred2_open_trunk_INF_r.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + MultiThreadedDLL + OnlyExplicitInline + true + true + MaxSpeed + true + Level3 + $(WXWIN)/include;$(WXWIN)/contrib/include;$(WXWIN)/lib/msw;$(WXWIN)/lib/vc_lib/msw;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;NDEBUG;INF_BUILD;%(PreprocessorDefinitions) + _DEBUG;%(UndefinePreprocessorDefinitions) + .\Release_Inferno\Profile\wxfred2\ + .\Release_Inferno\Profile\wxfred2\wxFRED2.pch + .\Release_Inferno\Profile\wxfred2\ + .\Release_Inferno\Profile\wxfred2\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\Release_Inferno\wxFRED2.tlb + true + Win32 + + + 0x0409 + ../../code/wxfred2/res;$(WXWIN)/include;$(WXWIN)/contrib/include;%(AdditionalIncludeDirectories) + NDEBUG;%(PreprocessorDefinitions) + + + true + Release_Inferno/Profile/wxFRED2.bsc + "Release\Profile\*.sbr" + + + true + true + Windows + libc.lib;libci.lib;%(IgnoreSpecificDefaultLibraries) + false + $(OutDir)$(TargetName)$(TargetExt) + $(WXWIN)/lib;$(WXWIN)/lib/vc_lib;%(AdditionalLibraryDirectories) + odbc32.lib;odbccp32.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;winmm.lib;wxmsw28_xrc.lib;wxmsw28_html.lib;wxmsw28_adv.lib;wxmsw28_core.lib;wxbase28_xml.lib;wxbase28.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregex.lib;wxexpat.lib;%(AdditionalDependencies) + + + copy %(FullPath) "$(FS2PATH)\wxfred2_open_trunk_INF_r.exe" +copy "$(ProjectDir)..\..\code\wxfred2\wxfred.xrc" "$(FS2PATH)\wxfred.xrc" + Copying build... + $(FS2PATH)\wxfred2_open_trunk_INF_r.exe;$(FS2PATH)\wxfred.xrc;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Document + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + Compiling XRC resources... + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + Compiling XRC resources... + Compiling XRC resources... + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + Compiling XRC resources... + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + "$(WXWIN)\utils\wxrc\vc_msw\wxrc.exe" /c /o"%(RootDir)%(Directory)/%(Filename)_xrc.inl" "%(FullPath)" + Compiling XRC resources... + Compiling XRC resources... + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + $(InputDir)$(InputName)_xrc.inl;%(Outputs) + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/wxFRED2.vcxproj.filters b/projects/MSVC_2010/wxFRED2.vcxproj.filters new file mode 100644 index 0000000000..e04f389ad1 --- /dev/null +++ b/projects/MSVC_2010/wxFRED2.vcxproj.filters @@ -0,0 +1,171 @@ + + + + + {a5818b72-a942-4889-b58c-6bb69d1b93d9} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {01783953-52ae-45e8-984b-17eb0898e4f4} + h;hpp;hxx;hm;inl + + + {23f96195-406a-46fd-9429-2ea027c13841} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/zlib.vcxproj b/projects/MSVC_2010/zlib.vcxproj new file mode 100644 index 0000000000..1ebc5b4913 --- /dev/null +++ b/projects/MSVC_2010/zlib.vcxproj @@ -0,0 +1,643 @@ + + + + + Debug Inferno SSE2 + Win32 + + + Debug Inferno SSE + Win32 + + + Debug Inferno + Win32 + + + Debug SSE2 + Win32 + + + Debug SSE + Win32 + + + Debug + Win32 + + + Release Inferno SSE2 + Win32 + + + Release Inferno SSE + Win32 + + + Release Inferno + Win32 + + + Release SSE2 + Win32 + + + Release SSE + Win32 + + + Release + Win32 + + + + {A2AFF4A4-D3A1-4BD4-86D2-673592598C38} + zlib + + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + true + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + $(SolutionDir)$(Configuration)\ + $(Configuration)\$(ProjectName)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + MaxSpeed + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + MaxSpeed + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + Fast + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + Full + AnySuitable + true + Speed + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions) + true + MultiThreaded + false + true + StreamingSIMDExtensions2 + Precise + $(OutDir)$(ProjectName).pch + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)zlib.lib + true + + + true + $(IntDir)$(ProjectName).bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/MSVC_2010/zlib.vcxproj.filters b/projects/MSVC_2010/zlib.vcxproj.filters new file mode 100644 index 0000000000..75b955ed68 --- /dev/null +++ b/projects/MSVC_2010/zlib.vcxproj.filters @@ -0,0 +1,92 @@ + + + + + {8daa61f1-2306-4ecd-a4d6-8b33435aac5d} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {a1c58bbc-e5ba-4f24-8640-14c9d28aa381} + h;hpp;hxx;hm;inl + + + {a4a51874-693d-43c0-97d7-3ea3b3462f28} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/projects/MSVC_6/Fred2.dsp b/projects/MSVC_6/Fred2.dsp index 3e9d04f86d..8159cb30c8 100644 --- a/projects/MSVC_6/Fred2.dsp +++ b/projects/MSVC_6/Fred2.dsp @@ -45,7 +45,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /Fr /YX /FD /c +# ADD CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /Fr /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -80,7 +80,7 @@ SOURCE="$(InputPath)" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /FR /YX /FD /GZ /c +# ADD CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" @@ -115,8 +115,8 @@ SOURCE="$(InputPath)" # PROP Intermediate_Dir "Release_Inferno\Profile\fred2" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /Fr /YX /FD /c -# ADD CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /D "INF_BUILD" /Fr /YX /FD /c +# ADD BASE CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /Fr /YX /FD /c +# ADD CPP /nologo /G5 /MT /W3 /GX /Z7 /O2 /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /D "INF_BUILD" /Fr /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -152,8 +152,8 @@ SOURCE="$(InputPath)" # PROP Intermediate_Dir "Debug_Inferno\Profile\fred2" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /FR /YX /FD /GZ /c -# ADD CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /D "INF_BUILD" /FR /YX /FD /GZ /c +# ADD BASE CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /FR /YX /FD /GZ /c +# ADD CPP /nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../openal/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "FRED" /D "INF_BUILD" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" @@ -408,6 +408,10 @@ SOURCE=..\..\code\fred2\ShipTexturesDlg.cpp # End Source File # Begin Source File +SOURCE=..\..\code\fred2\soundenvironmentdlg.cpp +# End Source File +# Begin Source File + SOURCE=..\..\code\fred2\StarfieldEditor.cpp # End Source File # Begin Source File @@ -664,6 +668,10 @@ SOURCE=..\..\code\fred2\ShipTexturesDlg.h # End Source File # Begin Source File +SOURCE=..\..\code\fred2\soundenvironmentdlg.h +# End Source File +# Begin Source File + SOURCE=..\..\code\fred2\StarfieldEditor.h # End Source File # Begin Source File diff --git a/projects/MSVC_6/Freespace2.dsp b/projects/MSVC_6/Freespace2.dsp index c2fc427153..139082037e 100644 --- a/projects/MSVC_6/Freespace2.dsp +++ b/projects/MSVC_6/Freespace2.dsp @@ -152,8 +152,8 @@ SOURCE="$(InputPath)" # PROP Intermediate_Dir "Debug_Inferno\Profile\freespace2" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MTd /W4 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "USE_OPENAL" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c -# ADD CPP /nologo /G5 /MTd /W4 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /D "_DEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "USE_OPENAL" /D "FS2_SPEECH" /D "FS2_VOICER" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c +# ADD BASE CPP /nologo /G5 /MTd /W4 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c +# ADD CPP /nologo /G5 /MTd /W4 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /D "_DEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICER" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" diff --git a/projects/MSVC_6/code.dsp b/projects/MSVC_6/code.dsp index aa4bee6132..5f6b020723 100644 --- a/projects/MSVC_6/code.dsp +++ b/projects/MSVC_6/code.dsp @@ -88,8 +88,8 @@ LIB32=link.exe -lib # PROP Output_Dir "Release_Inferno" # PROP Intermediate_Dir "Release_Inferno" # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "_DEBUG" /FR /YX /FD /c -# ADD CPP /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "NDEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICER" /U "_DEBUG" /FR /YX /FD /c +# ADD BASE CPP /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D "NO_DIRECT3D" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "_DEBUG" /FR /YX /FD /c +# ADD CPP /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "NDEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "NO_DIRECT3D" /D "FS2_SPEECH" /D "FS2_VOICER" /U "_DEBUG" /FR /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe @@ -111,8 +111,8 @@ LIB32=link.exe -lib # PROP Output_Dir "Debug_Inferno" # PROP Intermediate_Dir "Debug_Inferno" # PROP Target_Dir "" -# ADD BASE CPP /nologo /G5 /MTd /W3 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c -# ADD CPP /nologo /G5 /MTd /W3 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "_DEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "FS2_SPEECH" /D "FS2_VOICER" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c +# ADD BASE CPP /nologo /G5 /MTd /W3 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "_DEBUG" /D "_WINDOWS" /D "WIN32" /D "NO_DIRECT3D" /D "FS2_SPEECH" /D "FS2_VOICEREC" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c +# ADD CPP /nologo /G5 /MTd /W3 /Gm /Gi /GX /ZI /Od /I "../../code" /I "../../oggvorbis/include" /I "../../lua" /I "../../openal/include" /I "../../speech/include" /I "../../libpng" /I "../../zlib" /D "_DEBUG" /D "INF_BUILD" /D "_WINDOWS" /D "WIN32" /D "NO_DIRECT3D" /D "FS2_SPEECH" /D "FS2_VOICER" /U "NDEBUG" /FR /YX /FD /GZ /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe @@ -1187,6 +1187,10 @@ SOURCE=..\..\code\Localization\localize.h # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\code\math\bitarray.h +# End Source File +# Begin Source File + SOURCE=..\..\code\Math\Fix.cpp # End Source File # Begin Source File @@ -2327,7 +2331,11 @@ SOURCE=..\..\code\Sound\openal.cpp # End Source File # Begin Source File -SOURCE=..\..\code\Sound\openal.h +SOURCE=..\..\code\sound\openal.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\code\sound\openal.h # End Source File # Begin Source File @@ -2354,6 +2362,10 @@ BuildCmds= \ $(BuildCmds) # End Custom Build +!ELSEIF "$(CFG)" == "code - Win32 Release Inferno" + +!ELSEIF "$(CFG)" == "code - Win32 Debug Inferno" + !ENDIF # End Source File @@ -2538,18 +2550,6 @@ SOURCE=..\..\code\UI\UIMOUSE.cpp SOURCE=..\..\code\UI\WINDOW.cpp # End Source File # End Group -# Begin Group "VCodec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\code\VCodec\CODEC1.CPP -# End Source File -# Begin Source File - -SOURCE=..\..\code\VCodec\CODEC1.H -# End Source File -# End Group # Begin Group "Weapon" # PROP Default_Filter "" diff --git a/projects/Xcode/FS2_Open.xcodeproj/project.pbxproj b/projects/Xcode/FS2_Open.xcodeproj/project.pbxproj index d3e6b35346..574a37826a 100755 --- a/projects/Xcode/FS2_Open.xcodeproj/project.pbxproj +++ b/projects/Xcode/FS2_Open.xcodeproj/project.pbxproj @@ -121,8 +121,6 @@ 349807D10A25B46F0013844A /* mvelib.h in Headers */ = {isa = PBXBuildFile; fileRef = 349807CC0A25B46F0013844A /* mvelib.h */; }; 349807D20A25B46F0013844A /* mveplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 349807CD0A25B46F0013844A /* mveplayer.cpp */; }; 349807E10A25B98A0013844A /* modelanim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 349807E00A25B98A0013844A /* modelanim.cpp */; }; - 34A3E7CD08C4BB3800BBC609 /* codec1.h in Headers */ = {isa = PBXBuildFile; fileRef = 3459553908C3D6A0003B1351 /* codec1.h */; }; - 34A3E7CE08C4BB3900BBC609 /* codec1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3459553808C3D6A0003B1351 /* codec1.cpp */; }; 34A3E7F908C4E15400BBC609 /* libjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34C71A9108C4184200459F5B /* libjpeg.a */; }; 34A3E7FA08C4E15500BBC609 /* libcode.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34C71A8208C4147700459F5B /* libcode.a */; }; 34A759D90B49248B00C5E7AA /* decoder8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34A759D60B49248B00C5E7AA /* decoder8.cpp */; }; @@ -727,6 +725,7 @@ F0AAA94F10FA0D060086B1B4 /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F0AAA93610FA0D060086B1B4 /* zutil.h */; }; F0B73A9410FA065F005E1A69 /* pngutils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F0B73A9010FA065F005E1A69 /* pngutils.cpp */; }; F0B73A9510FA065F005E1A69 /* pngutils.h in Headers */ = {isa = PBXBuildFile; fileRef = F0B73A9110FA065F005E1A69 /* pngutils.h */; }; + F0E986A311C66F5700CF5169 /* bitarray.h in Headers */ = {isa = PBXBuildFile; fileRef = F0E986A211C66F5700CF5169 /* bitarray.h */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ @@ -1435,8 +1434,6 @@ 3459553308C3D6A0003B1351 /* window.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = ""; }; 3459553508C3D6A0003B1351 /* variables.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = variables.cpp; sourceTree = ""; }; 3459553608C3D6A0003B1351 /* variables.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = variables.h; sourceTree = ""; }; - 3459553808C3D6A0003B1351 /* codec1.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = codec1.cpp; sourceTree = ""; }; - 3459553908C3D6A0003B1351 /* codec1.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = codec1.h; sourceTree = ""; }; 3459553B08C3D6A0003B1351 /* beam.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = beam.cpp; sourceTree = ""; }; 3459553D08C3D6A0003B1351 /* beam.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = beam.h; sourceTree = ""; }; 3459553E08C3D6A0003B1351 /* corkscrew.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = corkscrew.cpp; sourceTree = ""; }; @@ -1673,6 +1670,7 @@ F0AAA93610FA0D060086B1B4 /* zutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zutil.h; sourceTree = ""; }; F0B73A9010FA065F005E1A69 /* pngutils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pngutils.cpp; sourceTree = ""; }; F0B73A9110FA065F005E1A69 /* pngutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngutils.h; sourceTree = ""; }; + F0E986A211C66F5700CF5169 /* bitarray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitarray.h; sourceTree = ""; }; F0ED189E101064C70011978C /* safe_strings_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = safe_strings_test.cpp; sourceTree = ""; }; F0ED189F101064C70011978C /* safe_strings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safe_strings.h; sourceTree = ""; }; F0ED18A0101064C70011978C /* safe_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = safe_strings.cpp; sourceTree = ""; }; @@ -2008,7 +2006,6 @@ 3459552008C3D6A0003B1351 /* tgautils */, 3459552308C3D6A0003B1351 /* ui */, 3459553408C3D6A0003B1351 /* variables */, - 3459553708C3D6A0003B1351 /* vcodec */, 3459553A08C3D6A0003B1351 /* weapon */, 3459554E08C3D6A0003B1351 /* windows_stub */, 3459555108C3D6A0003B1351 /* wxfred2 */, @@ -2471,6 +2468,7 @@ 345953EA08C3D6A0003B1351 /* math */ = { isa = PBXGroup; children = ( + F0E986A211C66F5700CF5169 /* bitarray.h */, 345953EC08C3D6A0003B1351 /* fix.cpp */, 345953ED08C3D6A0003B1351 /* fix.h */, 345953EE08C3D6A0003B1351 /* floating.cpp */, @@ -2981,15 +2979,6 @@ path = variables; sourceTree = ""; }; - 3459553708C3D6A0003B1351 /* vcodec */ = { - isa = PBXGroup; - children = ( - 3459553808C3D6A0003B1351 /* codec1.cpp */, - 3459553908C3D6A0003B1351 /* codec1.h */, - ); - path = vcodec; - sourceTree = ""; - }; 3459553A08C3D6A0003B1351 /* weapon */ = { isa = PBXGroup; children = ( @@ -3591,7 +3580,6 @@ 34C71CA808C41C6A00459F5B /* beam.h in Headers */, 34C71CAB08C41C6F00459F5B /* config.h in Headers */, 34C71D6808C4556800459F5B /* rtvoice.h in Headers */, - 34A3E7CD08C4BB3800BBC609 /* codec1.h in Headers */, 3419B21C091016C700DC7D47 /* iff_defs.h in Headers */, 344BA945095A59BF00B9D97D /* ai_profiles.h in Headers */, 3468A8D10991BD4200123C87 /* def_files.h in Headers */, @@ -3615,6 +3603,7 @@ F0B73A9510FA065F005E1A69 /* pngutils.h in Headers */, 60FAF4E4113431A100CE910F /* openal.h in Headers */, 60FAF4E9113432B800CE910F /* voicerec.h in Headers */, + F0E986A311C66F5700CF5169 /* bitarray.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4186,7 +4175,6 @@ 34C71CA908C41C6B00459F5B /* beam.cpp in Sources */, 34C71CAA08C41C6F00459F5B /* stubs.cpp in Sources */, 34C71D6708C4556700459F5B /* rtvoice.cpp in Sources */, - 34A3E7CE08C4BB3900BBC609 /* codec1.cpp in Sources */, 3419B21B091016C700DC7D47 /* iff_defs.cpp in Sources */, 344BA944095A59BF00B9D97D /* ai_profiles.cpp in Sources */, 3468A8D00991BD4200123C87 /* def_files.cpp in Sources */,

    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 diff --git a/oggvorbis/lib/vorbis_static_d.lib b/oggvorbis/lib/vorbis_static_d.lib index f4e20d576f64716eca58606019c61b5ef27817f6..982fe6006816f6d1d634e9af82daf48ecba5328e 100644 GIT binary patch delta 132356 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