[bzflag] 02/07: New upstream version 2.4.8

Markus Koschany apo at moszumanska.debian.org
Sun Dec 4 01:52:44 UTC 2016


This is an automated email from the git hooks/post-receive script.

apo pushed a commit to branch master
in repository bzflag.

commit 468b88b511f5c49e906cc5c231c6472403a22475
Author: Markus Koschany <apo at debian.org>
Date:   Sun Dec 4 00:50:01 2016 +0100

    New upstream version 2.4.8
---
 .travis.yml                               |   21 -
 AUTHORS                                   |    3 +
 ChangeLog                                 |   18 +
 MSVC/build/3D.vcxproj                     |    8 +-
 MSVC/build/Makefile.am                    |    2 -
 MSVC/build/bzadmin.vcxproj                |   10 +-
 MSVC/build/bzflag.vcxproj                 |   10 +-
 MSVC/build/bzfs.vcxproj                   |    8 +-
 MSVC/build/common.vcxproj                 |   10 +-
 MSVC/build/date.vcxproj                   |    8 +-
 MSVC/build/game.vcxproj                   |    8 +-
 MSVC/build/geometry.vcxproj               |    8 +-
 MSVC/build/installer.vcxproj              |    5 +-
 MSVC/build/mediafile.vcxproj              |    8 +-
 MSVC/build/net.vcxproj                    |    8 +-
 MSVC/build/obstacle.vcxproj               |    8 +-
 MSVC/build/ogl.vcxproj                    |    8 +-
 MSVC/build/platform.vcxproj               |    8 +-
 MSVC/build/scene.vcxproj                  |    2 +-
 MSVC/build/tests.vcxproj                  |  214 --
 MSVC/build/tests.vcxproj.filters          |   31 -
 MSVC/bzflag.rc                            |    8 +-
 MSVC/fullbuild.sln                        |   29 -
 Makefile.am                               |    6 +-
 README                                    |    2 +-
 README.WINDOWS                            |   10 -
 Xcode/BZFlag.xcodeproj/project.pbxproj    |  102 +-
 configure.ac                              |  123 +-
 data/bzflag.desktop                       |    1 +
 data/l10n/Makefile.am                     |    1 +
 data/l10n/bzflag_ru.po                    | 3250 +++++++++++++++++++++++++++++
 data/title.png                            |  Bin 91775 -> 110082 bytes
 misc/art/title.psd                        |  Bin 375912 -> 381705 bytes
 package/Makefile.am                       |    5 -
 package/win32/nsis/BZFlag.nsi             |    2 +-
 plugins/plugin_utils/plugin_utils.vcxproj |    2 +-
 src/bzadmin/BZAdminClient.cxx             |    3 +
 src/bzadmin/Makefile.am                   |    4 +-
 src/{bzflag => bzadmin}/ServerLink.cxx    |  201 --
 src/{bzflag => bzadmin}/ServerLink.h      |   21 -
 src/bzadmin/bzadmin.cxx                   |    5 -
 src/bzflag/ControlPanel.cxx               |    8 +-
 src/bzflag/Makefile.am                    |    6 -
 src/bzflag/ServerLink.cxx                 |    2 -
 src/bzflag/ServerLink.h                   |    2 -
 src/bzflag/ServerMenu.cxx                 |    8 +-
 src/bzflag/bzflag.cxx                     |   39 -
 src/bzflag/playing.cxx                    |   58 +-
 src/bzflag/sound.cxx                      |    4 +-
 src/bzfs/AccessControlList.cxx            |    6 +-
 src/bzfs/CmdLineOptions.cxx               |   31 +-
 src/bzfs/CmdLineOptions.h                 |    3 +-
 src/bzfs/bzfs.cxx                         |   30 +-
 src/bzfs/bzfsAPI.cxx                      |    2 +-
 src/bzfs/commands.cxx                     |   11 +-
 src/date/buildDate.cxx                    |    2 +-
 src/obstacle/Teleporter.cxx               |    3 +-
 src/platform/SDL2Display.cxx              |    2 +
 tests/Makefile.am                         |   25 -
 tests/bans.cxx                            |  114 -
 tests/tests.cxx                           |   29 -
 61 files changed, 3484 insertions(+), 1082 deletions(-)

diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 0de9bfd..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-language: cpp
-
-before_install:
-  - sudo apt-get update -qq
-  - sudo apt-get install -y g++ libtool automake autoconf libgl1-mesa-dev libglu1-mesa-dev libsdl1.2-dev libsdl-sound1.2-dev libcurl3-dev libc-ares-dev zlib1g-dev libncurses-dev make
-  - git clone git://github.com/cpputest/cpputest.git
-  - cd cpputest/cpputest_build
-  - autoreconf .. -i
-  - ../configure
-  - sudo make install
-  - cd ../..
-
-install:
-  - ./autogen.sh -v
-  - ./configure --enable-debug
-  - make
-  - make check
-
-script:
-  - ./tests/unittests
-
diff --git a/AUTHORS b/AUTHORS
index 9572d94..9772a88 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -224,6 +224,9 @@ Kyle Mills (khonkhortisan)
 Ian Farr (Quol)
 Ryan Kavanagh (ryanakca)
 Lee Marshall (bizarrefish)
+-- 2016 --
+Ruslan Hihin
+Aleksandr Lahin
 
 
 GOOGLE SUMMER OF CODE
diff --git a/ChangeLog b/ChangeLog
index acf0aff..031d2fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,24 @@
 			     BZFlag Release Notes
 			     ====================
 
+BZFlag 2.4.8 "Sixteen" (2016-10-10)
+------------
+
+* Add Russian transliteration - Ruslan Hihin, Aleksandr Lahin
+* Fix a regression in 2.4.6 where the client would not reduce CPU usage when
+    minimized on Windows - Scott Wichser
+* On autotools platforms, try to use SDL2, then SDL1, and then fall back to
+    native platform code. Allow specifying an SDL version as well.
+    - Scott Wichser
+* Prevent some more bzfs options from being specified in a world file
+    - Scott Wichser
+* Cleaned up some GCC6 warnings - Scott Wichser
+* Spawn all players on base when a timed game starts - Konstantinos Kanavouras
+* Add indicator for -noTeamKill servers on server list - Konstantinos Kanavouras
+* Send a notification to admins when a BZDB variable is reset
+    - Konstantinos Kanavouras
+* Increase the range of the volume slider - Konstantinos Kanavouras 
+
 BZFlag 2.4.6 "Eight, Our Codebase is Overweight" (2016-06-26)
 --------------------------------------------
 
diff --git a/MSVC/build/3D.vcxproj b/MSVC/build/3D.vcxproj
index 17665e7..353a124 100644
--- a/MSVC/build/3D.vcxproj
+++ b/MSVC/build/3D.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../include;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -100,7 +100,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../include;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -118,7 +118,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <AdditionalIncludeDirectories>../../include;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
@@ -135,7 +135,7 @@
       <TargetEnvironment>X64</TargetEnvironment>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>../../include;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
diff --git a/MSVC/build/Makefile.am b/MSVC/build/Makefile.am
index 521b500..32948eb 100644
--- a/MSVC/build/Makefile.am
+++ b/MSVC/build/Makefile.am
@@ -18,8 +18,6 @@ EXTRA_DIST =		\
 	ogl.vcxproj	\
 	platform.vcxproj	\
 	scene.vcxproj	\
-	tests.vcxproj	\
-	tests.vcxproj.filters	\
 	makeHTML.bat
 
 MAINTAINERCLEANFILES = \
diff --git a/MSVC/build/bzadmin.vcxproj b/MSVC/build/bzadmin.vcxproj
index 3e42521..7fc7df2 100644
--- a/MSVC/build/bzadmin.vcxproj
+++ b/MSVC/build/bzadmin.vcxproj
@@ -86,7 +86,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../win32;../../include;../../src/bzflag;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;BUILDING_BZADMIN;HAVE_CURSES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -137,7 +137,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../win32;../../include;../../src/bzflag;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;BUILDING_BZADMIN;HAVE_CURSES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -187,7 +187,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../win32;../../include;../../src/bzflag;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;BUILDING_BZADMIN;HAVE_CURSES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -236,7 +236,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../win32;../../include;../../src/bzflag;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;BUILDING_BZADMIN;HAVE_CURSES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -327,7 +327,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\bzflag\ServerLink.cxx">
+    <ClCompile Include="..\..\src\bzadmin\ServerLink.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/MSVC/build/bzflag.vcxproj b/MSVC/build/bzflag.vcxproj
index 9c2f33d..520af77 100644
--- a/MSVC/build/bzflag.vcxproj
+++ b/MSVC/build/bzflag.vcxproj
@@ -104,7 +104,7 @@
       <Optimization>Disabled</Optimization>
       <InlineFunctionExpansion>Default</InlineFunctionExpansion>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_WINDOWS;WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -161,7 +161,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
       <Optimization>Disabled</Optimization>
       <InlineFunctionExpansion>Default</InlineFunctionExpansion>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_WINDOWS;WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -217,7 +217,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_WINDOWS;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -268,7 +268,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_WINDOWS;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -311,7 +311,6 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile Include="..\..\src\bzflag\AutoPilot.cxx" />
     <ClCompile Include="..\..\src\bzflag\ServerListFilterHelpMenu.cxx" />
     <ClCompile Include="..\..\src\bzflag\ServerListFilterMenu.cxx" />
-    <ClCompile Include="..\..\src\common\BZDBLocal.cxx" />
     <ClCompile Include="..\..\src\bzflag\bzflag.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -892,7 +891,6 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClInclude Include="..\..\src\bzflag\AudioMenu.h" />
     <ClInclude Include="..\..\src\bzflag\BackgroundRenderer.h" />
     <ClInclude Include="..\..\src\bzflag\BaseLocalPlayer.h" />
-    <ClInclude Include="..\..\include\BZDBLocal.h" />
     <ClInclude Include="..\..\src\bzflag\CacheMenu.h" />
     <ClInclude Include="..\..\src\bzflag\callbacks.h" />
     <ClInclude Include="..\..\src\bzflag\commands.h" />
diff --git a/MSVC/build/bzfs.vcxproj b/MSVC/build/bzfs.vcxproj
index 5fd608f..2a6aaea 100644
--- a/MSVC/build/bzfs.vcxproj
+++ b/MSVC/build/bzfs.vcxproj
@@ -86,7 +86,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CONSOLE;WIN32;NDEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -135,7 +135,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CONSOLE;WIN32;NDEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -183,7 +183,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CONSOLE;WIN32;_DEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -237,7 +237,7 @@ copy $(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\bin\*.dll ..\..\bin
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CONSOLE;WIN32;_DEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
diff --git a/MSVC/build/common.vcxproj b/MSVC/build/common.vcxproj
index 1004e22..3985711 100644
--- a/MSVC/build/common.vcxproj
+++ b/MSVC/build/common.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_VC_NET;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -106,7 +106,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_VC_NET;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -132,7 +132,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_VC_NET;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -160,7 +160,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_VC_NET;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -216,6 +216,7 @@
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
+    <ClCompile Include="..\..\src\common\BZDBLocal.cxx" />
     <ClCompile Include="..\..\src\common\bz_Locale.cxx" />
     <ClCompile Include="..\..\src\common\BZDBCache.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
@@ -525,6 +526,7 @@
     <ClInclude Include="..\..\include\AutoCompleter.h" />
     <ClInclude Include="..\..\include\Bundle.h" />
     <ClInclude Include="..\..\include\BundleMgr.h" />
+    <ClInclude Include="..\..\include\BZDBLocal.h" />
     <ClInclude Include="..\..\include\bz_Locale.h" />
     <ClInclude Include="..\..\include\BZDBCache.h" />
     <ClInclude Include="..\..\include\bzfio.h" />
diff --git a/MSVC/build/date.vcxproj b/MSVC/build/date.vcxproj
index 1ed5ed0..6a9acba 100644
--- a/MSVC/build/date.vcxproj
+++ b/MSVC/build/date.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;.\..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -111,7 +111,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;.\..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -142,7 +142,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>.;.\..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -179,7 +179,7 @@ del __bd.cxx
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>.;.\..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
diff --git a/MSVC/build/game.vcxproj b/MSVC/build/game.vcxproj
index e8fd76e..39ed552 100644
--- a/MSVC/build/game.vcxproj
+++ b/MSVC/build/game.vcxproj
@@ -74,7 +74,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../include/;../;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -97,7 +97,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>../../include/;../;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -115,7 +115,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <AdditionalIncludeDirectories>../../include/;../;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
@@ -132,7 +132,7 @@
       <TargetEnvironment>X64</TargetEnvironment>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>../../include/;../;./;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
diff --git a/MSVC/build/geometry.vcxproj b/MSVC/build/geometry.vcxproj
index 35b74c1..1cd2359 100644
--- a/MSVC/build/geometry.vcxproj
+++ b/MSVC/build/geometry.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -106,7 +106,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -132,7 +132,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -162,7 +162,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
diff --git a/MSVC/build/installer.vcxproj b/MSVC/build/installer.vcxproj
index d75ad01..35a6060 100644
--- a/MSVC/build/installer.vcxproj
+++ b/MSVC/build/installer.vcxproj
@@ -300,11 +300,8 @@
       <Project>{1baed535-4aef-4041-9cb5-a7dc9c14e105}</Project>
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
     </ProjectReference>
-    <ProjectReference Include="tests.vcxproj">
-      <Project>{a01188f0-a2a9-4cae-9979-b47426104b38}</Project>
-    </ProjectReference>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
diff --git a/MSVC/build/mediafile.vcxproj b/MSVC/build/mediafile.vcxproj
index ed062d6..e69603b 100644
--- a/MSVC/build/mediafile.vcxproj
+++ b/MSVC/build/mediafile.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\MSVC;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -108,7 +108,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\MSVC;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -136,7 +136,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\MSVC;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -168,7 +168,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\MSVC;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
diff --git a/MSVC/build/net.vcxproj b/MSVC/build/net.vcxproj
index 515ec26..3a39009 100644
--- a/MSVC/build/net.vcxproj
+++ b/MSVC/build/net.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -104,7 +104,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -133,7 +133,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -163,7 +163,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
diff --git a/MSVC/build/obstacle.vcxproj b/MSVC/build/obstacle.vcxproj
index 0f15773..655e596 100644
--- a/MSVC/build/obstacle.vcxproj
+++ b/MSVC/build/obstacle.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -106,7 +106,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -132,7 +132,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -162,7 +162,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
diff --git a/MSVC/build/ogl.vcxproj b/MSVC/build/ogl.vcxproj
index ae9b421..bd66566 100644
--- a/MSVC/build/ogl.vcxproj
+++ b/MSVC/build/ogl.vcxproj
@@ -78,7 +78,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -108,7 +108,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -135,7 +135,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -164,7 +164,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
diff --git a/MSVC/build/platform.vcxproj b/MSVC/build/platform.vcxproj
index d4a5cce..dbdccfc 100644
--- a/MSVC/build/platform.vcxproj
+++ b/MSVC/build/platform.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -107,7 +107,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -134,7 +134,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -163,7 +163,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
diff --git a/MSVC/build/scene.vcxproj b/MSVC/build/scene.vcxproj
index 953821f..9830f29 100644
--- a/MSVC/build/scene.vcxproj
+++ b/MSVC/build/scene.vcxproj
@@ -77,7 +77,7 @@
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>..\..\include;..\..\win32;.\;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
diff --git a/MSVC/build/tests.vcxproj b/MSVC/build/tests.vcxproj
deleted file mode 100644
index 7fea328..0000000
--- a/MSVC/build/tests.vcxproj
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{A01188F0-A2A9-4CAE-9979-B47426104B38}</ProjectGuid>
-    <RootNamespace>tests</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>$(ProjectName)_$(Platform)_$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(ProjectName)_$(Platform)_$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>$(ProjectName)_$(Platform)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <IntDir>$(ProjectName)_$(Platform)_$(Configuration)\</IntDir>
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>$(ProjectName)_$(Platform)_$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(ProjectName)_$(Platform)_$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>$(ProjectName)_$(Platform)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <IntDir>$(ProjectName)_$(Platform)_$(Configuration)\</IntDir>
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(CPPUTEST_HOME)\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;.\;..\..\include;..\..\src\bzfs;..\..\src\bzflag;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>CPPUTEST;_MBCS;_CONSOLE;WIN32;_DEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>$(OutDir)</AssemblerListingLocation>
-      <ObjectFileName>$(OutDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>$(CPPUTEST_HOME)\lib;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\lib</AdditionalLibraryDirectories>
-      <AdditionalDependencies>regex.lib;ws2_32.lib;CppUTestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SubSystem>Console</SubSystem>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>"$(TargetPath)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(CPPUTEST_HOME)\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;.\;..\..\include;..\..\src\bzfs;..\..\src\bzflag;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>CPPUTEST;_MBCS;_CONSOLE;WIN32;_DEBUG;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>$(OutDir)</AssemblerListingLocation>
-      <ObjectFileName>$(OutDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>$(CPPUTEST_HOME)\lib;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\lib</AdditionalLibraryDirectories>
-      <AdditionalDependencies>regex.lib;ws2_32.lib;CppUTestd.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SubSystem>Console</SubSystem>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>"$(TargetPath)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(CPPUTEST_HOME)\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;.\;..\..\include;..\..\src\bzfs;..\..\src\bzflag;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>CPPUTEST;_MBCS;_CONSOLE;WIN32;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>$(OutDir)</AssemblerListingLocation>
-      <ObjectFileName>$(OutDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>$(CPPUTEST_HOME)\lib;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\lib</AdditionalLibraryDirectories>
-      <AdditionalDependencies>regex.lib;ws2_32.lib;CppUTest.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SubSystem>Console</SubSystem>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>"$(TargetPath)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>$(CPPUTEST_HOME)\include;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\include;.\;..\..\include;..\..\src\bzfs;..\..\src\bzflag;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>CPPUTEST;_MBCS;_CONSOLE;WIN32;INSIDE_BZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AssemblerListingLocation>$(OutDir)</AssemblerListingLocation>
-      <ObjectFileName>$(OutDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>$(CPPUTEST_HOME)\lib;$(BZ_DEPS)\output-$(Configuration)-$(PlatformShortName)\lib</AdditionalLibraryDirectories>
-      <AdditionalDependencies>regex.lib;ws2_32.lib;CppUTest.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SubSystem>Console</SubSystem>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>"$(TargetPath)"</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\bzfs\AccessControlList.cxx" />
-    <ClCompile Include="..\..\tests\bans.cxx" />
-    <ClCompile Include="..\..\tests\tests.cxx" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="common.vcxproj">
-      <Project>{57138f88-a81f-4ffb-8bdd-58db1a1473f5}</Project>
-      <Private>true</Private>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
-      <LinkLibraryDependencies>true</LinkLibraryDependencies>
-      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
-    </ProjectReference>
-    <ProjectReference Include="game.vcxproj">
-      <Project>{b2b95537-a4ce-4510-96a6-00f7b7303922}</Project>
-      <Private>true</Private>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
-      <LinkLibraryDependencies>true</LinkLibraryDependencies>
-      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/MSVC/build/tests.vcxproj.filters b/MSVC/build/tests.vcxproj.filters
deleted file mode 100644
index a16e03c..0000000
--- a/MSVC/build/tests.vcxproj.filters
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-    <Filter Include="Source Files\bzfs">
-      <UniqueIdentifier>{d3156d91-e041-4c2e-88b4-6f3a8a33e190}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\tests\tests.cxx">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\tests\bans.cxx">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\bzfs\AccessControlList.cxx">
-      <Filter>Source Files\bzfs</Filter>
-    </ClCompile>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/MSVC/bzflag.rc b/MSVC/bzflag.rc
index 4a64d6f..25bd0d4 100644
--- a/MSVC/bzflag.rc
+++ b/MSVC/bzflag.rc
@@ -48,8 +48,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,4,6,0
- PRODUCTVERSION 2,4,6,0
+ FILEVERSION 2,4,8,0
+ PRODUCTVERSION 2,4,8,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -66,12 +66,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Tim Riker"
             VALUE "FileDescription", "The BZFlag Client"
-            VALUE "FileVersion", "2.4.6.0"
+            VALUE "FileVersion", "2.4.8.0"
             VALUE "InternalName", "bzflag.rc"
             VALUE "LegalCopyright", "Copyright (c) 1993-2016 Tim Riker"
             VALUE "OriginalFilename", "bzflag.rc"
             VALUE "ProductName", "BZFlag"
-            VALUE "ProductVersion", "2.4.6.0"
+            VALUE "ProductVersion", "2.4.8.0"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/MSVC/fullbuild.sln b/MSVC/fullbuild.sln
index e2a7f96..7bac3a0 100644
--- a/MSVC/fullbuild.sln
+++ b/MSVC/fullbuild.sln
@@ -15,9 +15,6 @@ EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "geometry", "build\geometry.vcxproj", "{7009C42E-D693-4635-95CF-23ECBA63653C}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "installer", "build\installer.vcxproj", "{0169213B-F29C-4244-8280-602EB17F55FB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{A01188F0-A2A9-4CAE-9979-B47426104B38} = {A01188F0-A2A9-4CAE-9979-B47426104B38}
-	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makehtml", "build\makehtml.vcxproj", "{91198429-3669-4C40-A294-B8593D7C4987}"
 EndProject
@@ -97,15 +94,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzfscron", "..\plugins\bzfs
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomZoneSample", "..\plugins\CustomZoneSample\CustomZoneSample.vcxproj", "{3FB1B268-2084-4C96-8D90-EB72A612A986}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "build\tests.vcxproj", "{A01188F0-A2A9-4CAE-9979-B47426104B38}"
-	ProjectSection(ProjectDependencies) = postProject
-		{CA597E05-FD07-4AE3-B963-81C858F26D56} = {CA597E05-FD07-4AE3-B963-81C858F26D56}
-		{5000550B-DA03-4872-9975-1AA7EE3A40AF} = {5000550B-DA03-4872-9975-1AA7EE3A40AF}
-		{B2B95537-A4CE-4510-96A6-00F7B7303922} = {B2B95537-A4CE-4510-96A6-00F7B7303922}
-		{57138F88-A81F-4FFB-8BDD-58DB1A1473F5} = {57138F88-A81F-4FFB-8BDD-58DB1A1473F5}
-		{7FA170AC-5A33-41FC-9B3D-02F9E5173B0E} = {7FA170AC-5A33-41FC-9B3D-02F9E5173B0E}
-	EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thiefControl", "..\plugins\thiefControl\thiefControl.vcxproj", "{C7E4CB54-110E-4DA1-86E5-612DE727419A}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "superUser", "..\plugins\superUser\superUser.vcxproj", "{FC234DE3-C0A0-4B78-A552-5117AF3B5EC6}"
@@ -278,14 +266,6 @@ Global
 		{1FF80896-DD88-4992-8DB1-7070924091BF}.Release|Win32.Build.0 = Release|Win32
 		{1FF80896-DD88-4992-8DB1-7070924091BF}.Release|x64.ActiveCfg = Release|x64
 		{1FF80896-DD88-4992-8DB1-7070924091BF}.Release|x64.Build.0 = Release|x64
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Debug|Win32.Build.0 = Debug|Win32
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Debug|x64.ActiveCfg = Debug|x64
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Debug|x64.Build.0 = Debug|x64
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Release|Win32.ActiveCfg = Release|Win32
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Release|Win32.Build.0 = Release|Win32
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Release|x64.ActiveCfg = Release|x64
-		{2EAF7655-AE86-4407-8262-43496581E5B2}.Release|x64.Build.0 = Release|x64
 		{0D4F5307-9240-4880-A289-C30F112F99A1}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0D4F5307-9240-4880-A289-C30F112F99A1}.Debug|Win32.Build.0 = Debug|Win32
 		{0D4F5307-9240-4880-A289-C30F112F99A1}.Debug|x64.ActiveCfg = Debug|x64
@@ -494,14 +474,6 @@ Global
 		{3FB1B268-2084-4C96-8D90-EB72A612A986}.Release|Win32.Build.0 = Release|Win32
 		{3FB1B268-2084-4C96-8D90-EB72A612A986}.Release|x64.ActiveCfg = Release|x64
 		{3FB1B268-2084-4C96-8D90-EB72A612A986}.Release|x64.Build.0 = Release|x64
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Debug|Win32.ActiveCfg = Debug|Win32
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Debug|Win32.Build.0 = Debug|Win32
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Debug|x64.ActiveCfg = Debug|x64
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Debug|x64.Build.0 = Debug|x64
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Release|Win32.ActiveCfg = Release|Win32
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Release|Win32.Build.0 = Release|Win32
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Release|x64.ActiveCfg = Release|x64
-		{A01188F0-A2A9-4CAE-9979-B47426104B38}.Release|x64.Build.0 = Release|x64
 		{C7E4CB54-110E-4DA1-86E5-612DE727419A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C7E4CB54-110E-4DA1-86E5-612DE727419A}.Debug|Win32.Build.0 = Debug|Win32
 		{C7E4CB54-110E-4DA1-86E5-612DE727419A}.Debug|x64.ActiveCfg = Debug|x64
@@ -526,7 +498,6 @@ Global
 		{1F43075E-8AF6-486F-AEDF-6B350A6CE141} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
 		{B629554E-D0E9-4400-909B-7130F116E15D} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
 		{1FF80896-DD88-4992-8DB1-7070924091BF} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
-		{2EAF7655-AE86-4407-8262-43496581E5B2} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
 		{0D4F5307-9240-4880-A289-C30F112F99A1} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
 		{F493BA5D-252B-4825-8C15-36F75B4CE0AA} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
 		{A9898AEC-086B-4B9E-8978-C1BFE3EA56A6} = {57FFDC0F-E8B8-478D-8E12-474EDD2B381C}
diff --git a/Makefile.am b/Makefile.am
index 5f66b23..2b490d3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-AUTOMAKE_OPTIONS = 1.6 dist-zip dist-bzip2
+AUTOMAKE_OPTIONS = 1.6 dist-zip dist-bzip2 subdir-objects
 ACLOCAL_AMFLAGS = -I m4
 
 traversal_dirs = \
@@ -6,8 +6,7 @@ traversal_dirs = \
 	include \
 	man \
 	package \
-	src \
-	tests
+	src
 
 if BUILD_PLUGINS
 PLUGINS=plugins
@@ -30,7 +29,6 @@ DIST_SUBDIRS = \
 
 EXTRA_DIST = \
 	.editorconfig \
-	.travis.yml \
 	autogen.sh \
 	bzflag.spec \
 	DEVINFO \
diff --git a/README b/README
index b2adbb0..4fedc96 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-			    BZFlag 2.4.6
+			    BZFlag 2.4.8
 			 http://BZFlag.org/
 		Copyright (c) 1993-2016 Tim Riker
 
diff --git a/README.WINDOWS b/README.WINDOWS
index bff91de..244d850 100644
--- a/README.WINDOWS
+++ b/README.WINDOWS
@@ -54,16 +54,6 @@ NSIS 2.46 is needed to build an installer, which is built as part of a release
 build.
   http://nsis.sourceforge.net/
 
-There is a 'tests' project that is part of the fullbuild solution. This will
-run some unit tests, and requires CppUTest. You will need to checkout the git
-repository for CppUTest as described on https://cpputest.github.io/ and then
-open the CppUTest_VS201x.sln file. Build the solution and then create an
-environment variable named CPPUTEST_HOME and point it to the root of the
-CppUTest source checkout, without the trailing slash (for instance,
-C:\cpputest ).  You mean need to relaunch your Visual Studio, log off, or
-reboot for the environment variable to take effect, but then the fullbuild
-solution should be able to build and run the unit tests.
-
 **Running and Debugging**
 By default the compiler will copy the compiled executables to the root level
 of the source drive ( the same place that the data dir is at). From there
diff --git a/Xcode/BZFlag.xcodeproj/project.pbxproj b/Xcode/BZFlag.xcodeproj/project.pbxproj
index d8dbbb9..fcebdc9 100644
--- a/Xcode/BZFlag.xcodeproj/project.pbxproj
+++ b/Xcode/BZFlag.xcodeproj/project.pbxproj
@@ -200,12 +200,16 @@
 		0357AA081670BFC80056C938 /* StdInUI.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 03554317166C846F008806E9 /* StdInUI.cxx */; };
 		0357AA091670BFC80056C938 /* StdOutUI.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 03554319166C846F008806E9 /* StdOutUI.cxx */; };
 		0357AA0A1670BFC80056C938 /* UIMap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0355431B166C846F008806E9 /* UIMap.cxx */; };
-		0357AA0B1670BFD20056C938 /* ServerLink.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 035543A1166C846F008806E9 /* ServerLink.cxx */; };
 		0357AA161670C0EF0056C938 /* libdate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0357A8D51670B9930056C938 /* libdate.a */; };
 		0357AA181670C0FD0056C938 /* libgame.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0357A7FB1670B1D80056C938 /* libgame.a */; };
 		0357AA191670C1000056C938 /* libnet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0357A7EB1670B11A0056C938 /* libnet.a */; };
 		0357AA1A1670C1050056C938 /* libcommon.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0357A7BC1670AF8E0056C938 /* libcommon.a */; };
 		0358E67D1BF849EB001FF056 /* ServerListFilterHelpMenu.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0358E67B1BF849EB001FF056 /* ServerListFilterHelpMenu.cxx */; };
+		036F58231DA2F8C300BF906C /* AUTHORS in Resources */ = {isa = PBXBuildFile; fileRef = 03D88EA71670CB1300725DBE /* AUTHORS */; };
+		036F58241DA2F8C800BF906C /* ChangeLog in Resources */ = {isa = PBXBuildFile; fileRef = 03D88EA81670CB1300725DBE /* ChangeLog */; };
+		036F58251DA2F8CC00BF906C /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 03E42D191B322DFC006EE763 /* COPYING */; };
+		036F58261DA2F8D400BF906C /* README in Resources */ = {isa = PBXBuildFile; fileRef = 03D88EAB1670CB1300725DBE /* README */; };
+		036F58271DA2F90900BF906C /* README.MacOSX in Resources */ = {isa = PBXBuildFile; fileRef = 03D88EAC1670CB1300725DBE /* README.MacOSX */; };
 		0370A48D1B0C924B00FEC9F7 /* modeltool.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0370A4691B0C8FBA00FEC9F7 /* modeltool.cxx */; };
 		0370A48E1B0C924B00FEC9F7 /* Q3BSP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0370A46A1B0C8FBA00FEC9F7 /* Q3BSP.cxx */; };
 		0370A48F1B0C924B00FEC9F7 /* wavefrontOBJ.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0370A46C1B0C8FBA00FEC9F7 /* wavefrontOBJ.cxx */; };
@@ -259,34 +263,7 @@
 		038DA53A1BB64F5C0009F369 /* README.timedctf.txt in Resources */ = {isa = PBXBuildFile; fileRef = 038DA5371BB64F5C0009F369 /* README.timedctf.txt */; };
 		038DA53C1BB64FB90009F369 /* README.TimeLimit.txt in Resources */ = {isa = PBXBuildFile; fileRef = 038DA53B1BB64FB90009F369 /* README.TimeLimit.txt */; };
 		038DA53E1BB64FCB0009F369 /* README.wwzones.txt in Resources */ = {isa = PBXBuildFile; fileRef = 038DA53D1BB64FCB0009F369 /* README.wwzones.txt */; };
-		038DA53F1BB650C30009F369 /* README.airspawn.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4E31BB649130009F369 /* README.airspawn.txt */; };
-		038DA5401BB650E70009F369 /* README.autoFlagReset.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4E51BB6493D0009F369 /* README.autoFlagReset.txt */; };
-		038DA5411BB650ED0009F369 /* bzfscron.cfg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4E71BB649640009F369 /* bzfscron.cfg */; };
-		038DA5421BB650F20009F369 /* README.bzfscron.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4E81BB649640009F369 /* README.bzfscron.txt */; };
-		038DA5431BB651100009F369 /* README.chathistory.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4EB1BB6498D0009F369 /* README.chathistory.txt */; };
-		038DA5441BB651150009F369 /* README.customflagsample.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4ED1BB649A90009F369 /* README.customflagsample.txt */; };
-		038DA5451BB6511B0009F369 /* README.fairCTF.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4F11BB64A1D0009F369 /* README.fairCTF.txt */; };
-		038DA5461BB6511F0009F369 /* README.fastmap.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4F31BB64A380009F369 /* README.fastmap.txt */; };
-		038DA5471BB6514B0009F369 /* flagStay.bzw in CopyFiles */ = {isa = PBXBuildFile; fileRef = C353B1E91AE2490D00C5AED5 /* flagStay.bzw */; };
-		038DA5481BB651500009F369 /* README.flagStay.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4F51BB64A5A0009F369 /* README.flagStay.txt */; };
-		038DA54A1BB6515A0009F369 /* README.HoldTheFlag.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4F91BB64A9E0009F369 /* README.HoldTheFlag.txt */; };
-		038DA54B1BB651640009F369 /* help_keepaway_admin.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4FB1BB64BC30009F369 /* help_keepaway_admin.txt */; };
-		038DA54C1BB651670009F369 /* help_keepaway_rules.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4FC1BB64BC30009F369 /* help_keepaway_rules.txt */; };
-		038DA54D1BB6516E0009F369 /* README.keepaway.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA4FD1BB64BC30009F369 /* README.keepaway.txt */; };
-		038DA54E1BB651790009F369 /* README.killall.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5011BB64BF00009F369 /* README.killall.txt */; };
-		038DA54F1BB6517E0009F369 /* help_koth_admin.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5031BB64C9A0009F369 /* help_koth_admin.txt */; };
-		038DA5501BB651800009F369 /* help_koth_rules.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5041BB64C9A0009F369 /* help_koth_rules.txt */; };
-		038DA5511BB651870009F369 /* README.koth.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5051BB64C9A0009F369 /* README.koth.txt */; };
-		038DA5521BB6518E0009F369 /* README.logDetail.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5091BB64CCB0009F369 /* README.logDetail.txt */; };
-		038DA5531BB651970009F369 /* nagware.cfg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA50B1BB64CE80009F369 /* nagware.cfg */; };
-		038DA5541BB6519D0009F369 /* README.nagware.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA50C1BB64CE80009F369 /* README.nagware.txt */; };
-		038DA5551BB651A30009F369 /* README.Phoenix.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA50F1BB64D280009F369 /* README.Phoenix.txt */; };
-		038DA5561BB651AB0009F369 /* README.playHistoryTracker.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5111BB64D3F0009F369 /* README.playHistoryTracker.txt */; };
-		038DA5581BB651B60009F369 /* README.rabbitTimer.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5151BB64DCA0009F369 /* README.rabbitTimer.txt */; };
-		038DA5591BB651BE0009F369 /* help_rabidRabbit.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5171BB64DF00009F369 /* help_rabidRabbit.txt */; };
-		038DA55B1BB651EA0009F369 /* README.rabidRabbit.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA5181BB64DF00009F369 /* README.rabidRabbit.txt */; };
-		038DA55C1BB651F00009F369 /* README.recordmatch.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA51B1BB64E0B0009F369 /* README.recordmatch.txt */; };
-		038DA55D1BB651F50009F369 /* README.regFlag.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 038DA51D1BB64E180009F369 /* README.regFlag.txt */; };
+		038EC5F41D7E84EF007E3061 /* ServerLink.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 038EC5F11D7E84DA007E3061 /* ServerLink.cxx */; };
 		0394E688167B0B71007F4035 /* AccessControlList.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 035543CC166C846F008806E9 /* AccessControlList.cxx */; };
 		0394E689167B0B71007F4035 /* Authentication.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 035543CE166C846F008806E9 /* Authentication.cxx */; };
 		0394E68A167B0B71007F4035 /* BanCommands.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 035543D0166C846F008806E9 /* BanCommands.cxx */; };
@@ -534,11 +511,6 @@
 		03DBE9BC1B30E12F00711E71 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03DBE9BA1B30E12300711E71 /* Cocoa.framework */; };
 		03DBE9BD1B30E13100711E71 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03DBE9BA1B30E12300711E71 /* Cocoa.framework */; };
 		03DBE9BE1B30E77D00711E71 /* libcares.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 03DBE9AC1B30D2ED00711E71 /* libcares.a */; };
-		03E42D1B1B322E2C006EE763 /* AUTHORS in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03D88EA71670CB1300725DBE /* AUTHORS */; };
-		03E42D1C1B322E2C006EE763 /* ChangeLog in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03D88EA81670CB1300725DBE /* ChangeLog */; };
-		03E42D1D1B322E2C006EE763 /* COPYING in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03E42D191B322DFC006EE763 /* COPYING */; };
-		03E42D1E1B322E2C006EE763 /* README in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03D88EAB1670CB1300725DBE /* README */; };
-		03E42D1F1B322E2C006EE763 /* README.MacOSX in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03D88EAC1670CB1300725DBE /* README.MacOSX */; };
 		03FA74341742606400573D2D /* serverSidePlayerSample.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03FA742E1742601B00573D2D /* serverSidePlayerSample.dylib */; };
 		03FA7435174260CB00573D2D /* playerHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8950DD16E42CF800BA9DD5 /* playerHandler.cpp */; };
 		03FA7436174260D700573D2D /* serverSidePlayerSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8950DF16E42CF800BA9DD5 /* serverSidePlayerSample.cpp */; };
@@ -921,48 +893,6 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		03E42D181B322DDD006EE763 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = doc;
-			dstSubfolderSpec = 7;
-			files = (
-				03E42D1B1B322E2C006EE763 /* AUTHORS in CopyFiles */,
-				038DA5411BB650ED0009F369 /* bzfscron.cfg in CopyFiles */,
-				03E42D1C1B322E2C006EE763 /* ChangeLog in CopyFiles */,
-				03E42D1D1B322E2C006EE763 /* COPYING in CopyFiles */,
-				038DA5471BB6514B0009F369 /* flagStay.bzw in CopyFiles */,
-				038DA54B1BB651640009F369 /* help_keepaway_admin.txt in CopyFiles */,
-				038DA54C1BB651670009F369 /* help_keepaway_rules.txt in CopyFiles */,
-				038DA54F1BB6517E0009F369 /* help_koth_admin.txt in CopyFiles */,
-				038DA5501BB651800009F369 /* help_koth_rules.txt in CopyFiles */,
-				038DA5591BB651BE0009F369 /* help_rabidRabbit.txt in CopyFiles */,
-				038DA5531BB651970009F369 /* nagware.cfg in CopyFiles */,
-				03E42D1E1B322E2C006EE763 /* README in CopyFiles */,
-				038DA53F1BB650C30009F369 /* README.airspawn.txt in CopyFiles */,
-				038DA5401BB650E70009F369 /* README.autoFlagReset.txt in CopyFiles */,
-				038DA5421BB650F20009F369 /* README.bzfscron.txt in CopyFiles */,
-				038DA5431BB651100009F369 /* README.chathistory.txt in CopyFiles */,
-				038DA5441BB651150009F369 /* README.customflagsample.txt in CopyFiles */,
-				038DA5451BB6511B0009F369 /* README.fairCTF.txt in CopyFiles */,
-				038DA5461BB6511F0009F369 /* README.fastmap.txt in CopyFiles */,
-				038DA5481BB651500009F369 /* README.flagStay.txt in CopyFiles */,
-				038DA54A1BB6515A0009F369 /* README.HoldTheFlag.txt in CopyFiles */,
-				038DA54D1BB6516E0009F369 /* README.keepaway.txt in CopyFiles */,
-				038DA54E1BB651790009F369 /* README.killall.txt in CopyFiles */,
-				038DA5511BB651870009F369 /* README.koth.txt in CopyFiles */,
-				038DA5521BB6518E0009F369 /* README.logDetail.txt in CopyFiles */,
-				038DA5541BB6519D0009F369 /* README.nagware.txt in CopyFiles */,
-				03E42D1F1B322E2C006EE763 /* README.MacOSX in CopyFiles */,
-				038DA5551BB651A30009F369 /* README.Phoenix.txt in CopyFiles */,
-				038DA5561BB651AB0009F369 /* README.playHistoryTracker.txt in CopyFiles */,
-				038DA5581BB651B60009F369 /* README.rabbitTimer.txt in CopyFiles */,
-				038DA55B1BB651EA0009F369 /* README.rabidRabbit.txt in CopyFiles */,
-				038DA55C1BB651F00009F369 /* README.recordmatch.txt in CopyFiles */,
-				038DA55D1BB651F50009F369 /* README.regFlag.txt in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
@@ -1695,6 +1625,8 @@
 		038DA5371BB64F5C0009F369 /* README.timedctf.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.timedctf.txt; sourceTree = "<group>"; };
 		038DA53B1BB64FB90009F369 /* README.TimeLimit.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.TimeLimit.txt; sourceTree = "<group>"; };
 		038DA53D1BB64FCB0009F369 /* README.wwzones.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.wwzones.txt; sourceTree = "<group>"; };
+		038EC5F11D7E84DA007E3061 /* ServerLink.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerLink.cxx; sourceTree = "<group>"; };
+		038EC5F21D7E84DA007E3061 /* ServerLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerLink.h; sourceTree = "<group>"; };
 		0394E67D167B0AA3007F4035 /* bzfs */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bzfs; sourceTree = BUILT_PRODUCTS_DIR; };
 		0394E6D3167B0F74007F4035 /* airspawn.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = airspawn.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		0394E6D9167B1024007F4035 /* airspawn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = airspawn.cpp; sourceTree = "<group>"; };
@@ -2423,6 +2355,8 @@
 				03554312166C846F008806E9 /* OptionParser.cxx */,
 				03554313166C846F008806E9 /* OptionParser.h */,
 				03554314166C846F008806E9 /* PlayerInfo.h */,
+				038EC5F11D7E84DA007E3061 /* ServerLink.cxx */,
+				038EC5F21D7E84DA007E3061 /* ServerLink.h */,
 				03554315166C846F008806E9 /* StdBothUI.cxx */,
 				03554316166C846F008806E9 /* StdBothUI.h */,
 				03554317166C846F008806E9 /* StdInUI.cxx */,
@@ -4611,7 +4545,6 @@
 				0394E96C167B36DC007F4035 /* CopyFiles */,
 				03C8EE23167ABE2300BB07A5 /* Resources */,
 				03E42D171B32274A006EE763 /* ShellScript */,
-				03E42D181B322DDD006EE763 /* CopyFiles */,
 			);
 			buildRules = (
 			);
@@ -4829,6 +4762,11 @@
 				038DA53A1BB64F5C0009F369 /* README.timedctf.txt in Resources */,
 				038DA53C1BB64FB90009F369 /* README.TimeLimit.txt in Resources */,
 				038DA53E1BB64FCB0009F369 /* README.wwzones.txt in Resources */,
+				036F58231DA2F8C300BF906C /* AUTHORS in Resources */,
+				036F58241DA2F8C800BF906C /* ChangeLog in Resources */,
+				036F58251DA2F8CC00BF906C /* COPYING in Resources */,
+				036F58261DA2F8D400BF906C /* README in Resources */,
+				036F58271DA2F90900BF906C /* README.MacOSX in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -5129,8 +5067,8 @@
 				0357AA071670BFC80056C938 /* StdBothUI.cxx in Sources */,
 				0357AA081670BFC80056C938 /* StdInUI.cxx in Sources */,
 				0357AA091670BFC80056C938 /* StdOutUI.cxx in Sources */,
+				038EC5F41D7E84EF007E3061 /* ServerLink.cxx in Sources */,
 				0357AA0A1670BFC80056C938 /* UIMap.cxx in Sources */,
-				0357AA0B1670BFD20056C938 /* ServerLink.cxx in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -5809,7 +5747,7 @@
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				OTHER_LDFLAGS = (
 					"-undefined",
@@ -5844,7 +5782,7 @@
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				OTHER_LDFLAGS = (
 					"-undefined",
@@ -7304,7 +7242,7 @@
 					"$(inherited)",
 				);
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				OTHER_LDFLAGS = (
 					"-undefined",
 					dynamic_lookup,
@@ -7323,7 +7261,7 @@
 				COMBINE_HIDPI_IMAGES = YES;
 				EXECUTABLE_PREFIX = "";
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.8;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
 				OTHER_LDFLAGS = (
 					"-undefined",
 					dynamic_lookup,
diff --git a/configure.ac b/configure.ac
index 12fcfaf..da2e183 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,7 +44,7 @@ dnl Minimum version of autoconf required.  Should coincide with the
 dnl setting in the autogen.sh script.
 AC_PREREQ([2.58])
 
-AC_INIT([BZFlag],[2.4.6],[http://BZFlag.org/],[bzflag])
+AC_INIT([BZFlag],[2.4.8],[http://BZFlag.org/],[bzflag])
 AC_CONFIG_SRCDIR(src/bzflag/bzflag.cxx)
 AC_CONFIG_MACRO_DIR([m4])
 
@@ -101,7 +101,7 @@ AC_CANONICAL_TARGET
 dnl Minimum version of automake required.  Should coincide with the
 dnl setting in the autogen.sh script.  Create the other archives
 dnl automatically when doing a make dist for convenience.
-AM_INIT_AUTOMAKE([1.6 dist-zip dist-bzip2])
+AM_INIT_AUTOMAKE([1.6 dist-zip dist-bzip2 subdir-objects])
 
 dnl all configured definitions get written here
 AC_CONFIG_HEADERS([include/config.h])
@@ -128,10 +128,7 @@ BZ_CONFIGURE_STAGE([arguments], [1 of 9])
 MP_WITH_CURSES
 
 # check for SDL option (enabled by default now)
-AC_ARG_WITH(SDL, [  --without-SDL		  do not use Simple DirectMedia Layer])
-if test "x$with_SDL" != xno; then
-    AC_ARG_WITH(SDL2, [  --with-SDL2		  use Simple DirectMedia Layer version 2 (experimental)])
-fi
+AC_ARG_WITH(SDL, AS_HELP_STRING([--without-SDL | --with-SDL={1,2}],[Do not use Simple DirectMedia Layer or force using a specific version (by default tries 2, then 1, then resorts to native platform code if available]), sdl_version="$withval", sdl_version="detect")
 
 # check whether plugins are desired
 AC_ARG_ENABLE(plugins, AS_HELP_STRING([--disable-plugins],[do not compile plugins]))
@@ -528,22 +525,6 @@ ac_cv_search_glBegin=no
 ac_cv_search_gluScaleImage=no
 ac_func_search_save_LIBS=$LIBS
 
-dnl check whether the OpenGL framework is available
-AC_MSG_CHECKING([for OpenGL framework (Darwin-specific)])
-FRAMEWORK_OPENGL=""
-PRELIBS="$LIBS"
-LIBS="$LIBS -framework OpenGL"
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <OpenGL/gl.h>]], [[glBegin(GL_POINTS)]])],[FRAMEWORK_OPENGL="-framework OpenGL" ; ac_cv_search_glBegin="-framework OpenGL" ; AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
-LIBS="$PRELIBS"
-AC_SUBST(FRAMEWORK_OPENGL)
-
-# don't use X11 flags if we have an OpenGL framework
-if test "x$FRAMEWORK_OPENGL" = "x" ; then
-    AC_PATH_XTRA
-    CONF_CPPFLAGS="$CONF_CPPFLAGS $X_CFLAGS"
-    LDFLAGS="$LDFLAGS $X_LIBS"
-fi
-
 case $host_os in
     solaris*)
 	if test -d /usr/demo/SOUND/lib ; then
@@ -561,8 +542,6 @@ case $host_os in
 	GLIBS=" -lmedia -lgame $GLIBS"
 	LIBS="-lbe"
 	;;
-    macos|darwin*)
-	;;
     *)
 	;;
 esac
@@ -570,8 +549,6 @@ esac
 
 # avoid using X11 in BeOS and Mac OS X
 case $host_os in
-    macos|darwin*)
-	;;
     beos*)
 	;;
     *)
@@ -681,52 +658,36 @@ savedLIBS=$LIBS
 LIBS="$GLIBS $LIBS"
 AC_LANG(C)
 if test "x$enable_client" != xno -a "x$with_SDL" != xno; then
-    AC_MSG_CHECKING([for SDL framework])
-    savedLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -framework SDL"
-    framework_SDL_flag_works=yes
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <SDL/SDL_version.h>]], [[]])],
-	[],[framework_SDL_flag_works=no ])
-    AC_MSG_RESULT([$framework_SDL_flag_works])
-    if test x$framework_SDL_flag_works = xno ; then
-	LDFLAGS="$savedLDFLAGS"
-	with_SDL=no
-    else
-	with_SDL=yes
+    if test "x$sdl_version" != "x1" -a "x$sdl_version" != "x2"; then
+        sdl_version="detect"
     fi
 
-    if test x$with_SDL = xno ; then
-      if test x$with_SDL2 = xyes ; then
-	AM_PATH_SDL2(2.0.3, with_SDL=yes, with_SDL=no)
-      else
-	AM_PATH_SDL(1.2.10, with_SDL=yes, with_SDL=no)
-      fi
-	if test x$with_SDL = xno; then
-	    AC_MSG_WARN([could not find an appropriate SDL version. BZFlag will build without SDL])
-	fi
+    if test "x$sdl_version" = "x2" -o "x$sdl_version" = "xdetect"; then
+        # Test for SDL 2
+        AM_PATH_SDL2(2.0.3, with_SDL=2, with_SDL=no)
+    fi
+
+    if test "x$with_SDL" != "x2" -a \( "x$sdl_version" = "x1" -o "x$sdl_version" = "xdetect" \); then
+        # Test for SDL 1.2
+        AM_PATH_SDL(1.2.10, with_SDL=1, with_SDL=no)
     fi
 fi
 AC_LANG(C++)
 LIBS=$savedLIBS
-if test x$with_SDL = xyes; then
+
+if test "x$with_SDL" != "xno"; then
     AC_DEFINE(HAVE_SDL, 1, [Using SDL])
-    if test x$with_SDL2 = xyes ; then
-       AC_DEFINE(HAVE_SDL2, 1, [Using SDL2])
-    fi
 fi
-AM_CONDITIONAL(HAVE_SDL, test x$with_SDL = xyes)
-AM_CONDITIONAL(HAVE_SDL2, test x$with_SDL2 = xyes)
+if test "x$with_SDL" = "x2"; then
+    AC_DEFINE(HAVE_SDL2, 1, [Using SDL2])
+fi
+
+AM_CONDITIONAL(HAVE_SDL, test x$with_SDL = x1 -o x$with_SDL = x2)
+AM_CONDITIONAL(HAVE_SDL2, test x$with_SDL = x2)
 
 
 # dumb temp hacks to add missing linkage stuff
 case $host_os in
-     macos|darwin*)
-	if test x$with_SDL = xyes; then
-	    LIBS="$LIBS -framework Carbon -framework Cocoa -framework OpenGL"
-	else
-	    LIBS="$LIBS -framework Carbon -framework AGL -framework OpenGL"
-	fi
-	;;
      irix)
 	if test x$host_cpu = xmips64; then
 	   LDFLAGS="$LDFLAGS -L$(ROOT)/usr/lib32"
@@ -815,10 +776,6 @@ case $host_os in
 	    CONF_CXXFLAGS="$CONF_CXXFLAGS $FLAGS"
 	fi
 	;;
-     macos|darwin*)
-	CONF_CFLAGS="$CONF_CFLAGS $FLAGS";
-	CONF_CXXFLAGS="$CONF_CXXFLAGS $FLAGS"
-	;;
      irix)
 	FLAGS="-Wall";
 	if test x$host_cpu = xmips64; then
@@ -948,9 +905,6 @@ case $host_os in
     linux*|kfreebsd*|freebsd*|netbsd*|openbsd*|dragonfly*|gnu*)
 	linux=true
 	;;
-    macos|darwin*)
-	macos=true
-	;;
     solaris*)
 	solaris=true
 	;;
@@ -962,7 +916,6 @@ AM_CONDITIONAL(HPUX, test x$hpux = xtrue)
 AM_CONDITIONAL(BEOS, test x$beos = xtrue)
 AM_CONDITIONAL(IRIX, test x$irix = xtrue)
 AM_CONDITIONAL(LINUX, test x$linux = xtrue)
-AM_CONDITIONAL(MACOS, test x$macos = xtrue)
 AM_CONDITIONAL(SOLARIS, test x$solaris = xtrue)
 AM_CONDITIONAL(WIN32, test x$win32 = xtrue)
 
@@ -1117,7 +1070,6 @@ AC_CONFIG_FILES([
 	src/ogl/Makefile
 	src/platform/Makefile
 	src/scene/Makefile
-	tests/Makefile
 	tools/Makefile
 	tools/TextTool2/Makefile
 	tools/TextTool2/TextTool2.xcodeproj/Makefile
@@ -1135,35 +1087,6 @@ dnl     touch include/config.h.in
 dnl fi
 
 
-#################
-# patch libtool #
-#################
-case $host_os in
-    darwin*)
-	for script in $ac_top_builddir $ac_abs_builddir $ac_builddir . ; do
-	    if test "x$script" = "x" ; then
-		libtoolscript="libtool"
-	    else
-		libtoolscript="${script}/libtool"
-	    fi
-	    if test -f ${libtoolscript} ; then
-		if test -w ${libtoolscript} ; then
-		    # remove any -all_load option.
-		    # provokes libtool linker bug with noinst C++ libraries.
-		    sed 's/-all_load.*convenience//g' < $libtoolscript > ${libtoolscript}.sed
-		    if test ! "x`cat ${libtoolscript}`" = "x`cat ${libtoolscript}.sed`" ; then
-			AC_MSG_RESULT([Found -all_load in libtool script, removing])
-			cp ${libtoolscript}.sed ${libtoolscript}
-		    fi
-		    rm -f ${libtoolscript}.sed
-		else
-		    AC_MSG_WARN([libtool script exists but is not writable so not attempting to edit])
-		fi
-	    fi
-	done
-	;;
-esac
-
 
 dnl **********************
 dnl *** Report Summary ***
@@ -1177,8 +1100,8 @@ if test "x$enable_client" = "xno"; then
     fi
 else
     if test x$with_SDL != xno; then
-	if test x$with_SDL2 = xyes; then
-	    build_bzflag="yes (with SDL2) (Note: Still experimental!)"
+        if test x$with_SDL = x2; then
+            build_bzflag="yes (with SDL2)"
 	else
 	    build_bzflag="yes (with SDL)"
 	fi
diff --git a/data/bzflag.desktop b/data/bzflag.desktop
index 102f4fe..7fcca44 100644
--- a/data/bzflag.desktop
+++ b/data/bzflag.desktop
@@ -2,6 +2,7 @@
 Name=BZFlag
 GenericName=Tank Battle Game
 Comment=Battle enemy tanks
+Keywords=capture;flag;tank;game;multiplayer;network;
 Exec=/usr/games/bzflag
 Icon=bzflag-48x48
 Type=Application
diff --git a/data/l10n/Makefile.am b/data/l10n/Makefile.am
index eea066e..17ee3f6 100644
--- a/data/l10n/Makefile.am
+++ b/data/l10n/Makefile.am
@@ -12,6 +12,7 @@ dist_l10n_DATA = \
 	bzflag_lt.po	\
 	bzflag_nl.po	\
 	bzflag_pt.po	\
+	bzflag_ru.po	\
 	bzflag_sv.po
 
 EXTRA_DIST = \
diff --git a/data/l10n/bzflag_ru.po b/data/l10n/bzflag_ru.po
new file mode 100644
index 0000000..4ba79a1
--- /dev/null
+++ b/data/l10n/bzflag_ru.po
@@ -0,0 +1,3250 @@
+# -*- coding: utf-8 -*-
+# This is generic Russian (transliteration)
+# Author: Ruslan Hihin <ruslandh at altlinux.ru>, Aleksandr Lahin
+
+msgid "ru"
+msgstr "Russian"
+
+msgid "translator"
+msgstr "Ruslan Hihin and Aleksandr Lahin"
+
+#############
+## GENERAL ##
+#############
+
+msgid "Off"
+msgstr "Vykl"
+
+msgid "On"
+msgstr "Vkl"
+
+msgid "Unavailable"
+msgstr "Otsutstvuet"
+
+msgid "None"
+msgstr "Net"
+
+msgid "Fast"
+msgstr "Bystree"
+
+msgid "Best"
+msgstr "Luchshe"
+
+msgid "NOTE: "
+msgstr "Vnimanie: "
+
+msgid "Page {1} of {2}"
+msgstr "List {1} iz {2}"
+
+msgid "Auto"
+msgstr "Avto"
+
+msgid "Pause/Resume:"
+msgstr "Pauza/Dalee"
+
+msgid "Slow Keyboard Motion:"
+msgstr "Zamedlenie klaviatury"
+
+msgid "<not mapped>"
+msgstr "<ne naznacheno>"
+
+msgid "No"
+msgstr "Net"
+
+msgid "Yes"
+msgstr "Da"
+
+msgid "N/A"
+msgstr "N/D"
+
+msgid "Failed... unknown error (%d)."
+msgstr "Ne udacha,... neizvestnaya oshibka (%d)."
+
+msgid "Silenced All Msgs"
+msgstr "Otklyuchit' soob$eniya"
+
+msgid " or "
+msgstr " ili "
+
+##################
+## INPUT EVENTS ##
+##################
+
+msgid "Pause"
+msgstr "Pauza"
+
+msgid "Home"
+msgstr "Nachalo"
+
+msgid "End"
+msgstr "Konec"
+
+msgid "Left Arrow"
+msgstr "Str.Lev."
+
+msgid "Right Arrow"
+msgstr "Str.Prav."
+
+msgid "Up Arrow"
+msgstr "Str.Vverh"
+
+msgid "Down Arrow"
+msgstr "Strl.Vniz"
+
+#msgid "Page Up"
+#msgstr ""
+
+#msgid "Page Down"
+#msgstr ""
+
+#msgid "Insert"
+#msgstr ""
+
+#msgid "Backspace"
+#msgstr ""
+
+#msgid "Delete"
+#msgstr ""
+
+#msgid "Kp0"
+#msgstr "Ck.0"
+
+#msgid "Kp1"
+#msgstr "Ck1"
+
+#msgid "Kp2"
+#msgstr "Ck2"
+
+#msgid "Kp3"
+#msgstr "Ck3"
+
+#msgid "Kp4"
+#msgstr "Ck4"
+
+#msgid "Kp5"
+#msgstr "Ck5"
+
+#msgid "Kp6"
+#msgstr "Ck6"
+
+#msgid "Kp7"
+#msgstr "Ck7"
+
+#msgid "Kp8"
+#msgstr "Ck8"
+
+#msgid "Kp9"
+#msgstr "Ck9"
+
+#msgid "Kp_Period"
+#msgstr "Ck_Tochka"
+
+#msgid "Kp_Divide"
+#msgstr "Ck_/"
+
+#msgid "Kp_Multiply"
+#msgstr "Ck_*"
+
+#msgid "Kp_Minus"
+#msgstr "Ck_-"
+
+#msgid "Kp_Plus"
+#msgstr "Ck_+"
+
+#msgid "Kp_Enter"
+#msgstr "Ck_Enter"
+
+#msgid "Kp_Equals"
+#msgstr "Ck_="
+
+#msgid "F1"
+#msgstr ""
+
+#msgid "F2"
+#msgstr ""
+
+#msgid "F3"
+#msgstr ""
+
+#msgid "F4"
+#msgstr ""
+
+#msgid "F5"
+#msgstr ""
+
+#msgid "F6"
+#msgstr ""
+
+#msgid "F7"
+#msgstr ""
+
+#msgid "F8"
+#msgstr ""
+
+#msgid "F9"
+#msgstr ""
+
+#msgid "F10"
+#msgstr ""
+
+#msgid "F11"
+#msgstr ""
+
+#msgid "F12"
+#msgstr ""
+
+msgid "Help"
+msgstr "Spravka"
+
+msgid "Print"
+msgstr "Pechat'"
+
+#msgid "Sysreq"
+#msgstr ""
+
+msgid "Break"
+msgstr "Prervat'"
+
+msgid "Menu"
+msgstr "Menyu"
+
+msgid "Power"
+msgstr "Zaryad"
+
+msgid "Euro"
+msgstr "Evro"
+
+msgid "Undo"
+msgstr "Otmena"
+
+msgid "Left Mouse"
+msgstr "Levaya knopka myshi"
+
+msgid "Middle Mouse"
+msgstr "Srednyaya knopka myshi"
+
+msgid "Right Mouse"
+msgstr "Pravaya knopka myshi"
+
+msgid "Wheel Up"
+msgstr "Koleso myshi vverh"
+
+msgid "Wheel Down"
+msgstr "Koleso myshi vniz"
+
+msgid "Mouse Button 6"
+msgstr "Kn.myshi 6"
+
+msgid "Mouse Button 7"
+msgstr "Kn.myshi 7"
+
+msgid "Mouse Button 8"
+msgstr "Kn.myshi 8"
+
+msgid "Mouse Button 9"
+msgstr "Kn.myshi 9"
+
+msgid "Mouse Button 10"
+msgstr "Kn.myshi 10"
+
+msgid "Joystick Button 1"
+msgstr "Kn.joystik 1"
+
+msgid "Joystick Button 2"
+msgstr "Kn.joystik 2"
+
+msgid "Joystick Button 3"
+msgstr "Kn.joystik 3"
+
+msgid "Joystick Button 4"
+msgstr "Kn.joystik 4"
+
+msgid "Joystick Button 5"
+msgstr "Kn.joystik 5"
+
+msgid "Joystick Button 6"
+msgstr "Kn.joystik 6"
+
+msgid "Joystick Button 7"
+msgstr "Kn.joystik 7"
+
+msgid "Joystick Button 8"
+msgstr "Kn.joystik 8"
+
+msgid "Joystick Button 9"
+msgstr "Kn.joystik 9"
+
+msgid "Joystick Button 10"
+msgstr "Kn.joystik 10"
+
+msgid "Joystick Button 11"
+msgstr "Kn.joystik 11"
+
+msgid "Joystick Button 12"
+msgstr "Kn.joystik 12"
+
+msgid "LastButton"
+msgstr "Posl.Kn."
+
+#msgid "Tab"
+#msgstr ""
+
+#msgid "Enter"
+#msgstr ""
+
+msgid "Space"
+msgstr "Probel"
+
+
+#################
+## SUPER FLAGS ##
+#################
+
+msgid "If it's yours, prevent other teams from taking it.  If it's not take it to your base to capture it!"
+msgstr "Esli on vash - za$i$aj ego ot drugih komand, esli chuzhoj, nesi ego na svoyu bazu !"
+
+msgid "High Speed"
+msgstr "Vysokaya skorost'"
+
+msgid "High speed (+V)"
+msgstr "Vysshaya skorost' (+V)"
+
+msgid "Tank moves faster.  Outrun bad guys."
+msgstr "Tank dvizhetsya bystree. Obgonite plohih parnej."
+
+msgid "Quick Turn"
+msgstr "Bystrij povorot"
+
+msgid "Quick Turn (+QT)"
+msgstr "Bystrejshij povorot (+QT)"
+
+msgid "Tank turns faster.  Good for dodging."
+msgstr "Takn povorachivaet bystree. Horosho dlya ukloneniya."
+
+msgid "Oscillation Overthruster"
+msgstr "Skvoznaya ostillyaciya"
+
+msgid "Oscillation Overthruster (+OO)"
+msgstr "Skvoznaya ostillyaciya (+OO)"
+
+msgid "Can drive through buildings.  Can't backup or shoot while inside."
+msgstr "Mozhete proezzhat' skvoz' zdaniya. Nel'zya strelyat' i sohranyat'sya vnutri"
+
+msgid "Rapid Fire"
+msgstr "Bystrij ogon'"
+
+msgid "Rapid Fire (+F)"
+msgstr "Bystrij ogon' (+F)"
+
+msgid "Shoots more often.  Shells go faster but not as far."
+msgstr "Chastaya strel'ba. Snaryady letyat bystree, no ne tak daleko"
+
+msgid "Machine Gun"
+msgstr "Skorostnaya pushka"
+
+msgid "Machine Gun (+MG)"
+msgstr "Skorostnaya pushka (+MG)"
+
+msgid "Very fast reload and very short range."
+msgstr "Ochen' chastaya strel'ba, i ochen' malen'koe porazhenie"
+
+msgid "Guided Missile"
+msgstr "Raketa (PTURS)"
+
+msgid "Guided Missile (+GM)"
+msgstr "Raketa (PTURS) (+GM)"
+
+msgid "Shots track a target.  Lock on with right button.  Can lock on or retarget after firing."
+msgstr "Otslezhivanie celi. Privyazyvaetsya pravoj knopkoj ili klavishej I. Mozhno privyazat' cel', ili izmenit' eyo posle strel'by."
+
+msgid "Laser"
+msgstr "Lazer"
+
+msgid "Laser (+L)"
+msgstr "Lazer  (+L)"
+
+msgid "Shoots a laser.  Infinite speed and range but long reload time."
+msgstr "Strelyaet lazerom. Beskonechnaya skorost' i diapazon, no dolgoe vremya perezaryadki."
+
+msgid "Ricochet"
+msgstr "Rikoshet"
+
+msgid "Ricochet (+R)"
+msgstr "Rikoshet (+R)"
+
+msgid "Shots bounce off walls.  Don't shoot yourself!"
+msgstr "Snaryady otrazhayutsya ot sten. Ne popadite v sebya !"
+
+msgid "Super Bullet"
+msgstr "Super snaryad"
+
+msgid "Super Bullet (+SB)"
+msgstr "Super snaryad (+SB)"
+
+msgid "Shoots through buildings.  Can kill Phantom Zone."
+msgstr "Strel'ba skvoz' zdaniya. Mozhet ubit' tank v fantomnoj zone"
+
+msgid "Invisible Bullet"
+msgstr "Nevidimij snaryad"
+
+msgid "Invisible Bullet (+IB)"
+msgstr "Nevidimij snaryad (+IB)"
+
+msgid "Your shots don't appear on other radars.  Can still see them out window."
+msgstr "Vashi vystrely ne vidny iz radara. No ih mozhno videt' glazami"
+
+msgid "Stealth"
+msgstr "Stells"
+
+msgid "STealth (+ST)"
+msgstr "Stells (+ST)"
+
+msgid "Tank is invisible on radar.  Shots are still visible.  Sneak up behind enemies!"
+msgstr "Tank ne viden na radare. Snaryady po-prezhnemu vidny. Podkradyvajtes' k vragu szadi!"
+
+msgid "Tiny"
+msgstr "Kroshka"
+
+msgid "Tiny (+T)"
+msgstr "Kroshka (+T)"
+
+msgid "Tank is small and can get through small openings.  Very hard to hit."
+msgstr "Tank ochen' malen'kij i mozhet projti cherez ochen' malen'kin otverstiya. Ochen' trudno popast' v nego."
+
+msgid "Narrow"
+msgstr "Uzkij"
+
+msgid "Narrow (+N)"
+msgstr "Uzkij (+N)"
+
+msgid "Tank is super thin.  Very hard to hit from front but is normal size from side.  Can get through small openings."
+msgstr "Tank super tonkij. Ochen' trudno popast' speredi, no imeet normal'nij razmer s boku. Mozhet projti cherez uzkie otverstiya."
+
+msgid "Shield"
+msgstr "$it"
+
+msgid "SHield (+SH)"
+msgstr "$it (+SH)"
+
+msgid "Getting hit only drops flag.  Flag flies an extra-long time."
+msgstr "Pri popadanii, tane tol'ko sbrasyvaet flag. Flag padaet ochen' dolgo."
+
+msgid "Steamroller"
+msgstr "Taran"
+
+msgid "SteamRoller (+SR)"
+msgstr "Taran  (+SR)"
+
+msgid "Destroys tanks you touch but you have to get really close."
+msgstr "Unichtozhaet chuzhoj tank odnim kasaniem. No vy dolzhny podojti k nemu ochen' blizko."
+
+msgid "Shock Wave"
+msgstr "Volna uzhasa"
+
+msgid "Shock Wave (+SW)"
+msgstr "Volna uzhasa (+SW)"
+
+msgid "Firing destroys all tanks nearby.  Don't kill teammates!  Can kill tanks on/in buildings."
+msgstr "Unichtozhaet vse tanki poblizosti. Ne ubejte tovari$ej! Mozhet ubit' tanki na zdaniyah."
+
+msgid "Phantom Zone"
+msgstr "Fantomnaya zona"
+
+msgid "Phantom Zone (+PZ)"
+msgstr "Fantomnaya zona  (+PZ)"
+
+msgid "Teleporting toggles Zoned effect.  Zoned tank can drive through buildings.  Zoned tank shoots Zoned bullets and can't be shot (except by superbullet, shock wave, and other Zoned tanks)."
+msgstr "Teleportaciya tanka v Fantomnuyu zonu. Tank mozhet ehat' skvoz' zdaniya. Tank mozhet strelyat' Fantomnymi snaryadami i ne mozhet byt' podbit (za isklyucheniem Supersnaryada, Volny Uzhasa i vystrela drugogo tanka v fantomnoj zone). "
+
+msgid "Genocide"
+msgstr "Genocid"
+
+msgid "Genocide (+G)"
+msgstr "Genocid (+G)"
+
+msgid "Killing one tank kills that tank's whole team."
+msgstr "Unichtozhaet vsyu komandu podbitogo tanka"
+
+msgid "Jumping"
+msgstr "Pryzhok"
+
+msgid "JumPing (+JP)"
+msgstr "Pryzhok (+JP)"
+
+msgid "Tank can jump.  Use Tab key.  Can't steer in the air."
+msgstr "Tank mozhet prygat' (ispol'zuya klavishu Tab). Ne mozhet letaet v vozduhe"
+
+msgid "Identify"
+msgstr "Identifikaciya"
+
+msgid "IDentify (+ID)"
+msgstr "Identifikaciya (+ID)"
+
+msgid "Identifies type of nearest flag."
+msgstr "Opredelyaet tip blizhajshego flaga."
+
+msgid "Cloaking"
+msgstr "Nevidimka"
+
+msgid "CLoaking (+CL)"
+msgstr "Nevidimka (+CL)"
+
+msgid "Makes your tank invisible out-the-window.  Still visible on radar."
+msgstr "Delaet vas nevilimym v pricele. Vy ostayotes' vidimym na radare"
+
+msgid "Useless"
+msgstr "Bespoleznij"
+
+msgid "USeless (+US)"
+msgstr "Bespoleznij (+US)"
+
+msgid "You have found the useless flag. Use it wisely."
+msgstr "Vy nashli bespoleznij flag. Ispol'zujte ego s umom"
+
+msgid "Masquerade"
+msgstr "Maskirovka"
+
+msgid "MasQuerade (+MQ)"
+msgstr "Maskirovka (+MQ)"
+
+msgid "In opponent's hud, you appear as a teammate."
+msgstr "Vyshi protivniki schitayut vas svoim"
+
+msgid "Seer"
+msgstr "Providec"
+
+msgid "SEer (+SE)"
+msgstr "Providec (+SE)"
+
+msgid "See stealthed, cloaked and masquerading tanks as normal."
+msgstr "Vy vidite skrytye, nevidimye i zamaskirovannye tanki, kak obychnye."
+
+msgid "Thief"
+msgstr "Vorishka"
+
+msgid "THief (+TH)"
+msgstr "Vorishka"
+
+msgid "Steal flags.  Small and fast but can't kill."
+msgstr "Umeet krast' flagi. Malen'kij i bystrij, no ne mozhet ubivat'"
+
+msgid "Burrow"
+msgstr "Podzemnij"
+
+msgid "BUrrow (+BU)"
+msgstr "Podzemnij (+BU)"
+
+msgid "Tank burrows underground, impervious to normal shots, but can be steamrolled by anyone!"
+msgstr "Tank zaryvaetsya pod zemlyu, nedostupen dlya obychnogo vystrela, no mozhet byt' razdavlen lyubym!"
+
+msgid "Wings"
+msgstr "Kryl'ya"
+
+msgid "WinGs (+WG)"
+msgstr "Kryl'ya  (+WG)"
+
+msgid "Tank can drive in air."
+msgstr "Tank mozhet letat'."
+
+msgid "Agility"
+msgstr "Lovkost'"
+
+msgid "Agility (+A)"
+msgstr "Lovkost'  (+A)"
+
+msgid "Tank is quick and nimble making it easier to dodge."
+msgstr "Tank stanovitsya bystrym i provornym, chto pozvolyaet bystro uklonyat'sya"
+
+msgid "ReverseControls"
+msgstr "Obratnoe upravlenie"
+
+msgid "ReverseControls (-RC)"
+msgstr "Obratnoe upravlenie (-RC)"
+
+msgid "Tank driving controls are reversed."
+msgstr "Upravlyaemye klavishi pomenyalis' mestami"
+
+msgid "Colorblindness"
+msgstr "Dal'tonizm"
+
+msgid "ColorBlindness (-CB)"
+msgstr "Dal'tonizm (-CB)"
+
+msgid "Can't tell team colors.  Don't shoot teammates!"
+msgstr "Nel'zya opredelit' cvet igroka. Ne strelyayte v svoih!"
+
+msgid "Obesity"
+msgstr "Tuchnost'"
+
+msgid "Obesity (-O)"
+msgstr "Tuchnost' (-O)"
+
+msgid "Tank becomes very large.  Can't fit through teleporters."
+msgstr "Tank stanovitsya ochen' bol'shim. Ne mozhet proehat' cherez teleport."
+
+msgid "Left Turn Only"
+msgstr "Tol'ko vlevo"
+
+msgid "Left Turn only (-LT)"
+msgstr "Tol'ko vlevo  (-LT)"
+
+msgid "Can't turn right."
+msgstr "Ne mozhete povernut' napravo."
+
+msgid "Right Turn Only"
+msgstr "Tol'ko vpravo"
+
+msgid "Right Turn only (-RT)"
+msgstr "Tol'ko vpravo"
+
+msgid "Can't turn left."
+msgstr "Ne mozhete povernut' nalevo."
+
+msgid "Forward Only"
+msgstr "Tol'ko vpered"
+
+msgid "Forward Only (-FO)"
+msgstr "Tol'ko vpered (-FO)"
+
+msgid "Can't drive in reverse."
+msgstr "Ne mozhete ehat' nazad"
+
+msgid "ReverseOnly"
+msgstr "Tol'ko nazad"
+
+msgid "ReverseOnly (-RO)"
+msgstr "Tol'ko nazad (-RO)"
+
+msgid "Can't drive forward."
+msgstr "Ne mozhete ehat' vperyod"
+
+msgid "Momentum"
+msgstr "Inerciya"
+
+msgid "Momentum (-M)"
+msgstr "Inerciya (-M)"
+
+msgid "Tank has inertia.  Acceleration is limited."
+msgstr "Tank imeet inerciyu. Uskorenie ogranichenno."
+
+msgid "Blindness"
+msgstr "Slepota"
+
+msgid "Blindness (-B)"
+msgstr "Slepota (-B)"
+
+msgid "Can't see out window.  Radar still works."
+msgstr "Vy nichego ne vidite v pricel. Radar ostayotsya rabotosposobnym"
+
+msgid "Jamming"
+msgstr "Pomehi"
+
+msgid "JaMming (-JM)"
+msgstr "Pomehi (-JM)"
+
+msgid "Radar doesn't work.  Can still see."
+msgstr "Radar ne rabotaet, no vy vsyo vidite"
+
+msgid "Wide Angle"
+msgstr "Shirokij obzor"
+
+msgid "Wide Angle (-WA)"
+msgstr "Shirokij obzor (-WA)"
+
+msgid "Fish-eye lens distorts view."
+msgstr "Linzy 'rybij glaz' iskazhayut obzor"
+
+msgid "No Jumping"
+msgstr "Zapret pryzhkov"
+
+msgid "No Jumping (-NJ)"
+msgstr "Zapret pryzhkov (-NJ)"
+
+msgid "Tank can't jump."
+msgstr "Tank ne mozhet prygat'"
+
+msgid "Trigger Happy"
+msgstr "Vesyolaya gashetka"
+
+msgid "Trigger Happy (-TR)"
+msgstr "Vesyolaya gashetka (-TR)"
+
+msgid "Tank can't stop firing."
+msgstr "Tank ne mozhet prekratit' strelyat'"
+
+msgid "Bouncy"
+msgstr "Pruzhinka"
+
+msgid "BouncY (-BY)"
+msgstr "Pruzhinka (-BY)"
+
+msgid "Tank can't stop bouncing."
+msgstr "Tank ne mozhet prekratit' podprygivat'"
+
+msgid " flag"
+msgstr " flag"
+
+####################
+## AUDIO SETTINGS ##
+####################
+
+msgid "Audio Settings"
+msgstr "Nastrojki zvuka"
+
+msgid "Sound Volume:"
+msgstr "Nastrojka gromkosti"
+
+msgid "Unavailable"
+msgstr "Nedostupen"
+
+msgid "Driver:"
+msgstr "Drajver"
+
+msgid "Device:"
+msgstr "Ustrojstvo"
+
+msgid "Remote Sounds:"
+msgstr "Udalyonnye zvuki:"
+
+####################
+## CACHE SETTINGS ##
+####################
+
+msgid "Cache Settings"
+msgstr "Nastrojka keshirovaniya"
+
+msgid "Server List Cache:"
+msgstr "Keshirovanie spiska serverov:"
+
+msgid "Off / Backup Mode"
+msgstr "Vykl / Rezhim sohraneniya"
+
+msgid "5 Minutes"
+msgstr "5 minut"
+
+msgid "15 Minutes"
+msgstr "15 minut"
+
+msgid "30 Minutes"
+msgstr "30 minut"
+
+msgid "1 Hour"
+msgstr "1 chas"
+
+msgid "5 Hours"
+msgstr "5 chasov"
+
+msgid "15 Hours"
+msgstr "15 chasov"
+
+msgid "1 day"
+msgstr "1 den'"
+
+msgid "15 days"
+msgstr "15 dnej"
+
+msgid "30 days"
+msgstr "30 dnej"
+
+msgid "Clear Server List Cache"
+msgstr "Ochistit' kesh spiska serverov"
+
+msgid "Cache Size (MB):"
+msgstr "Razmer kesha (MB):"
+
+msgid "Clear Download Cache"
+msgstr "Ochistit' kesh zagruzki"
+
+msgid "Automatic Downloads:"
+msgstr "Avtomaticheskie zagruzki:"
+
+msgid "Connection Updates:"
+msgstr "Obnovlenie soedinenij"
+
+msgid "Update Downloads"
+msgstr "Obnovlenie zagruzki"
+
+msgid "Updating Downloads"
+msgstr "Obnovlennnye zagruzki"
+
+msgid "Download Cache Cleared"
+msgstr "Ochi$en kesh zagruzki"
+
+msgid "Server List Cache Cleared"
+msgstr "Kesh spiska serverov ochi$en"
+
+######################
+## DISPLAY SETTINGS ##
+######################
+
+msgid "Display Settings"
+msgstr "Nastrojki displeya"
+
+msgid "Dithering:"
+msgstr "Razmytie:"
+
+msgid "Blending:"
+msgstr "Smeshivanie:"
+
+msgid "Smoothing:"
+msgstr "Sglazhivanie:"
+
+msgid "Lighting:"
+msgstr "Osve$enie:"
+
+msgid "None"
+msgstr "Net"
+
+msgid "Fast"
+msgstr "Luchshe"
+
+msgid "Best"
+msgstr "Bystree"
+
+msgid "Texturing:"
+msgstr "Tekstury:"
+
+msgid "Nearest"
+msgstr "Bez fil'tracii"
+
+msgid "Linear"
+msgstr "Linejnaya fil'traciya"
+
+msgid "Nearest Mipmap Nearest"
+msgstr "Prostoj mipmapping"
+
+msgid "Linear Mipmap Nearest"
+msgstr "Linejnij mipmapping"
+
+msgid "Nearest Mipmap Linear"
+msgstr "Prostoj imtmapping s interpolyaciej"
+
+msgid "Linear Mipmap Linear"
+msgstr "Linejnij imtmapping s interpolyaciej"
+
+msgid "AntiFlicker:"
+msgstr "Antifliker:"
+
+msgid "Anisotropic:"
+msgstr "Anizotropnaya fil'traciya:"
+
+msgid "Quality:"
+msgstr "Kachestvo:"
+
+msgid "Low"
+msgstr "Nizkoe"
+
+msgid "Medium"
+msgstr "Srednee"
+
+msgid "High"
+msgstr "Vysokoe"
+
+msgid "Experimental"
+msgstr "Eksperemental'nye"
+
+msgid "Shadows:"
+msgstr "Teni:"
+
+msgid "Stipple"
+msgstr "Mozaika"
+
+msgid "Stencil"
+msgstr "Trafaret"
+
+msgid "Hidden Line:"
+msgstr "Skrytye linii:"
+
+msgid "Wireframe:"
+msgstr "Karkas:"
+
+msgid "Depth Complexity:"
+msgstr "Glubina obrabotki:"
+
+msgid "Culling Tree:"
+msgstr "Derevo ochistki:"
+
+msgid "Collision Tree:"
+msgstr "Derevo kollizij:"
+
+msgid "Brightness:"
+msgstr "Yarkost':"
+
+msgid "Energy Saver:"
+msgstr "Energosberezhenie:"
+
+msgid "Change Video Format"
+msgstr "Izmenit' videoformat"
+
+msgid "Video Format"
+msgstr "Videoformat"
+
+msgid "Current Format:"
+msgstr "Teku$ij format"
+
+msgid "<switching not available>"
+msgstr "<Pereklyuchenie ne dostupno>"
+
+msgid "Press Enter to select and T to test a format. Esc to exit."
+msgstr "Nazhmite Enter dlya vybora, T dlya proverki i Esc dlya vyhoda."
+
+msgid "<unloadable>"
+msgstr "<nezagruzhaemo>"
+
+###############
+## DOWNLOADS ##
+###############
+
+msgid "downloading: "
+msgstr "zagruzka:"
+
+msgid "Downloading texture (%d of %d): %d KB"
+msgstr "Zagruzka tekstur (%d iz %d): %d KB"
+
+msgid "not downloading: "
+msgstr "ne zagruzheno:"
+
+msgid "NOTE: "
+msgstr "Vnimanie:"
+
+msgid "download access is controlled by "
+msgstr "zagruzka upravlyaetsya "
+
+msgid "local denial: "
+msgstr "mestnij zapret:"
+
+######################
+## EFFECTS SETTINGS ##
+######################
+
+msgid "Effects Settings"
+msgstr "Nastrojki effektov"
+
+msgid "Rain:"
+msgstr "Dozhd':"
+
+msgid "Mirror:"
+msgstr "Otrazhenie:"
+
+msgid "Fog:"
+msgstr "Tuman:"
+
+msgid "Nice"
+msgstr "Krasivo"
+
+msgid "Shot Length:"
+msgstr "Dlina vystrela:"
+
+msgid "Display Treads:"
+msgstr "Otobrazhenie gusenic:"
+
+msgid "Animated Treads:"
+msgstr "Animaciya gusenic:"
+
+msgid "Covered"
+msgstr "Zakrytye"
+
+msgid "Exposed"
+msgstr "Otkrytye"
+
+msgid "Track Marks:"
+msgstr "Sledy gusenic:"
+
+msgid "Track Mark Culling:"
+msgstr "Ochistka sledov:"
+
+msgid "Fancy Effects:"
+msgstr "Dekorativnye effekty:"
+
+msgid "Spawn Effect:"
+msgstr "Effekt poyavleniya:"
+
+msgid "Local Spawn Effect:"
+msgstr "Effekt lokal'nogo poyavleniya"
+
+msgid "Same as spawns"
+msgstr "Podobnij poyavleniyu"
+
+msgid "Death Effect:"
+msgstr "Effekt smerti:"
+
+msgid "Shot Fired Effect:"
+msgstr "Effekt vystrela:"
+
+msgid "Local Shot Effect:"
+msgstr "Effekt lokal'nogo vystrela:"
+
+msgid "Same as shots"
+msgstr "Podobnij vystrelu"
+
+msgid "Use Velocity on Shot Effects:"
+msgstr "Uchyot skorosti pri effekte vystrela:"
+
+msgid "Landing Effect:"
+msgstr "Effekt prizemleniya:"
+
+msgid "GM Smoke Effect:"
+msgstr "Effekt dyma PTURS:"
+
+msgid "GM Effect Timing:"
+msgstr "Dlitel'nost' effekta PTURS:"
+
+msgid "  Ricocet Effect:"
+msgstr "  Effekt rikosheta"
+
+msgid "  Teleport Shot Effect:"
+msgstr "  Effekt teleportacii"
+
+msgid "Blossom"
+msgstr "Cvetok"
+
+msgid "Cone"
+msgstr "Konus"
+
+msgid "Rings"
+msgstr "Kol'ca"
+
+msgid "Smoke Rings"
+msgstr "Kol'ca dyma"
+
+msgid "Muzzle Flash"
+msgstr "Vspyshka v stvole"
+
+msgid "Smoke and Flash"
+msgstr "Dym i vspyshka:"
+
+msgid "Classic Puff"
+msgstr "Klassicheskie kluby dyma"
+
+msgid "Shock Cone"
+msgstr "Konus udarnoj volny"
+
+msgid "Smoke"
+msgstr "Dym"
+
+msgid "Fancy Deaths"
+msgstr "Neobychnye smerti"
+
+msgid "Dirt Flash"
+msgstr "Gryaznaya vspyshka"
+
+msgid "Ring"
+msgstr "Kol'co"
+
+#msgid "IDL"
+#msgstr ""
+
+##################
+## GUI SETTINGS ##
+##################
+
+msgid "GUI Settings"
+msgstr "Parametry graficheskogo interfejsa"
+
+msgid "Radar Style:"
+msgstr "Stil' radara:"
+
+msgid "Normal"
+msgstr "Obychnij"
+
+msgid "Fast Sorted"
+msgstr "Bystraya sortirovka"
+
+msgid "Enhanced"
+msgstr "Uluchsheniya:"
+
+msgid "Scoreboard Sort:"
+msgstr "Sortirovka tablo:"
+
+msgid "Always Show Team Scores:"
+msgstr "Vsegda pokazyvat' schyot komandy:"
+
+msgid "Scoreboard Font Size:"
+msgstr "Razmer shrifta tablo"
+
+msgid "Auto"
+msgstr "Avto"
+
+msgid "ControlPanel Font Size:"
+msgstr "Razmer shrifta paneli upravleniya:"
+
+msgid "Extended Observer Info:"
+msgstr "Rasshirennaya informaciya nablyudatelya:"
+
+msgid "On With Apparent Speeds"
+msgstr "Vklyuchenie pokaza skorostej"
+
+msgid "Full"
+msgstr "Polnlst'yu"
+
+msgid "Panel Opacity:"
+msgstr "Neprozrachnost' paneli"
+
+msgid "Radar Opacity:"
+msgstr "Neprozrachnost' radara"
+
+msgid "Colored shots on radar:"
+msgstr "Rascvetka vystrelov na radare"
+
+msgid "Radar Shot Length:"
+msgstr "Dlina vystrela na radare:"
+
+msgid "Radar Shot Size:"
+msgstr "Razmer vystrela na radare:"
+
+msgid "Radar Shot Line:"
+msgstr "Liniya vystrela na radare:"
+
+msgid "Lagging"
+msgstr "Otstayu$ie"
+
+msgid "Leading"
+msgstr "Vedu$ie"
+
+msgid "Leading & Lagging"
+msgstr "Vedu$ie i otstayu$ie"
+
+msgid "Radar Position:"
+msgstr "Razme$enie radara:"
+
+msgid "Left"
+msgstr "Vlevo"
+
+msgid "Right"
+msgstr "Vpravo"
+
+msgid "Radar Size:"
+msgstr "Razmer radara:"
+
+msgid "Panel Height:"
+msgstr "Vysota paneli"
+
+msgid "Mouse Box Size:"
+msgstr "Razmer ramok myshi:"
+
+msgid "Locale:"
+msgstr "Lokal'"
+
+msgid "Default"
+msgstr "Po-umolchaniyu"
+
+msgid "Control panel tabs:"
+msgstr "Zakladki paneli upravleniya:"
+
+msgid "Control panel coloring:"
+msgstr "Rascvetka paneli upravleniya"
+
+msgid "Underline color:"
+msgstr "Cvet podcherkivaniya"
+
+msgid "Cyan"
+msgstr "Cian"
+
+msgid "Grey"
+msgstr "Serij"
+
+msgid "Text"
+msgstr "Tekst"
+
+msgid "Killer Highlight:"
+msgstr "Podsvetka ubijcy"
+
+msgid "Pulsating"
+msgstr "Miganie"
+
+msgid "Underline"
+msgstr "Podchyorkivanie"
+
+msgid "Pulsation Rate:"
+msgstr "Skorost' pulb'sacii"
+
+msgid "Pulsation Depth:"
+msgstr "Glubina pul'sacii"
+
+msgid "Time / Date Display:"
+msgstr "Otobrazhenie daty/vremeni:"
+
+msgid "time"
+msgstr "vremya"
+
+msgid "date"
+msgstr "data"
+
+msgid "both"
+msgstr "data i vremya"
+
+msgid "Reload timer on HUD:"
+msgstr "Tajmer perezaryadki na verhnem tablo"
+
+msgid "Motto Display Length:"
+msgstr "Dlina tablo deviza"
+
+###############
+## HELP MENU ##
+###############
+
+msgid "Page Down for next page"
+msgstr "Page Down na sleduyu$uyu stranicu"
+
+msgid "Page Up for previous page"
+msgstr "Page Up na predydu$uyu stranicu"
+
+msgid "Controls"
+msgstr "Organy upravleniya"
+
+msgid "Mouse Position"
+msgstr "Poziciya myshi"
+
+msgid "Controls Tank Position:"
+msgstr "Upravlenie polozheniem tanka"
+
+msgid "Fires Shot:"
+msgstr "Ogon' vystrela:"
+
+msgid "Drops Flag (if not bad):"
+msgstr "Vybrasyvaniya flaga (ne dlya 'razbojnikov')"
+
+msgid "Identifies Player (locks on GM):"
+msgstr "Identifikaciya igroka (c fiksaciej celi PTURS)"
+
+msgid "Short Radar Range:"
+msgstr "Radar blizhnego dejstviya:"
+
+msgid "Medium Radar Range:"
+msgstr "Radar srednego dejstviya:"
+
+msgid "Long Radar Range:"
+msgstr "Radar dal'nego dejstviya:"
+
+msgid "Zoom Radar In:"
+msgstr "Uvelichenie masshtaba radara"
+
+msgid "Zoom Radar Out:"
+msgstr "Umen'shenie masshtaba radara"
+
+msgid "Send Message to Everybody:"
+msgstr "Otpravit' soob$enie vsem"
+
+msgid "Send Message to Teammates:"
+msgstr "Poslat' soob$enie tovari$am"
+
+msgid "Send Message to Nemesis:"
+msgstr "Poslat' soob$enie vozmezdiya:"
+
+msgid "Send Message to Recipient:"
+msgstr "Poslat' soob$enie adresatu"
+
+msgid "Jump (if allowed):"
+msgstr "Pryzhok (esli razre$yon)"
+
+msgid "Toggle Binoculars:"
+msgstr "Pereklyuchit' binokl'"
+
+msgid "Toggle Score Sheet:"
+msgstr "Pereklyuchit' schyot igry:"
+
+msgid "Toggle Tank Labels:"
+msgstr "Pereklyuchit' metki tankov:"
+
+msgid "Toggle Heads-up Flag Help:"
+msgstr "Pereklyuchit' pomo$' po podnyatomu flagu"
+
+msgid "Set Time of Day Backward:"
+msgstr "Ustanovit' ostavshiesya vremya"
+
+msgid "Set Time of Day Forward:"
+msgstr "Ustanovit' proshedshee vremya"
+
+msgid "Pause/Resume:"
+msgstr "Pauza/Dalee:"
+
+msgid "Self destruct/Cancel:"
+msgstr "Samounichtozhenie/Otmena"
+
+msgid "Quit:"
+msgstr "Vyhod bez sohraneniya:"
+
+msgid "Scroll Message Log Backward:"
+msgstr "Prokrutka soob$enij nazad:"
+
+msgid "Scroll Message Log Forward:"
+msgstr "Prokrutka soob$enij vperyod:"
+
+msgid "Slow Keyboard Motion:"
+msgstr "Umen'shenie pereme$eniya klaviatury"
+
+msgid "Toggle Radar Flags:"
+msgstr "Otobrazhenie flagov na radare"
+
+msgid "Toggle Main Flags:"
+msgstr "Otobrazhenie osnovnyh flagov:"
+
+msgid "Silence/UnSilence:"
+msgstr "Vykl/vkl zvuk:"
+
+msgid "Server Admin:"
+msgstr "Administrator servera:"
+
+msgid "Hunt:"
+msgstr "Ohota:"
+
+msgid "Auto Pilot:"
+msgstr "Avtpilot"
+
+msgid "Main Message Tab:"
+msgstr "Vkladka osnovnyh soob$enij:"
+
+msgid "Chat Message Tab:"
+msgstr "Vkladka chata soob$enij"
+
+msgid "Server Message Tab:"
+msgstr "Vkladka soob$enij servera"
+
+msgid "Misc Message Tab:"
+msgstr "Vkladka prochih soob$enij"
+
+#msgid "Esc"
+#msgstr ""
+
+msgid "Show/Dismiss menu:"
+msgstr "Pokazat'/skryt' menyu"
+
+msgid "<not mapped>"
+msgstr "<ne naznacheno>"
+
+msgid " or "
+msgstr " ili "
+
+msgid "General"
+msgstr "Ob$ee"
+
+msgid "BZFlag is a multi-player networked tank battle game.  There are five teams:"
+msgstr "BZFlag yavlyaetsya mnogopol'zovatel'skoj setevoj igroj bitvy tankov. Est' pyat' komand:"
+
+msgid "red, green, blue, purple, and rogues (rogue tanks are black).  Destroying a"
+msgstr "krasnaya, zelyonaya, golubaya, purpurnaya i 'razbojniki' (u 'razbojnikov' chyornye tanki). Unichtozhenie"
+
+msgid "player on another team scores a win, while being destroyed or destroying a"
+msgstr "igroka iz drugoj komandy zaschityvaetsya kak pobeda, a gibel' ili unichtozhenie"
+
+msgid "teammate scores a loss.  Individual and aggregate team scores are tallied."
+msgstr "svoego zaschityvaetya kak proigrysh. V igre podschityvayutsya ochki igrokov i komand."
+
+msgid "Rogues have no teammates (not even other rogues),so they cannot shoot"
+msgstr "U 'razbojnikov' net svoih (dazhe v svoej komande), poetomu oni mogut strelyat' po vsem"
+
+msgid "teammates and they don't have a team score."
+msgstr "i u nih net komandnogo schyota."
+
+msgid "There are four styles of play, determined by the server configuration:  capture-"
+msgstr "Su$estvuet chetyre stilya igry, opredelyaemyh konfiguraciej servera: zahvat flaga,"
+
+msgid "the-flag, rabbit-chase, free-for-all and open-free-for-all.  In free-for-all the"
+msgstr "pogonya-za-krolikom, proizvol'nij stil' i otkrytij proizvol'nij stil'."
+
+msgid "object is simply to get the highest score by shooting opponents.  In open-free-"
+msgstr "V proizvol'nom stile cel' - prosto nabrat' maksimum ochkov, ubivaya protivnikov."
+
+msgid "for-all highest score is still the goal but there are no teams.  In rabbit chase,"
+msgstr "V otkrytom proizvol'nom stile cel' ta zhe, no net komand. V pogone za krolikom"
+
+msgid "the white tank tries to stay alive while all other tanks try to hunt and kill it."
+msgstr "belij tank pytaetsya vyzhit', togda kak drugie starayutsya pojmat' i ubit' ego."
+
+msgid "The object in capture-the-flag is to capture enemy flags while preventing opponents"
+msgstr "Cel' igry zahvat-flaga - zahvatit' flagi protivnikov i pri etom ne dat' opponentam"
+
+msgid " from capturing yours.  In this style, each team (but not rogues) has a team base"
+msgstr " zahvatit' vashi. V takoj igre u kazhdoj komandy (no ne u 'razbojnikov') est' svoya baza i u kazhdoj"
+
+msgid "and each team with at least one player has a team flag which has the color of the team."
+msgstr "komandy s kak minimum odnim igrokom est' flag komandy, okrashennij v cvet komandy."
+
+msgid "To capture a flag, you must grab it and bring it back to your team base (you must be"
+msgstr "Chtoby zahvatit' flag, vy dolzhny vzyat' i privezti ego na svoyu bazu (chtoby zahvat byl"
+
+msgid "on the ground in your base to register the capture).  Capturing a flag destroys"
+msgstr "zaschitan, vy dolzhny opustit' ego na svoej baze). Pri zahvate flaga unichtozhayutsya"
+
+msgid "all the players on that team and gives your team score a bonus;  the players will"
+msgstr "vse igroki komandy, chej eto flag, a vasha komanda poluchaet ochki; unichtozhennye igroki voznikayut"
+
+msgid "restart on their team base.  Taking your flag onto an enemy base counts as a capture"
+msgstr "na svoej baze svoej komandy. Dostavka vashega flaga na bazu protivnika zaschityvaetsya kak zahvat"
+
+msgid "against your team but not for the enemy team."
+msgstr "v pol'zu komandy protivnika, a ne vashej."
+
+msgid "Environment"
+msgstr "Okruzhayu$ij mir"
+
+msgid "The world environment contains an outer wall and several buildings."
+msgstr "Igrovoj mir sostoit iz vneshnej steny i neskol'kih sooruzhenij."
+
+msgid "You cannot go outside the outer wall (you can't even jump over it)."
+msgstr "Vyehat' za vneshnyuyu stenu nel'zya (eyo nel'zya dazhe pereprygnut')."
+
+msgid "You cannot normally drive or shoot through buildings."
+msgstr "Obychno takzhe nel'zya proezzhat' ili strelyat' skvoz' zdaniya."
+
+msgid "The server may be configured to include teleporters:  large transparent"
+msgstr "Na igrovom servere mogut byt' predusmotreny teleporty: bol'shie prozrachnye "
+
+msgid "black slabs.  Objects entering one side of a teleporter are instantly"
+msgstr "chyornye plity. Ob\"ekty, prohodya$ie s odnoj storony teleporta, mgnovenno"
+
+msgid "moved to one side of another (or possibly the same) teleporter.  The"
+msgstr "pereme$ayutsya v drugoj (a vozmozhno i v tot-zhe) teleport. Teleport obladaet"
+
+msgid "teleport is reversible;  reentering the same side of the destination"
+msgstr "obratnym dejstviem; pri prohozhdenii s obratnoj storony celevogo teleporta"
+
+msgid "teleporter brings you back to where you started.  Teleport connections"
+msgstr "y vozvra$aetes' k nachal'nomu polozheniyu. Soedineniya teleportov"
+
+msgid "are fixed at the start of the game and don't change during the game."
+msgstr "opredelyayutsya na starte igry i ne izmneyutsya v processe igry"
+
+msgid "The connections are always the same in the capture-the-flag style."
+msgstr "V stile zahvat flaga soedineniya vsegda odinakovy"
+
+msgid "Each side of a teleporter teleports independently of the other side."
+msgstr "Raznye storony odnogo teleporta funkcioniruyut nezavisimo drug ot druga."
+
+msgid "It's possible for a teleporter to teleport to the opposite side of"
+msgstr "Inogda teleport mozhet prosto soedinyat' dve ego storony"
+
+msgid "itself.  Such a thru-teleporter acts almost as if it wasn't there."
+msgstr "Fakticheski takoj skvoznoj teleport funkcioniruet tak, kak esli by ego ne bylo."
+
+msgid "A teleporter can also teleport to the same side of itself.  This is a"
+msgstr "Takzhe teleport mozhet teleportitrovat' sam v sebya. Takoj teleport"
+
+msgid "reverse teleporter.  Shooting at a reverse teleporter is likely to be"
+msgstr "nazyvaetsya reversivnym. Popytka strelyat' v takoj teleport skoree vsego"
+
+msgid "self destructive;  shooting a laser at one is invariably fatal."
+msgstr "privedyot k samounichtozheniyu; pri vystrele iz lazera vy obrecheny"
+
+msgid "Flags"
+msgstr "Flagi"
+
+msgid "Flags come in two varieties:  team flags and super flags.  Team flags"
+msgstr "Flagi byvayut dvuh raznovidnostej: flagi komandy i super-flagi. Flagi komandy"
+
+msgid "are used only in the capture-the-flag style.  The server may also be"
+msgstr "ispol'zuyutsya tol'ko v igre zahvat-flaga. Server takzhe mozhet osu$estvlyat'"
+
+msgid "configured to supply super flags, which give your tank some advantage"
+msgstr "sluchajnoe rasmkidyvanie superflagov, dayu$ih tanku nekotoroe preimu$estvo ili naoborot"
+
+msgid "or disadvantage.  You normally can't tell which until you pick one up,"
+msgstr "uhudshenie polozheniya. Bez osobyh sredstv nel'zya opredelit' znachenie flaga,"
+
+msgid "but good flags generally outnumber bad flags two to one."
+msgstr "poka ego ne voz'myosh', no obychno horoshih flagov vdvoe bol'she."
+
+msgid "Team flags are not allowed to be in Bad Places.  Bad Places are:  on"
+msgstr "Flagi komandy ne mogut nahodit'sya v 'plohih' mestah, v chastnosti"
+
+msgid "a building or on an enemy base.  Team flags dropped in a Bad Place are"
+msgstr "na kryshe zdaniya ili na baze vraga. Flagi komandy, broshennye v 'plohom'"
+
+msgid "moved to a safety position.  Captured flags are placed back on their"
+msgstr "meste pereme$ayutsya v novoe mesto. Zahvachennye flagi vozvra$ayutsya"
+
+msgid "team base.  Super flags dropped above a building always disappear."
+msgstr "na bazu svoej komandy. Super-flagi, vybroshennye nad zdaniem vsegda ischezayut."
+
+msgid "A random good super flag will remain for up to 4 possessions.  After"
+msgstr "Sluchajnij horoshij super-flag mozhet byt' vzyat do 4 raz. Posle etogo"
+
+msgid "that it'll disappear and will eventually be replaced by a new random"
+msgstr "takoj flag ischezaet i zamenyaetsya novym sluchajno vybrannym flagom."
+
+msgid "flag.  Bad random super flags disappear after the first possession."
+msgstr "Plohie sluchajnye super-flagi ischezayut posle pervogo vzyatiya."
+
+msgid "Bad super flags can't normally be dropped.  The server can be set to"
+msgstr "Obychno vybrosit' plohoj super-flag nel'zya. Server mozhet byt' nastroen,"
+
+msgid "automatically drop the flag for you after some time, after you destroy"
+msgstr "chto plohoj flag vybrasyvalsya cherez nekotoroe vremya, ili posle unichtozheniya"
+
+msgid "a certain number of enemies, and/or when you grab an antidote flag."
+msgstr "opredelyonnogo chisla vragov i/ili pri vzyatii flaga protivoyadiya. Flagi"
+
+msgid "Antidote flags are yellow and only appear when you have a bad flag."
+msgstr "protivoyadiya okrasheny v zhyoltij cvet i poyavlyayutsya, tol'ko kogda vzyat plohoj flag."
+
+msgid "Good Flags"
+msgstr "Horoshie flagi"
+
+msgid "Good Flags:"
+msgstr "Horoshie flagi:"
+
+msgid "Bad Flags"
+msgstr "Plohie flagi"
+
+msgid "Bad Flags:"
+msgstr "Plohie flagi:"
+
+msgid "Readouts I"
+msgstr "Tablo obzora I"
+
+msgid "The radar is on the left side of the control panel.  It shows an overhead"
+msgstr "V levoj chasti paneli upravleniya nahoditsya radar. On pokazyvaet vid polya"
+
+msgid "x-ray view of the game.  Buildings and the outer wall are shown in light"
+msgstr "sverhu v H-luchah. Zdaniya i vneshnie steny otobrazhayutsya golubym cvetom."
+
+msgid "blue.  Team bases are outlined in the team color.  Teleporters are short"
+msgstr "Bazy komandy ocherchivayutsya cvetom komandy. Teleporty pokazany kak korotkie"
+
+msgid "yellow lines.  Tanks are dots in the tank's team color, except rogues are"
+msgstr "zhyoltye linii. Tanki pokazyvayutsya kak tochki cveta komandy, za isklyucheniem 'razbojnikov',"
+
+msgid "yellow.  The size of the tank's dot is a rough indication of the tank's"
+msgstr "kotorye vydeleny zhyoltym. Po razmeru tochki tanka mozhno primerno opredelit'"
+
+msgid "altitude:  higher tanks have larger dots.  Flags are small crosses.  Team"
+msgstr "vysotu tanka: chem vyshe tank, tem bol'she tochka. Flagi otmecheny krestikami."
+
+msgid "flags are in the team color, superflags are white, and the antidote flag"
+msgstr "flagi komandy okrasheny v cvet komandy, super-flagi belye, a flag protivoyadiya"
+
+msgid "is yellow.  Shots are small dots (or lines or circles, for lasers and"
+msgstr "zhyoltij. Vystrely oboznachayutsya malen'kimi tochkami (ili liniyami ili kruzhkami,"
+
+msgid "shock waves, respectively).  Your tank is always dead center and forward"
+msgstr "dlya lazera ili volny uzhasa, sootvetstvennno). Vash tank vsegda nepodvizhen v"
+
+msgid "is always up on the radar.  The yellow V is your field of view.  North"
+msgstr "centre radara i napravleniyu vperyod vsegda sootvetstvuet vverh na radare."
+
+msgid "is indicated by the letter N."
+msgstr "Zhyoltij ugol V oboznachaet vashe pole zreniya. Sever oboznachen bukvoj N."
+
+msgid "The heads-up-display (HUD) has several displays.  The two boxes in the"
+msgstr "Verhnij displej soderzhit neskol'ko elementov. Dva tablo v centre okna obzora"
+
+msgid "center of the view are the motion control boxes;  within the small box"
+msgstr "predstavlyayut soboj tablo upravleniem dvizheniem, vo vnutrennem malen'kom tablo tank"
+
+msgid "your tank won't move, outside the large box you don't move any faster than"
+msgstr "ne dvigaetsya, za predelami vneshnego bol'shogo tablo on ne budet dvigat'sya bystree, chem"
+
+msgid "at the edge of the large box.  Moving the mouse above or below the small"
+msgstr "u eyo kraya. Pereme$enie ukazatelya myshi vverh ili vniz ot vnutrennego malen'kogo"
+
+msgid "box moves forward or backward, respectively.  Similarly for left and right."
+msgstr "tablo privodit k pereme$eniyu tanka vperyod ili nazad, sootvetstvenno. To zhe samoe"
+
+msgid "The distance away from the small box determines the speed."
+msgstr "s dvizheniem vlevo/vpravo. Skorost' pryamo proporcional'na rasstoyaniyu do centra."
+
+msgid "Readouts II"
+msgstr " Tablo obzora II"
+
+msgid "Above the larger box is a tape showing your current heading.  North is"
+msgstr "Nad bol'shim tablo nahoditsya lenta, pokazyvayu$aya teku$ee napravlenie."
+
+msgid "0, east is 90, etc.  If jumping is allowed or you have the jumping flag,"
+msgstr "Sever - 0, vostok - 90, i t.d. Esli razresheny pryzhki ili vy vzyali flag 'pryzhok',"
+
+msgid "an altitude tape appears to the right of the larger box."
+msgstr "cprava ot vneshnej ramki poyavlyaetsya lenta vysoty."
+
+msgid "Small colored diamonds or arrows may appear on the heading tape.  An"
+msgstr "Na lente napravleniya mogut poyavlyat'sya malen'kie cvetnye romby ili strelki."
+
+msgid "arrow pointing left means that a particular flag is to your left, an"
+msgstr "Strelka, ukazyvayu$aya vlevo, oznachaet, chto trebuemij flag sleva ot vas,"
+
+msgid "arrow pointing right means that the flag is to your right, and a diamond"
+msgstr "a strelka, ukazyvayu$aya vpravo, oznachaet, chto etot flag sprava, a romb"
+
+msgid "indicates the heading to the flag by its position on the heading tape."
+msgstr "pokazyvaet napravlenie na flag, otmechaya ego polozhenie na lente."
+
+msgid "In capture-the-flag mode a marker always shows where your team flag is."
+msgstr "V igre zahvat-flaga marker vsegda pokazyvaet, gde nahoditsya flag vashej komandy."
+
+msgid "A yellow marker shows the way to the antidote flag."
+msgstr "Zhyoltij marker pokazyvaet put' k flagu protivoyadiya."
+
+msgid "At the top of the display are, from left to right, your callsign and"
+msgstr "V verhnej chasti, sprava nalevo, pokazany vash pozyvnoj, schyot,"
+
+msgid "score, your status, and the flag you have.  Your callsign is in the"
+msgstr "status, i kakoj flag u vas est'. Vash pozyvnoj okrashen v cvet"
+
+msgid "color of your team.  Your status is one of:  ready, dead, sealed, zoned"
+msgstr "vashejyyyyy komandy. Vash status mozhet byt' sleduyu$im: gotov, ubit, v pomehah, "
+
+msgid "or reloading (showing the time until reloaded).  It can also show the"
+msgstr "v fantonmnoj zone ili perezaryadka (i vremya do gotovnosti). Takzhe tut mozhet otobrazhat'sya"
+
+msgid "time until a bad flag is dropped (if there's a time limit)."
+msgstr "vremya do vybrasyvaniya plohogo flaga (esli vremya vladeniya takimi flagami ogranicheno)."
+
+msgid "Other informational messages may occasionally flash on the HUD."
+msgstr "Na etom tablo takzhe mogut poyavlyat'sya drugie informacionnye soob$eniya."
+
+msgid "Credits"
+msgstr "Blagodarnosti"
+
+msgid "Maintainer:"
+msgstr "Mantejner"
+
+msgid "Original Author:"
+msgstr "Avtor"
+
+msgid "Code Contributors:"
+msgstr "Uchastniki razrabotki:"
+
+msgid "Tank Models:"
+msgstr "Modeli tankov:"
+
+msgid "Special Thanks:"
+msgstr "Osobaya blagodarnost':"
+
+msgid "BZFlag Home Page:"
+msgstr "Domashnij sajt BZFlag"
+
+#msgid "Copyright (c) 1993-2016"
+#msgstr ""
+
+
+####################
+## HUD RENDERERER ##
+####################
+
+# Translated input events are not working here
+msgid "Press %s to start"
+msgstr "Nazhmite %s dlya starta"
+
+msgid "Press Pause to resume"
+msgstr "Nazhmite Pause dlya prodolzheniya"
+
+msgid "AutoPilot on"
+msgstr "Avtopilot vklyuchen"
+
+msgid "Press Destruct to cancel"
+msgstr "Nazhmite Destruct dlya otmeny"
+
+msgid "GAME OVER"
+msgstr "IGRA OKONChENA"
+
+msgid "Send:"
+msgstr "Poslat':"
+
+msgid "Target Info"
+msgstr "Informaciya o celi"
+
+msgid "Position [%d %d %d]"
+msgstr "Koordinaty [%d %d %d]"
+
+msgid "Linear Speed:"
+msgstr "Linejnaya skorost':"
+
+msgid "Vertical Speed:%5.2f"
+msgstr "Vertikal'naya skorost':%5.2f"
+
+msgid "Vertical Speed:%5.2f(%5.2f)"
+msgstr "Vertikal'naya skorost'::%5.2f(%5.2f)"
+
+msgid "Angular Speed:"
+msgstr "Uglovaya skorost'"
+
+msgid "Last Shot Info  Time:%6.4f  Deviation:%6.3f"
+msgstr "Poslednij vystrel Vremya:%6.4f Otklonenie:%6.3f"
+
+msgid "ReportedHits %d ComputedHits %d ratio %f"
+msgstr "Reported popadaniya %d Computed popadaniya %d sootnoshenie %f"
+
+msgid "Dead"
+msgstr "Ubit"
+
+msgid "Ready"
+msgstr "Gotov"
+
+msgid "Reloaded in %.1f"
+msgstr "Perezaryadka v %.1f"
+
+msgid "Sealed"
+msgstr "Pomehi"
+
+msgid "Zoned"
+msgstr "Fantom"
+
+msgid "FPS: %d"
+msgstr "FPS: %d"
+
+msgid "rtris: %i"
+msgstr "rtris: %i"
+
+msgid "tris: %i"
+msgstr "tris: %i"
+
+msgid "time: %dms"
+msgstr "vremya"
+
+###############
+## JOIN MENU ##
+###############
+
+msgid "Join Game"
+msgstr "Prisoedinit'sya k igre"
+
+msgid "Find Server"
+msgstr "Najti server"
+
+msgid "Connect"
+msgstr "Soedinenie"
+
+msgid "Callsign:"
+msgstr "Pozyvnoj:"
+
+msgid "Password:"
+msgstr "Parol':"
+
+msgid "Team:"
+msgstr "Komanda:"
+
+msgid "Server:"
+msgstr "Server:"
+
+msgid "Port:"
+msgstr "Port:"
+
+msgid "Motto:"
+msgstr "Deviz:"
+
+msgid "Start Server"
+msgstr "Zapusk servera"
+
+msgid "You must enter a callsign."
+msgstr "Vy dolzhny vvesti pozyvnoj."
+
+msgid "You must enter a server."
+msgstr "Vy dolzhny vvesti imya servera."
+
+msgid "Port is invalid.  Try %d."
+msgstr "Nepravil'nij port. Popytka %d."
+
+msgid "Trying..."
+msgstr "Vypolnenie..."
+
+##########
+## TEAM ##
+##########
+
+msgid "Automatic"
+msgstr "Avtomaticheski"
+
+msgid "Rogue"
+msgstr "Razbojniki"
+
+msgid "Red Team"
+msgstr "Krasnaya komanda"
+
+msgid "Green Team"
+msgstr "Zelyonaya komanda"
+
+msgid "Blue Team"
+msgstr "Sinyaya komanda"
+
+msgid "Purple Team"
+msgstr "Purpurnaya komanda"
+
+msgid "Observer"
+msgstr "Nablyudatel'"
+
+msgid "Rabbit"
+msgstr "Krolik"
+
+msgid "Hunter"
+msgstr "Ohotnik"
+
+msgid "No Team??"
+msgstr "Net kommandy ???"
+
+msgid "Invalid team"
+msgstr "Nepravil'nij vvod komandy"
+
+####################
+## INPUT SETTINGS ##
+####################
+
+msgid "Input Settings"
+msgstr "Nastrojki vvoda"
+
+msgid "Change Key Mapping"
+msgstr "Izmenit' nastrojku klavish"
+
+msgid "Joystick device:"
+msgstr "Joystik:"
+
+msgid "Active input device:"
+msgstr "Aktivnye ustrojstva vvoda:"
+
+msgid "Force feedback:"
+msgstr "Otdacha joyjstika:"
+
+msgid "Rumble"
+msgstr "Shumy"
+
+msgid "Directional"
+msgstr "Napravlennij"
+
+msgid "Joystick X Axis:"
+msgstr "Os' X joyjstika:"
+
+msgid "Joystick Y Axis:"
+msgstr "Os' Y joyjstika:"
+
+msgid "Confine mouse:"
+msgstr "ogranichenie myshi:"
+
+msgid "Window"
+msgstr "Pricel"
+
+msgid "MotionBox"
+msgstr "Okno Deviza"
+
+msgid "Jump while typing:"
+msgstr "Pryzhok pri nabore:"
+
+#######################
+## KEYBOARD MAP MENU ##
+#######################
+
+msgid "Key Mapping"
+msgstr "Privyazka klavish"
+
+msgid "Use up/down arrows to navigate, enter key to enter edit mode"
+msgstr "Strelki vverh/vniz - vybor, Enter - izmenenie"
+
+msgid "Reset Defaults"
+msgstr "Sbros na umolchaniya"
+
+msgid "Fire shot:"
+msgstr "Vystrel:"
+
+msgid "Drop flag:"
+msgstr "Brosit' flag:"
+
+msgid "Identify/Lock On:"
+msgstr "Identificirovat'/Zakreplyat':"
+
+msgid "Radar Short:"
+msgstr "Malen'kij radar"
+
+msgid "Radar Medium:"
+msgstr "Srednij radar"
+
+msgid "Radar Long:"
+msgstr "Bol'shoj radar"
+
+msgid "Radar Zoom In:"
+msgstr "Uvelichit' masshtaba radara"
+
+msgid "Radar Zoom Out:"
+msgstr "Umen'shit' masshtaba radara"
+
+msgid "Send to All:"
+msgstr "Poslat' vsem"
+
+msgid "Send to Teammates:"
+msgstr "Poslat' svoim"
+
+msgid "Send to Nemesis:"
+msgstr "Poslat' obidchiku"
+
+msgid "Send to Recipient:"
+msgstr "Poslat' adresatu"
+
+msgid "Send to Admin:"
+msgstr "Poslat' adminu"
+
+msgid "Jump:"
+msgstr "Pryzhok"
+
+msgid "Binoculars:"
+msgstr "Binokl'"
+
+msgid "Toggle Score:"
+msgstr "Tumbler ocenki:"
+
+msgid "Toggle Radar:"
+msgstr "Tumbler radara:"
+
+msgid "Toggle Console:"
+msgstr "Tumbler konsoli:"
+
+msgid "Tank Labels:"
+msgstr "Metki tankov:"
+
+msgid "Flag Help:"
+msgstr "Pomo$' po flagu:"
+
+msgid "Time Forward:"
+msgstr "Vremya vperyod:"
+
+msgid "Time Backward:"
+msgstr "Vremya nazad:"
+
+msgid "Self Destruct/Cancel:"
+msgstr "Samopodryv/Prervat':"
+
+msgid "Fast Quit:"
+msgstr "Bystrij Vyhod:"
+
+msgid "Scroll Backward:"
+msgstr "Prokrutka nazad:"
+
+msgid "Scroll Forward:"
+msgstr "Prokrutka vpered:"
+
+msgid "Scroll Bottom:"
+msgstr "Prokrutka vniz:"
+
+msgid "Toggle Flags On Radar:"
+msgstr "tumbler flanov na radare:"
+
+msgid "Toggle Flags On Field:"
+msgstr "tumbler flagov v pricele:"
+
+msgid "Silence/UnSilence Key:"
+msgstr "Klyuch tishiny/zvuka"
+
+msgid "Server Command Key:"
+msgstr "Klyuch komand serveru:"
+
+msgid "Hunt Key:"
+msgstr "Klyuch ohoty:"
+
+msgid "Add/Modify Hunt Key:"
+msgstr "Dobavit'/izmenit' klyuch ohoty:"
+
+msgid "AutoPilot Key: "
+msgstr "Klyuch avtopilota"
+
+msgid "Main Message Tab: "
+msgstr "Okno osnovnyh soob$enij:"
+
+msgid "Chat Message Tab: "
+msgstr "Vkladka chata:"
+
+msgid "Server Message Tab: "
+msgstr "Vkladka soob$enij servera:"
+
+msgid "Misc Message Tab: "
+msgstr "Vkladka prochih soob$enij"
+
+msgid "Forward Key: "
+msgstr "Knopka vperyod:"
+
+msgid "Reverse Key: "
+msgstr "Knopka nazad:"
+
+msgid "Left Key: "
+msgstr "Knopka vlevo:"
+
+msgid "Right Key: "
+msgstr "Knopka vpravo:"
+
+msgid "Restart:"
+msgstr "Perezapusk:"
+
+msgid "Iconify:"
+msgstr "Svernut'"
+
+msgid "Fullscreen:"
+msgstr "Polnij ekran"
+
+msgid "Screenshot:"
+msgstr "Skrinshot"
+
+msgid "Define Quick Keys"
+msgstr "Opredelit' bystye knopki"
+
+msgid "Notice: depending on platform not all keys might work"
+msgstr "Primechanie: v zavisimosti ot platformy ne vse klavishi mogut rabotat'"
+
+msgid "Send to All"
+msgstr "Poslat' vsem"
+
+msgid "Send to Team"
+msgstr "Poslat' svoim"
+
+###############
+## MAIN MENU ##
+###############
+
+msgid "Up/Down arrows to move, Enter to select, Esc to dismiss"
+msgstr "Strelki - pereme$enie, Enter - vybor, Esc - otmena"
+
+msgid "Options"
+msgstr "Nastrojki"
+
+msgid "Save Settings"
+msgstr "Sohranit' parametry"
+
+msgid "Leave Game"
+msgstr "Pokinut' igru"
+
+msgid "Quit"
+msgstr "Vyhod bez sohraneniya"
+
+###############
+## QUIT MENU ##
+###############
+
+msgid "Enter to quit, Esc to resume"
+msgstr "Nazhmite Enter dlya vyoda, ili Esc dlya otmeny"
+
+msgid "Really quit?"
+msgstr "Hotite vijti?"
+
+#############
+## OPTIONS ##
+#############
+
+msgid "Save Settings:"
+msgstr "Sohranit' nastrojki"
+
+msgid "On Exit"
+msgstr "Vyhod vklyuchen"
+
+msgid "Save identity:"
+msgstr "Sohranit' identifikaciyu"
+
+msgid "Username only"
+msgstr "Tol'ko imya"
+
+msgid "Username and password"
+msgstr "Imya i parol'"
+
+################
+## SAVE WORLD ##
+################
+
+msgid "Save World"
+msgstr "Sohranit' kartu"
+
+msgid "File Name:"
+msgstr "imya fajla"
+
+msgid "No world loaded to save"
+msgstr "Net zagruzhennoj karty dlya sohraneniya"
+
+msgid "World Saved: "
+msgstr "Sohranyonnye karty:"
+
+msgid "Error Saving: "
+msgstr "Oshibka sohraneniya"
+
+######################################
+## MESSAGE OF THE DAY & NEW VERSION ##
+######################################
+
+msgid "MOTD contains unexpected data"
+msgstr "Deviz soderzhit nepodderzhivaaemye simvoly"
+
+msgid "<not available>"
+msgstr "<net v nalichii>"
+
+msgid "UPGRADE: "
+msgstr "Obnovlenie:"
+
+msgid "Message of the day: "
+msgstr "Soob$enie dnya:"
+
+msgid "A new version of BZFlag has been released!"
+msgstr "Pora obnovlyat'sya, poyavilas' novaya versiya BZFlag!"
+
+msgid "Would you like to upgrade now?"
+msgstr "Hotite obnovit' igru?"
+
+msgid "(Download and install: "
+msgstr "(Zagruzka i ustanovka: "
+
+msgid "Yes!"
+msgstr "Da!"
+
+msgid "Not yet"
+msgstr "E$yo net"
+
+msgid "Please upgrade as soon as possible."
+msgstr "Pozhalusta, obnovite kak mozhno bystree"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Downloading update: %d/%d KB"
+msgstr "Zagruzkak obnovleniya: %d/%d KB"
+
+msgid "Failed... can't find upgrade installer."
+msgstr "Neudacha... ne najdena programma obnovleniya"
+
+msgid "Failed... not enough memory."
+msgstr "Neudacha... ne hvatilo pamyati."
+
+msgid "Failed... installer is not executable."
+msgstr "Neudacha... programma obnovleniya ne ispolnyaemaya"
+
+msgid "Failed... unknown error (%d)."
+msgstr "Neudacha... oshibka (%d)."
+
+msgid "Failed to start upgrade installer (%s) - error %d.\n"
+msgstr "Neudachnij start programmy ustanovki (%s) - oshibka %d.\n "
+
+msgid "Installer started."
+msgstr "Installyator zapu$en"
+
+msgid "Download Failed!"
+msgstr "Neudachnaya zagruzka"
+
+msgid "Downloading update: 8888/8888 KB"
+msgstr "Zagruzka obnovleniya: 8888/8888 KB "
+
+#############
+## ROAMING ##
+#############
+
+msgid "Roaming::changeTarget() no world, switching to free roaming\n"
+msgstr "Rouming::changeTarget() net karty, pereklyuchenie na svobodnij poisk\n"
+
+msgid "Rabbit "
+msgstr "Krolik "
+
+msgid "Tracking "
+msgstr "Slezhenie "
+
+msgid "Following "
+msgstr "Poputchik "
+
+msgid "Driving with "
+msgstr "Vozhdenie s"
+
+msgid " Flag"
+msgstr " Flag "
+
+msgid "Roaming"
+msgstr "Stranstvie"
+
+#################
+## SCORE BOARD ##
+#################
+
+msgid "Score"
+msgstr "Schyot"
+
+msgid "888~888 Hunt->"
+msgstr "888~888 popadanij->"
+
+msgid " Kills"
+msgstr " Ubito"
+
+msgid "Player"
+msgstr "Igrok"
+
+msgid "[Score]"
+msgstr "[Schyot]"
+
+msgid "[Normalized Score]"
+msgstr "[Normalizovannij schyot]"
+
+msgid "[Reverse Score]"
+msgstr "[Obratnij schyot]"
+
+msgid "[Callsign]"
+msgstr "[Pozyvnoj]"
+
+msgid "[Team Kills]"
+msgstr "[Ubito komandoj]"
+
+msgid "[TK ratio]"
+msgstr "[UK otnoshenie]"
+
+msgid "[Team]"
+msgstr "[Komanda]"
+
+msgid "[1on1]"
+msgstr "[1 na 1]"
+
+msgid "Hunt->"
+msgstr "Popadaniya->"
+
+msgid "Team Score"
+msgstr "Schyot komandy"
+
+msgid "Team Flags"
+msgstr "Flagi komandy"
+
+msgid "TK Leader "
+msgstr "Lider komandy"
+
+msgid "TK Ratio Leader "
+msgstr "Lider komandy po UK otnosheniyu"
+
+msgid "Leader "
+msgstr "Lider"
+
+#####################
+## SERVER COMMANDS ##
+#####################
+
+msgid "Kick -> "
+msgstr "Udar -> "
+
+msgid "Kill -> "
+msgstr "Ubit -> "
+
+msgid "Set players group "
+msgstr "Zadat' gruppu igrokov "
+
+msgid "Remove player from group "
+msgstr "Isklyuchit' igroka iz gruppy"
+
+msgid "Ghost player [enter your pass] "
+msgstr "Prizrachnij igrok [vvedite vash parol']"
+
+msgid "Show player's groups "
+msgstr "Pokazat' igrokov gruppy"
+
+msgid "Kick :"
+msgstr "Udarov :"
+
+msgid "Kill :"
+msgstr "Ubito :"
+
+msgid "Ban :"
+msgstr "Ban :"
+
+msgid "Set player's group :"
+msgstr "Zadat' gruppu igrokov :"
+
+msgid "Remove player from group :"
+msgstr "Isklyuchit' igroka iz gruppy"
+
+msgid "Ghost :"
+msgstr "Prizrak :"
+
+msgid "Show players group :"
+msgstr "Pokazat' igrokov gruppy :"
+
+msgid "Unban :"
+msgstr "Razbanit' :"
+
+msgid "Show ban list"
+msgstr "Pokazat' spisok banov :"
+
+msgid "Show player list"
+msgstr "Pokazat' spisok igrokov"
+
+msgid "Reset Flags"
+msgstr "Sbrosit' flagi"
+
+msgid "Reset Unused Flags"
+msgstr "Sbrosit' neispol'zovannye flagi"
+
+msgid "Remove Flags"
+msgstr "Udalit' flagi"
+
+msgid "End Game"
+msgstr "Konec Igry"
+
+msgid "Restart Countdown:"
+msgstr "Perezapusk obratnogo otschyota:"
+
+msgid "Show Flag Info"
+msgstr "Pokazat' informaciyu o flagah"
+
+msgid "Shut Down Server"
+msgstr "Vyklyuchit' server"
+
+msgid "Disconnect all Players"
+msgstr "Otklyuchit' vseh igrokov"
+
+msgid "Lag Warning threshold:"
+msgstr "Porog preduprezhdeniya o lage"
+
+msgid "Maximum lag warnings:"
+msgstr "Preduprezhdenie o maksimal'nom lage"
+
+msgid "Idle Stats"
+msgstr "Prostaya statistika"
+
+msgid "Client Version Query"
+msgstr "Zapros versii klienta"
+
+msgid "Lag / Ping Stats"
+msgstr "Sostoyanie laga / pinga"
+
+msgid "Flag History"
+msgstr "Istoriya flagov"
+
+msgid "Admin Password:"
+msgstr "Parol' administratora"
+
+msgid "Send Report to Server:"
+msgstr "Poslat' soob$enie na server"
+
+msgid "List Groups"
+msgstr "Spisok grupp"
+
+msgid "List Permissions"
+msgstr "Spisok razreshenij"
+
+msgid "Vote:"
+msgstr "Golos:"
+
+msgid "Call a Poll:"
+msgstr "Zapros golosovaniya"
+
+msgid "Cancel a Poll"
+msgstr "Prervat' golosovanie"
+
+#################
+## SERVER LINK ##
+#################
+
+msgid "Remote %s\n"
+msgstr "Udalyonnye servera %s\n"
+
+msgid "Connected Event"
+msgstr "Sobytiya soedineniya"
+
+msgid "CONNECT:send in connect returned %d\n"
+msgstr "SOEDINENIE: vernulos' zaprosov na soedinenie %d\n"
+
+msgid "CONNECT:select in connect failed, nfound = %d\n"
+msgstr "SOEDINENIE:vybrannoe soedinenie neudachno, najdeno = %d\n"
+
+msgid "CONNECT:got net data in connect, bytes read = %d\n"
+msgstr "SOEDINENIE:poluchenie dannyh po seti, polucheno  %d bajt\n"
+
+msgid "CONNECT:Time To Connect = %f\n"
+msgstr "SOEDINENIE:Vremya soedineniya "
+
+msgid "CONNECT:connect time out failed\n"
+msgstr "SOEDINENIE:tamaut soedineniya\n"
+
+msgid "CONNECT:connect loop count = %d\n"
+msgstr "CONNECT:chislo soedinenij po petle  = %d\n"
+
+msgid "Error writing on packetStream"
+msgstr "Oshibka zapisi potoka paketov"
+
+msgid "Server network statistics:\n"
+msgstr "Setevaya statistika servera"
+
+msgid "  elapsed time    : %f\n"
+msgstr "  proshlo  vremyani    : %f\n"
+
+msgid "  bytes sent      : %d (%f/sec)\n"
+msgstr "  bajtov otoslano      : %d (%f/sek)\n"
+
+msgid "  packets sent    : %d (%f/sec)\n"
+msgstr "  paketov otoslano    : %d (%f/sek)\n"
+
+msgid "  bytes/packet    : %f\n"
+msgstr "  bajt/paket    : %f\n"
+
+msgid "  bytes recieved  : %d (%f/sec)\n"
+msgstr "  bajtov polucheno  : %d (%f/sec)\n"
+
+msgid "  packets received: %d (%f/sec)\n"
+msgstr "  paketov polucheno: %d (%f/sec)\n"
+
+msgid "<** UDP Packet Code %x Len %x\n"
+msgstr "<** UDP Kod paketa %x dlina %x\n"
+
+msgid "Fallback to normal TCP receive"
+msgstr "Vozvrat k obychnomu priyomu TCP"
+
+msgid "Communication error joining game [No immediate respose]."
+msgstr "Oshibka ustanovki svyazi s igroj [net nemedlennogo otveta]"
+
+msgid "Server forced disconnection."
+msgstr "Prinuditel'noe otklyuchenie ot servera"
+
+msgid "Error: getsockname() failed, cannot get TCP port?"
+msgstr "Oshibka: neudacha getsockname(), ne mozhet poluchit' TCP port?"
+
+msgid "Network: Created local UDP downlink port {1}"
+msgstr "Set': Sozdan lokal'nij UDP port {1}"
+
+msgid "Error: Unable to set NonBlocking for UDP receive socket"
+msgstr "Oshibka: Ne poluchaetsya poluchit' neblokiruemvy soket UDP"
+
+msgid "Server got our UDP, using UDP to server"
+msgstr "Server poluchil vashe UDP, ispol'zuem server UDP"
+
+msgid "Got server's UDP packet back, server using UDP"
+msgstr "Ot servera poluchen otvet po UDP, ispol'zuem server UDP"
+
+msgid "Servers"
+msgstr "Servera"
+
+#######################
+## SERVER START MENU ##
+#######################
+
+msgid "Players"
+msgstr "Igroki"
+
+msgid "Red"
+msgstr "Krasnye"
+
+msgid "Green"
+msgstr "Zelyonye"
+
+msgid "Blue"
+msgstr "Sinie"
+
+msgid "Purple"
+msgstr "Purpurnye"
+
+msgid "Observers"
+msgstr "Nablyudateli"
+
+msgid "Press  +/- add/remove favorites   f - toggle view"
+msgstr "Nazhimajte +/- dlya dobavleniya-udaleniya favoritov f - tumbler obzora"
+
+msgid "Edit Filter:"
+msgstr "Fil'tr redaktirovaniya:"
+
+msgid "Press '/' to search"
+msgstr "Nazhmite '/' dlya poiska"
+
+msgid "Using filter:"
+msgstr "Ispol'zuemye fil'try:"
+
+msgid "{1} Shot"
+msgstr "{1} vystrel"
+
+msgid "{1} Shots"
+msgstr "{1} vystrely"
+
+msgid "Classic Capture-the-Flag"
+msgstr "Pogonya za flagom"
+
+msgid "Rabbit Chase"
+msgstr "Ohota na krolika"
+
+msgid "Open (Teamless) Free-For-All"
+msgstr "Otkrytaya komandnaya dlya vseh"
+
+msgid "Free-style"
+msgstr "Svobodnij stil'"
+
+msgid "Super Flags"
+msgstr "Super flagi"
+
+msgid "Antidote Flags"
+msgstr "Antidot flagi"
+
+msgid "{1} sec To Drop Bad Flag"
+msgstr "{1} sek do vybrosa fdaga"
+
+msgid "{1} secs To Drop Bad Flag"
+msgstr "{1} sek-d do vybrosa fdaga"
+
+msgid "{1} Win Drops Bad Flag"
+msgstr "{1} Pobeda dlya vybrosa flaga"
+
+msgid "{1} Wins Drops Bad Flag"
+msgstr "{1} Pobed dlya vybrosa flaga"
+
+msgid "Handicap"
+msgstr "Fora"
+
+msgid "Time limit: {1}"
+msgstr "Limit vremeni: {1}"
+
+msgid "Max team score: {1}"
+msgstr "Maksimal'nij schyot komandy: {1}"
+
+msgid "Max player score: {1}"
+msgstr "Vfrcbvfkmysq cx`n buhjrf"
+
+msgid "Cached"
+msgstr "Kesh"
+
+msgid "Searching"
+msgstr "Poisk"
+
+msgid "Favorite servers: {1}/{2}  ({3} players, {4} observers)"
+msgstr "Vedu$ie servera: {1}/{2}  ({3} igrokov, {4} nablyudatelej)"
+
+msgid "Servers found: {1}/{2}  ({3} players, {4} observers)"
+msgstr "Serverov najdeno: {1}/{2}  ({3} igrokov, {4} nablyudatelej) "
+
+msgid "Style:"
+msgstr "Stil'"
+
+msgid "Capture the Flag"
+msgstr "Zahvat flaga"
+
+msgid "Free for All"
+msgstr "Svobodnaya igra"
+
+msgid "Rabbit Hunt (Random Selection)"
+msgstr "Ohota na krolika (sluchajnij vybor)"
+
+msgid "Rabbit Hunt (Score-based Selection)"
+msgstr "Ohota na krolika (vybor po schyotu)"
+
+msgid "Rabbit Hunt (Killer Selection)"
+msgstr "Ohota na krolika (vybor ubijcy)"
+
+msgid "Max Players:"
+msgstr "Maks. Igrokov"
+
+msgid "Max Shots:"
+msgstr "Maksimum igrokov:"
+
+msgid "Teleporters:"
+msgstr "Teleorty"
+
+msgid "no"
+msgstr "net"
+
+msgid "yes"
+msgstr "da"
+
+msgid "Ricochet:"
+msgstr "Rikoshet"
+
+msgid "Jumping:"
+msgstr "Pryzhok"
+
+msgid "Handicap:"
+msgstr "Fora "
+
+msgid "Superflags:"
+msgstr "Super flag"
+
+msgid "good flags only"
+msgstr "tol'ko horoshie flagi"
+
+msgid "all flags"
+msgstr "vse flagi"
+
+msgid "Max Superflags:"
+msgstr "Maks Superflagov"
+
+msgid "Bad Flag Antidote:"
+msgstr "Antidoty plohih flagov"
+
+msgid "Bad Flag Time Limit:"
+msgstr "Vremya dejstviya plohogo flaga"
+
+msgid "no limit"
+msgstr "bez ogranicheniya"
+
+msgid "15 seconds"
+msgstr "15 sekund"
+
+msgid "30 seconds"
+msgstr "30 sekund"
+
+msgid "60 seconds"
+msgstr "60 sekund"
+
+msgid "180 seconds"
+msgstr "180 sekund"
+
+msgid "Bad Flag Win Limit:"
+msgstr "Chislo pobed dlya plogoho flaga"
+
+msgid "drop after 1 win"
+msgstr "Padaet posle odnoj pobedy"
+
+msgid "drop after 2 wins"
+msgstr "Padaet posle dvuh pobed"
+
+msgid "drop after 3 wins"
+msgstr "Padaet posle 3 pobed"
+
+msgid "Game Over:"
+msgstr "Okonchanie igry"
+
+msgid "never"
+msgstr "Nikogda"
+
+msgid "after 5 minutes"
+msgstr "Posle 5 minut"
+
+msgid "after 15 minutes"
+msgstr "Posle 15 minut"
+
+msgid "after 60 minutes"
+msgstr "Posle 60 minut"
+
+msgid "after 3 hours"
+msgstr "Posle 3-h chasov"
+
+msgid "when a player gets +3"
+msgstr "Kogda igrok poluchil +3"
+
+msgid "when a player gets +10"
+msgstr "Kogda igrok poluchil +10"
+
+msgid "when a player gets +25"
+msgstr "Kogda igrok poluchil +25"
+
+msgid "when a team gets +3"
+msgstr "Kogda komanda poluchila +3"
+
+msgid "when a team gets +10"
+msgstr "Kogda komanda poluchila +10"
+
+msgid "when a team gets +25"
+msgstr "Kogda komanda poluchila +25"
+
+msgid "when a team gets +100"
+msgstr "Kogda komanda poluchila +100"
+
+msgid "Server Reset:"
+msgstr "Perezagruzka servera"
+
+msgid "no, quit after game"
+msgstr "net, vyhod posle igry"
+
+msgid "yes, reset for more games"
+msgstr "da, perezagruzka igr"
+
+msgid "World Map:"
+msgstr "Karta Mira"
+
+msgid "random map"
+msgstr "Sluchajnaya karta"
+
+msgid "Start"
+msgstr "Start"
+
+msgid "Failed... can't find server program."
+msgstr "Neudacha... ne mogu najti programmu servera"
+
+msgid "Failed... server program is not executable."
+msgstr "Neudacha... programma servera neispolnyaemaya"
+
+msgid "Failed to start server (%s) - error %d.\n"
+msgstr "Neudacha zapuska servera (%s) - oshibka %d.\n"
+
+msgid "Server started."
+msgstr "Zapusk servera"
+
+msgid "Failed... cannot fork."
+msgstr "Nudacha... ne mogu vypolnit' fork."
+
+msgid "Failed (exit = %i)."
+msgstr "Neudacha (vyhod = %i)."
+
+msgid "Failed (signal = %i)."
+msgstr "Neudacha (signal = %i)."
+
+msgid "Failed."
+msgstr "Neudacha"
+
+msgid "localhost"
+msgstr "localhost"
+
+################
+## STATISTICS ##
+################
+
+msgid "Shot Statistics"
+msgstr "Statistika strel'by"
+
+msgid "Shots Hit/Fired"
+msgstr "Popadanij/Promah"
+
+msgid "Super"
+msgstr "Super"
+
+msgid "Shock"
+msgstr "Uzhas"
+
+msgid "Fave."
+msgstr "Libimye"
+
+msgid "Hit%"
+msgstr "Popadanij%"
+
+msgid "Total"
+msgstr "Ob$ee"
+
+msgid "Norm"
+msgstr "Obychnij"
+
+msgid "GM"
+msgstr "PTURS"
+
+msgid "Bullet"
+msgstr "Snaryad"
+
+msgid "Wave"
+msgstr "Volna"
+
+msgid "Flag"
+msgstr "Flag"
+
+#################
+## SILENCE KEY ##
+#################
+
+msgid "Silenced "
+msgstr "Priglushyonnij "
+
+msgid "Unsilenced "
+msgstr "Ne priglushyonnij "
+
+msgid "Unblocked Msgs"
+msgstr "Razblokirovannyh soob$enij"
+
+msgid "Silenced All Msgs"
+msgstr "Zaglushit' vse soob$eniya"
+
+msgid " Does not exist"
+msgstr "Ne su$estvuet"
+
+msgid "Silence -->"
+msgstr "Priglushit' -->"
+
+msgid "Un"
+msgstr "Pr"
+
+######################
+## PLAYING MESSAGES ##
+######################
+
+msgid "Got shot by "
+msgstr "Podstrelen ..."
+
+msgid "Got flattened by "
+msgstr "Razdvalen ..."
+
+msgid "Team flag was captured by "
+msgstr "Flag komandy zahvachen ..."
+
+msgid "Teammate hit with Genocide by "
+msgstr "Komandu ubil genocidom ..."
+
+msgid "Tank Self Destructed"
+msgstr "Samopodryv"
+
+msgid "Tank Rusted"
+msgstr "Tank Oslablen"
+
+msgid "Flags on field hidden, to show them "
+msgstr "Flagi skryty na pole, dlya prosmotra, "
+
+msgid "hit \""
+msgstr "nazhmite \""
+
+msgid " bind a key to Toggle Flags on Field"
+msgstr "knopku svyazannuyu s tumblerom pokaza flagov na pole"
+
+msgid "Flags on radar hidden, to show them "
+msgstr "Flagi na radare skryty, dlya prosmotra"
+
+msgid " bind a key to Toggle Flags on Radar"
+msgstr " nazhmite knopku svyazannuyu s tumlerom pokaza flagov na radare"
+
+msgid "To toggle the radar "
+msgstr "Tumbler radara"
+
+msgid " bind a key to Toggle Radar"
+msgstr " svyazan s knopkoj tublera radara"
+
+msgid "To toggle the console "
+msgstr "Dlya pereklyucheniya konsoli"
+
+msgid " bind a key to Toggle Console"
+msgstr " svyazhite knopku s tumblerom konsoli"
+
+msgid "ZSceneDatabase processed in %.3f seconds.\n"
+msgstr "ZSceneDatabase vypolnyaetsya za %.3f sekund.\n"
+
+msgid "BSPSceneDatabase processed in %.3f seconds.\n"
+msgstr "BSPSceneDatabase vypolnyaetsya za %.3f sekund.\n"
+
+msgid "Download stopped by user action"
+msgstr "Zagruzka ostanovlena dejstviyami pol'zovatelya"
+
+msgid "The tank's motion is now frozen! ... Press Shift+` to unfreeze"
+msgstr "Peredvizhenie tanka zamorozheno! ... Nazhmite Shift+` dlya razmorozki"
+
+msgid "Resumed"
+msgstr "Vosstanovlenie"
+
+msgid "There does not appear to be any key bound to enter the game"
+msgstr "Sdelat' vhod v igru po lyuboj knopke"
+
+msgid "Invalid player identification (%d)"
+msgstr "Nepravil'nij identifikator igroka  (%d)"
+
+msgid "WARNING: invalid player identification when adding player with id "
+msgstr "WARNING:: nepravil'nij identifikator igroka pri dobavlenii igroka s id "
+
+msgid "Server error when adding player, player already added"
+msgstr "Oshibka servera pri dobavlenii igroka, takoj igrok uzhe dobavlen"
+
+msgid "WARNING: player already exists at location with id "
+msgstr "WARNING:: uzhe su$estvuet igrok v igre s id "
+
+msgid "joining as "
+msgstr "prisoedinyon kak"
+
+msgid "an observer"
+msgstr "nabldatel'"
+
+msgid "a tank"
+msgstr "tank"
+
+msgid "a robot tank"
+msgstr "tank-robot"
+
+msgid "an unknown type"
+msgstr "neizvestnogo tipa"
+
+msgid "IPINFO: "
+msgstr "IPINFO: "
+
+msgid "\t from: "
+msgstr "\t iz: "
+
+msgid "signing off"
+msgstr "zakanchivaetsya"
+
+msgid " from "
+msgstr " iz "
+
+msgid "(leave)"
+msgstr "(uroven')"
+
+msgid "World cache files disappeared.  Join canceled"
+msgstr "Fajly kesha karty propali. Soedinenie prervano."
+
+msgid "Loading world into memory..."
+msgstr "Zagruzka karty v pamyat' ..."
+
+msgid "Error loading cached world.  Join canceled"
+msgstr "Oshibka zagruzki kesha karty. Soedinenie prervano"
+
+msgid "Verifying world integrity..."
+msgstr "Proverka celostnosti karty..."
+
+msgid "Error on md5. Removing offending file."
+msgstr "Oshibka md5 summy. Udalenie oshibochnogo fajla."
+
+msgid "Preparing world..."
+msgstr "Nastrojka karty..."
+
+msgid "Error unpacking world database. Join canceled."
+msgstr "Oshibka raspakovki karty. Soedinenie prervano"
+
+msgid "Downloading files..."
+msgstr "Zagruzka fajlov..."
+
+msgid "Loading world from "
+msgstr "Otpravka karty na server iz "
+
+msgid "Download from URL failed"
+msgstr "Oshibka zagruzki s URL "
+
+msgid "Problem writing cache"
+msgstr "Problema zapisi kesh"
+
+msgid "Downloading World..."
+msgstr "Zagruzka karty..."
+
+msgid "Flags not supported by this client: {1}"
+msgstr "Flagi ne podderzhivayutsya etim klientom"
+
+msgid "Downloading World (%2d%% complete/%d kb remaining)..."
+msgstr "Zagruzka karty (%2d%% vyprolneno/%d kb ostalos')..."
+
+msgid "sorry, i'm just a silly machine"
+msgstr "Izvinite, ya prosto glupaya mashina"
+
+msgid "Closest Flag: "
+msgstr "Blizhajshij flag"
+
+msgid "Server forced a disconnect"
+msgstr "Server prinuditel'no razorval soedinenie"
+
+msgid "Requesting World Hash..."
+msgstr "Zapros Hesha karty..."
+
+msgid "Time Expired"
+msgstr "proshedshee vremya"
+
+msgid "Game Paused"
+msgstr "Igra priostanovlena"
+
+msgid "[unknown player]"
+msgstr "[neizvestnij igrok]"
+
+msgid " won the game"
+msgstr " vyigral igru"
+
+msgid "Roger taking controls"
+msgstr "Upravlyaet krolik Rojer"
+
+msgid "Roger releasing controls"
+msgstr "Krolik Rojer poteryal upravleie"
+
+msgid "has paused"
+msgstr "byla priostanovlena"
+
+ msgid "has unpaused"
+ msgstr "byla vozobnovlena"
+
+msgid "Don't kill teammates!!!"
+msgstr "Ne ubivajte svoih!!!"
+
+msgid "blew myself up"
+msgstr "vzorval sebya sam "
+
+msgid "destroyed by the server"
+msgstr "unichtozhen serverom"
+
+msgid "destroyed by a (GHOST)"
+msgstr "unichtozhen (GHOST)"
+
+msgid "fell in the water"
+msgstr "upal v vodu"
+
+msgid "Unknown Deadly Obstacle"
+msgstr "Neizvestnoe smertel'noe prpyadstvie"
+
+msgid "teammate "
+msgstr "igroki komandy"
+
+msgid "was fried by "
+msgstr "byl izzharen"
+
+msgid "'s laser"
+msgstr " lazerom"
+
+msgid "was destroyed by "
+msgstr "byl unichtozhen"
+
+msgid "'s guided missile"
+msgstr " raketoj (PTURS)"
+
+msgid "felt the effects of "
+msgstr "pochuchtvoval effekt"
+
+msgid "'s shockwave"
+msgstr " volny uzhasa"
+
+msgid "didn't see "
+msgstr "ne uvidel"
+
+msgid "'s bullet"
+msgstr " snaryad"
+
+msgid "was turned into swiss cheese by "
+msgstr "byl prevra$en v shvejcarskij syr po"
+
+msgid "'s machine gun"
+msgstr " skorostrel'noj pushkoj"
+
+msgid "got skewered by "
+msgstr "byl nanizan"
+
+msgid "'s super bullet"
+msgstr " na super snaryad"
+
+msgid "killed by "
+msgstr "ubit ..."
+
+msgid "Flag Alert!!!"
+msgstr "Trevoga Flag!!!"
+
+msgid "Team Grab!!!"
+msgstr "Zahvachen Komandoj!!!"
+
+msgid "grabbed "
+msgstr "zahvachen"
+
+msgid "took my flag into "
+msgstr "vzyal moj flag na "
+
+msgid " territory"
+msgstr " territorii"
+
+msgid "Don't capture your own flag!!!"
+msgstr "Ne hvatajte svoj flag!!!"
+
+msgid "captured "
+msgstr "zahvachen "
+
+msgid "'s flag"
+msgstr " flag"
+
+msgid "You are now the rabbit."
+msgstr "Teper' vy krolik."
+
+msgid "is now the rabbit"
+msgstr "teper' krolik ..."
+
+msgid "Received handicap update for unknown player!\n"
+msgstr "Poluchena fora dlya neizvestnogo igroka!\n"
+
+msgid "Received score update for unknown player!\n"
+msgstr "Poluchena obnovlyonnaya ocenka neizvestnogo igroka!\n"
+
+msgid "SERVER"
+msgstr "Server"
+
+msgid "(UNKNOWN)"
+msgstr "(Neizvesten)"
+
+msgid "Admin"
+msgstr "Admin"
+
+msgid "Ignored Msg"
+msgstr "Ignorirovanie soob$enij"
+
+msgid "[Admin] "
+msgstr "[Admin]"
+
+msgid "[to "
+msgstr "[ k"
+
+msgid "] "
+msgstr "] "
+
+msgid "[Team] "
+msgstr "[Komanda]"
+
+msgid "(join)"
+msgstr "(prmoedinenie)"
+
+msgid "Got custom flag type from server: %s\n"
+msgstr "Poluchit' osobij flag ot servera: %s\n"
+
+msgid "Paused"
+msgstr "Pauza"
+
+msgid "locked on me"
+msgstr "zahvachen na mne"
+
+msgid "Server communication error"
+msgstr "Oshibka sistemy soob$enij servera"
+
+msgid "Server BZDB change blocked: '%s' = '%s'\n"
+msgstr "Server BZDB izmenil blokirovku: '%s' = '%s'\n"
+
+msgid "dropped "
+msgstr "padenie "
+
+msgid " stole "
+msgstr " krazha"
+
+msgid "Killed by unknown obstacle"
+msgstr "Ubit neizvestnym prepyadstviem"
+
+msgid "Invalid reason"
+msgstr "Nepravil'naya prichina"
+
+msgid "Shot myself"
+msgstr "Zastrelil sebya"
+
+msgid "Killed by the server"
+msgstr "Ubityh serverom"
+
+msgid " with "
+msgstr " s "
+
+msgid "local collision with "
+msgstr " mestnyh kollizij s "
+
+msgid "Locked on "
+msgstr "Zahvachen "
+
+msgid ") with "
+msgstr ") c "
+
+msgid "'identify' disabled on this server"
+msgstr "'identifikaciya' zapre$ena na servere"
+
+msgid "Looking at a tank"
+msgstr "Glyadya na tank"
+
+msgid "Looking at "
+msgstr "Glyadya na "
+
+msgid "SPOTTED: "
+msgstr "SPOTTED:"
+
+msgid "Solo robots are prohibited on this server."
+msgstr "Roboty zapre$eny na servere"
+
+msgid "%s team was unavailable, you were joined "
+msgstr "%s komanda nedostupna v moment vashego prisoedineniya"
+
+msgid "as an Observer"
+msgstr "kak nablyudatel'"
+
+msgid "to the %s"
+msgstr "k %s"
+
+msgid "You were joined as an observer"
+msgstr "Vy prisoedinilis' kak nablyudatel'"
+
+msgid "You joined the %s"
+msgstr "Vy prisoedinilis' kak %s"
+
+msgid "You joined as a %s"
+msgstr "Vy prisoedinilis' kak %s"
+
+msgid "cleanWorldCache: removed %s\n"
+msgstr "cleanWorldCache: udaleno  %s\n"
+
+msgid "id "
+msgstr "id"
+
+msgid "id test %p %p %p %8.8x %8.8x\n"
+msgstr "id test %p %p %p %8.8x %8.8x\n"
+
+msgid "Server not found"
+msgstr "Server ne najden"
+
+msgid "Server Access Denied Locally"
+msgstr "Dostup k serveru zapre$yon lokal'no"
+
+msgid "server access is controlled by "
+msgstr "dostup k serveru kontroliruetsya"
+
+msgid "Memory error"
+msgstr "Oshibka pamyati"
+
+msgid "Incompatible server version XXXXXXXX"
+msgstr "Nesovmestimaya versiya servera XXXXXXXX"
+
+msgid "You have been banned from this server"
+msgstr "Vy byli zayuaneny na etom servere"
+
+msgid "You have been banned from this server:"
+msgstr "Vy byli zayuaneny na servere:"
+
+msgid "Game is full or over.  Try again later."
+msgstr "Igra polnost'yu zanyata ili okonchena. Prihodite popozzhe."
+
+msgid "Error connecting to server."
+msgstr "Oshibka soedineniya s serverom."
+
+msgid "Cannot connect to full version server."
+msgstr "Ne udayotsya podklyuchit'sya k polnoj verss servera."
+
+msgid "Internal error connecting to server (error code %d)."
+msgstr "Vneshnyaya oshibka soedineniya s serverom (oshibka nomer %d)."
+
+msgid "No UDP connection, see Options to enable."
+msgstr "Net UDP soedineniya, prover'te razreshyonnye parametry."
+
+msgid "Connection Established..."
+msgstr "Podklyuchenie..."
+
+msgid "Entering game..."
+msgstr "Vhod v igru..."
+
+msgid "Disabled stencilShadows for interlaced mode"
+msgstr "StencilShadows zapre$yon dlya cherezstrochnogo rezhima"
+
+msgid "Can't pause while inside a building"
+msgstr "Nel'zya delat' pauzu vnutri sooruzhenij"
+
+msgid "Can't pause when you are in the air"
+msgstr "Nel'zya delat' pauzu v vozduhe"
+
+msgid "Unable to pause right now"
+msgstr "Mozhete sdelat' pauzu prya sejchas"
+
+msgid "Can't pause when you are in the phantom zone"
+msgstr "Nel'zya delat' pauzu v fantomnoj zone"
+
+msgid "Pausing in %d"
+msgstr "Paza v  %d"
+
+msgid "Self Destructing in %d"
+msgstr "Samounichtozhenij %d"
+
+msgid "Server has unexpectedly disconnected"
+msgstr "Server byl neozhidano otklyuchen"
+
+msgid "okay"
+msgstr "horosho"
+
+msgid "  full quality"
+msgstr "  polnoe kachestvo"
+
+msgid "  Stipple Shadows"
+msgstr "  Punktirnye teni"
+
+msgid "  no Blend"
+msgstr "  bez smeshivaniya"
+
+msgid "  lowest quality"
+msgstr "  nizshee kachestvo"
+
+msgid "testing performance;  please wait..."
+msgstr "proverka bystrodejstviya, pozhalujsta podozhdite..."
+
+msgid "explode%d"
+msgstr "vzorvat'sya %d"
+
+msgid "BZFlag version:   %s\n"
+msgstr "BZFlag versiya:   %s\n"
+
+msgid "BZFlag protocol:  %s\n"
+msgstr "Protokol BZFlag:  %s\n"
+
+msgid "OpenGL vendor:    %s\n"
+msgstr "Proizvoditel' OpenGL:    %s\n"
+
+msgid "OpenGL version:   %s\n"
+msgstr "Versiya OpenGL:   %s\n"
+
+msgid "OpenGL renderer:  %s\n"
+msgstr "Rendering OpenGL:  %s\n"
+
+msgid "Depth Buffer:     %i bitplanes\n"
+msgstr "Glubina bufera:     %i bitplanes\n"
+
+msgid "Running on Windows %s%d.%d %s\n"
+msgstr "Rabotaet v oknah %s%d.%d %s\n"
+
+#msgid "This release will expire on %s"
+#msgstr ""
+
+msgid "BZFlag version: "
+msgstr "Versiya BZFlag: "
+
+msgid "Distributed under the terms of the LGPL"
+msgstr "Vypu$eno pod licezieny LGPL"
+
+# msgid "Author: Chris Schoeneman <crs23 at bigfoot.com>"
+# msgstr ""
+
+# msgid "Maintainer: Tim Riker <Tim at Rikers.org>"
+# msgstr ""
+
+msgid "Audio Driver: "
+msgstr "Drajver zvuka: "
+
+msgid "OpenGL Driver: "
+msgstr "Drajver OpenGL: "
+
+msgid " Silenced"
+msgstr " Zvuk priglushen"
diff --git a/data/title.png b/data/title.png
index 0aeee66..acb907b 100644
Binary files a/data/title.png and b/data/title.png differ
diff --git a/misc/art/title.psd b/misc/art/title.psd
index 7eb59f6..25d3a2d 100644
Binary files a/misc/art/title.psd and b/misc/art/title.psd differ
diff --git a/package/Makefile.am b/package/Makefile.am
index c6177b6..66094c1 100644
--- a/package/Makefile.am
+++ b/package/Makefile.am
@@ -19,14 +19,9 @@ MKDIR	= /usr/bin/mkdir
 RM	= /usr/bin/rm -f
 CD	= cd
 else
-if MACOS
-MKDIR	= /bin/mkdir
-RM	= /bin/rm
-else
 MKDIR	= mkdir
 RM	= rm -f
 endif
-endif
 RMR	= $(RM) -r
 endif
 
diff --git a/package/win32/nsis/BZFlag.nsi b/package/win32/nsis/BZFlag.nsi
index e033fbb..634c785 100644
--- a/package/win32/nsis/BZFlag.nsi
+++ b/package/win32/nsis/BZFlag.nsi
@@ -7,7 +7,7 @@
 
   !define VER_MAJOR 2
   !define VER_MINOR 4
-  !define VER_REVISION 6
+  !define VER_REVISION 8
 
   !define TYPE "release"
   ;!define TYPE "alpha"
diff --git a/plugins/plugin_utils/plugin_utils.vcxproj b/plugins/plugin_utils/plugin_utils.vcxproj
index be1dda3..424411c 100644
--- a/plugins/plugin_utils/plugin_utils.vcxproj
+++ b/plugins/plugin_utils/plugin_utils.vcxproj
@@ -74,7 +74,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include\;$(ProjectDir)\..\plugin_utils\;$(BZAPI_INC_DIR)\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\;..\..\include\;$(BZAPI_INC_DIR)\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_LIB; _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
diff --git a/src/bzadmin/BZAdminClient.cxx b/src/bzadmin/BZAdminClient.cxx
index 5e57564..27362a3 100644
--- a/src/bzadmin/BZAdminClient.cxx
+++ b/src/bzadmin/BZAdminClient.cxx
@@ -19,6 +19,8 @@
 #else
 #  include <math.h>
 #endif
+#include <stdio.h>
+#include <string.h>
 #include <iostream>
 #include <sstream>
 
@@ -31,6 +33,7 @@
 #include "ServerList.h"
 #include "ErrorHandler.h"
 #include "cURLManager.h"
+#include "TimeKeeper.h"
 
 StartupInfo startupInfo;
 
diff --git a/src/bzadmin/Makefile.am b/src/bzadmin/Makefile.am
index 96dd230..f526975 100644
--- a/src/bzadmin/Makefile.am
+++ b/src/bzadmin/Makefile.am
@@ -17,7 +17,6 @@ endif
 
 AM_CPPFLAGS = \
 	-DBUILDING_BZADMIN \
-	-I$(top_srcdir)/src/bzflag \
 	$(LIBCURL_CPPFLAGS) \
 	$(CONF_CPPFLAGS) \
 	-I$(top_srcdir)/include
@@ -35,7 +34,8 @@ bzadmin_SOURCES = \
 	OptionParser.h \
 	OptionParser.cxx \
 	PlayerInfo.h \
-	$(top_srcdir)/src/bzflag/ServerLink.cxx \
+	ServerLink.h \
+	ServerLink.cxx \
 	StdBothUI.h \
 	StdBothUI.cxx \
 	StdInUI.h \
diff --git a/src/bzflag/ServerLink.cxx b/src/bzadmin/ServerLink.cxx
similarity index 77%
copy from src/bzflag/ServerLink.cxx
copy to src/bzadmin/ServerLink.cxx
index e7a9f6a..3e3bd98 100644
--- a/src/bzflag/ServerLink.cxx
+++ b/src/bzadmin/ServerLink.cxx
@@ -668,207 +668,6 @@ bool ServerLink::readEnter (std::string& reason,
   return true;
 }
 
-void			ServerLink::sendCaptureFlag(TeamColor team)
-{
-  char msg[2];
-  nboPackUShort(msg, uint16_t(team));
-  send(MsgCaptureFlag, sizeof(msg), msg);
-}
-
-void			ServerLink::sendGrabFlag(int flagIndex)
-{
-  char msg[2];
-  nboPackUShort(msg, uint16_t(flagIndex));
-  send(MsgGrabFlag, sizeof(msg), msg);
-}
-
-void			ServerLink::sendDropFlag(const float* position)
-{
-  char msg[12];
-  void* buf = msg;
-  buf = nboPackVector(buf, position);
-  send(MsgDropFlag, sizeof(msg), msg);
-}
-
-void			ServerLink::sendKilled(const PlayerId& killer,
-					       int reason, int shotId,
-					       const FlagType* flagType,
-					       int phydrv)
-{
-  char msg[PlayerIdPLen + 2 + 2 + FlagPackSize + 4];
-  void* buf = msg;
-
-  buf = nboPackUByte(buf, killer);
-  buf = nboPackUShort(buf, int16_t(reason));
-  buf = nboPackShort(buf, int16_t(shotId));
-  buf = flagType->pack(buf);
-
-  if (reason == PhysicsDriverDeath) {
-    buf = nboPackInt(buf, phydrv);
-  }
-
-  send(MsgKilled, (char*)buf - (char*)msg, msg);
-}
-
-
-#ifndef BUILDING_BZADMIN
-void			ServerLink::sendPlayerUpdate(Player* player)
-{
-  char msg[PlayerUpdatePLenMax];
-  // Send the time frozen at each start of scene iteration, as all
-  // dead reckoning use that
-  const float timeStamp = float(TimeKeeper::getTick() - TimeKeeper::getNullTime());
-  void* buf = msg;
-  uint16_t code;
-  buf = nboPackFloat(buf, timeStamp);
-  buf = nboPackUByte(buf, player->getId());
-
-  // code will be MsgPlayerUpdate or MsgPlayerUpdateSmall
-  buf = player->pack(buf, code);
-
-  // variable length
-  const int len = (char*)buf - (char*)msg;
-
-  send(code, len, msg);
-}
-#endif
-
-void			ServerLink::sendBeginShot(const FiringInfo& info)
-{
-  char msg[FiringInfoPLen];
-  void* buf = msg;
-  buf = info.pack(buf);
-  send(MsgShotBegin, sizeof(msg), msg);
-}
-
-void			ServerLink::sendEndShot(const PlayerId& source,
-							int shotId, int reason)
-{
-  char msg[PlayerIdPLen + 4];
-  void* buf = msg;
-  buf = nboPackUByte(buf, source);
-  buf = nboPackShort(buf, int16_t(shotId));
-  buf = nboPackUShort(buf, uint16_t(reason));
-  send(MsgShotEnd, sizeof(msg), msg);
-}
-
-void			ServerLink::sendAlive()
-{
-  send(MsgAlive, 0, NULL);
-}
-
-void			ServerLink::sendTeleport(int from, int to)
-{
-  char msg[4];
-  void* buf = msg;
-  buf = nboPackUShort(buf, uint16_t(from));
-  buf = nboPackUShort(buf, uint16_t(to));
-  send(MsgTeleport, sizeof(msg), msg);
-}
-
-void			ServerLink::sendTransferFlag(const PlayerId& from, const PlayerId& to)
-{
-  char msg[PlayerIdPLen*2];
-  void* buf = msg;
-  buf = nboPackUByte(buf, from);
-  buf = nboPackUByte(buf, to);
-  send(MsgTransferFlag, sizeof(msg), msg);
-}
-
-void			ServerLink::sendNewRabbit()
-{
-  send(MsgNewRabbit, 0, NULL);
-}
-
-void			ServerLink::sendPaused(bool paused)
-{
-  uint8_t p = paused;
-  send(MsgPause, 1, &p);
-}
-
-void			ServerLink::sendAutoPilot(bool autopilot)
-{
-  uint8_t p = autopilot;
-  send(MsgAutoPilot, 1, &p);
-}
-
-void			ServerLink::sendUDPlinkRequest()
-{
-  if ((server_abilities & CanDoUDP) != CanDoUDP)
-    return; // server does not support udp (future list server test)
-
-  char msg[1];
-  unsigned short localPort;
-  void* buf = msg;
-
-  struct sockaddr_in serv_addr;
-
-  if ((urecvfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
-    return; // we cannot comply
-  }
-#if 1
-  AddrLen addr_len = sizeof(serv_addr);
-  if (getsockname(fd, (struct sockaddr*)&serv_addr, (socklen_t*) &addr_len) < 0) {
-    printError("Error: getsockname() failed, cannot get TCP port?");
-    return;
-  }
-  if (bind(urecvfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != 0) {
-    printError("Error: getsockname() failed, cannot get TCP port?");
-    return;  // we cannot get udp connection, bail out
-  }
-
-#else
-  // TODO if nobody complains kill this old port 17200 code
-  for (int port=17200; port < 65000; port++) {
-    ::memset((unsigned char *)&serv_addr, 0, sizeof(serv_addr));
-    serv_addr.sin_family = AF_INET;
-    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    serv_addr.sin_port = htons(port);
-    if (bind(urecvfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) == 0) {
-      break;
-    }
-  }
-#endif
-  localPort = ntohs(serv_addr.sin_port);
-  memcpy((char *)&urecvaddr,(char *)&serv_addr, sizeof(serv_addr));
-
-  if (debugLevel >= 1) {
-    std::vector<std::string> args;
-    char lps[10];
-    sprintf(lps, "%d", localPort);
-    args.push_back(lps);
-    printError("Network: Created local UDP downlink port {1}", &args);
-  }
-
-  buf = nboPackUByte(buf, id);
-
-  if (BzfNetwork::setNonBlocking(urecvfd) < 0) {
-    printError("Error: Unable to set NonBlocking for UDP receive socket");
-  }
-
-  send(MsgUDPLinkRequest, sizeof(msg), msg);
-}
-
-// heard back from server that we can send udp
-void			ServerLink::enableOutboundUDP()
-{
-  ulinkup = true;
-  if (debugLevel >= 1)
-    printError("Server got our UDP, using UDP to server");
-}
-// confirm that server can send us UDP
-void			ServerLink::confirmIncomingUDP()
-{
-  // This is really a hack. enableOutboundUDP will be setting this
-  // but frequently the udp handshake will finish first so might as
-  // well start with udp as soon as we can
-  ulinkup = true;
-
-  if (debugLevel >= 1)
-    printError("Got server's UDP packet back, server using UDP");
-  send(MsgUDPLinkEstablished, 0, NULL);
-}
-
 // Local Variables: ***
 // mode:C++ ***
 // tab-width: 8 ***
diff --git a/src/bzflag/ServerLink.h b/src/bzadmin/ServerLink.h
similarity index 77%
copy from src/bzflag/ServerLink.h
copy to src/bzadmin/ServerLink.h
index ed985ca..d8cc591 100644
--- a/src/bzflag/ServerLink.h
+++ b/src/bzadmin/ServerLink.h
@@ -24,7 +24,6 @@
 #include "global.h"
 #include "Address.h"
 #include "Protocol.h"
-#include "ShotPath.h"
 #include "Flag.h"
 
 class ServerLink {
@@ -67,26 +66,6 @@ class ServerLink {
     bool		readEnter(std::string& reason,
 				  uint16_t& code, uint16_t& rejcode);
 
-    void		sendCaptureFlag(TeamColor);
-    void		sendGrabFlag(int flagIndex);
-    void		sendDropFlag(const float* position);
-    void		sendKilled(const PlayerId&, int reason,
-				   int shotId, const FlagType* flag, int phydrv);
-  // FIXME -- This is very ugly, but required to build bzadmin with gcc 2.9.5.
-  //	  It should be changed to something cleaner.
-#ifndef BUILDING_BZADMIN
-    void		sendPlayerUpdate(Player*);
-#endif
-    void		sendBeginShot(const FiringInfo&);
-    void		sendEndShot(const PlayerId&, int shotId, int reason);
-    void		sendAlive();
-    void		sendTeleport(int from, int to);
-    void		sendTransferFlag(const PlayerId&, const PlayerId&);
-    void		sendNewRabbit();
-    void		sendPaused(bool paused);
-    void		sendAutoPilot(bool autopilot);
-    void		sendUDPlinkRequest();
-
     static ServerLink*	getServer(); // const
     static void		setServer(ServerLink*);
     void		enableOutboundUDP();
diff --git a/src/bzadmin/bzadmin.cxx b/src/bzadmin/bzadmin.cxx
index 47126e6..d5e8abc 100644
--- a/src/bzadmin/bzadmin.cxx
+++ b/src/bzadmin/bzadmin.cxx
@@ -35,11 +35,6 @@
 
 int debugLevel = 0;
 
-#ifdef _WIN32
-void Player::setDeadReckoning()
-{
-}
-#endif
 /** @file
     This is the main file for bzadmin, the bzflag text client.
 */
diff --git a/src/bzflag/ControlPanel.cxx b/src/bzflag/ControlPanel.cxx
index 2cd2c35..d1cf798 100644
--- a/src/bzflag/ControlPanel.cxx
+++ b/src/bzflag/ControlPanel.cxx
@@ -88,6 +88,7 @@ void ControlPanelMessage::breakLines(float maxLength, int fontFace, float fontSi
   // in order for the new font engine to draw successive lines in the right
   // color, it needs to be fed the right ansi codes at the beginning of each
   // line.
+  std::string previousANSICodes = "";
   std::string cumulativeANSICodes = "";
 
   // break lines
@@ -102,7 +103,7 @@ void ControlPanelMessage::breakLines(float maxLength, int fontFace, float fontSi
     } else {
       n = 0;
       while ((n < lineLen) &&
-	     (fm.getStrLength(fontFace, fontSize, std::string(msg, n+1)) < maxLength)) {
+	     (fm.getStrLength(fontFace, fontSize, std::string(msg, n)) < maxLength)) {
 	if (msg[n] == ESC_CHAR) {
 	  // clear the cumulative codes when we hit a reset
 	  // the reset itself will start the new cumulative string.
@@ -143,7 +144,10 @@ void ControlPanelMessage::breakLines(float maxLength, int fontFace, float fontSi
       n = lastWhitespace;
 
     // message
-    lines.push_back(cumulativeANSICodes + std::string(msg,n));
+    lines.push_back(previousANSICodes + std::string(msg,n));
+
+    // Store cumulative ANSI codes to be prepended to the next line
+    previousANSICodes = cumulativeANSICodes;
 
     if (msg[n] != '\t')
       numlines++;
diff --git a/src/bzflag/Makefile.am b/src/bzflag/Makefile.am
index 6cd8acd..c23fd8b 100644
--- a/src/bzflag/Makefile.am
+++ b/src/bzflag/Makefile.am
@@ -196,17 +196,11 @@ else
 RESOURCE =
 endif
 
-if MACOS
-NACLIB = \
-	../platform/MacOSX/libMac.la
-endif
-
 LDADD =	\
 	../3D/lib3D.la			\
 	../game/libGame.la		\
 	../net/libNet.la		\
 	../obstacle/libObstacle.la	\
-	$(NACLIB)			\
 	../platform/libPlatform.la	\
 	../ogl/libGLKit.la		\
 	../scene/libSceneDB.la		\
diff --git a/src/bzflag/ServerLink.cxx b/src/bzflag/ServerLink.cxx
index e7a9f6a..cf7c888 100644
--- a/src/bzflag/ServerLink.cxx
+++ b/src/bzflag/ServerLink.cxx
@@ -711,7 +711,6 @@ void			ServerLink::sendKilled(const PlayerId& killer,
 }
 
 
-#ifndef BUILDING_BZADMIN
 void			ServerLink::sendPlayerUpdate(Player* player)
 {
   char msg[PlayerUpdatePLenMax];
@@ -731,7 +730,6 @@ void			ServerLink::sendPlayerUpdate(Player* player)
 
   send(code, len, msg);
 }
-#endif
 
 void			ServerLink::sendBeginShot(const FiringInfo& info)
 {
diff --git a/src/bzflag/ServerLink.h b/src/bzflag/ServerLink.h
index ed985ca..6f06cb7 100644
--- a/src/bzflag/ServerLink.h
+++ b/src/bzflag/ServerLink.h
@@ -74,9 +74,7 @@ class ServerLink {
 				   int shotId, const FlagType* flag, int phydrv);
   // FIXME -- This is very ugly, but required to build bzadmin with gcc 2.9.5.
   //	  It should be changed to something cleaner.
-#ifndef BUILDING_BZADMIN
     void		sendPlayerUpdate(Player*);
-#endif
     void		sendBeginShot(const FiringInfo&);
     void		sendEndShot(const PlayerId&, int shotId, int reason);
     void		sendAlive();
diff --git a/src/bzflag/ServerMenu.cxx b/src/bzflag/ServerMenu.cxx
index 2dff991..30b53c2 100644
--- a/src/bzflag/ServerMenu.cxx
+++ b/src/bzflag/ServerMenu.cxx
@@ -610,7 +610,7 @@ void ServerMenu::pick()
 					    &dropArgs);
   }
   else {
-    ((HUDuiLabel*)listHUD[13])->setString("");
+    ((HUDuiLabel*)listHUD[12])->setString("");
   }
 
   if ((ping.gameOptions & ShakableGameStyle) && ping.shakeWins != 0) {
@@ -626,6 +626,12 @@ void ServerMenu::pick()
 					    &dropArgs);
   }
   else {
+    ((HUDuiLabel*)listHUD[12])->setString("");
+  }
+
+  if (ping.gameOptions & NoTeamKillsGameStyle) {
+    ((HUDuiLabel*)listHUD[13])->setString("No Teamkills");
+  } else {
     ((HUDuiLabel*)listHUD[13])->setString("");
   }
 
diff --git a/src/bzflag/bzflag.cxx b/src/bzflag/bzflag.cxx
index 4140c3f..e226596 100644
--- a/src/bzflag/bzflag.cxx
+++ b/src/bzflag/bzflag.cxx
@@ -712,33 +712,6 @@ int			main(int argc, char** argv)
     exit(0);
   }
 
-#if defined(_WIN32)
-  {
-    /* write HKEY_CURRENT_USER\Software\BZFlag\CurrentRunningPath with the
-     * current path.  this lets Xfire know that this bzflag.exe running from
-     * here really is bzflag, not some imposter.
-     * since it may be useful to someone else, it's not protected by USE_XFIRE
-     */
-
-    // get our path
-    char temppath[MAX_PATH], temppath2[MAX_PATH];
-    char tempdrive[10];
-    GetModuleFileName(NULL, temppath, MAX_PATH);
-    // strip filename/extension
-    _splitpath(temppath, tempdrive, temppath2, NULL, NULL);
-    _makepath(temppath, tempdrive, temppath2, NULL, NULL);
-
-    // write the registry key in question
-    HKEY key = NULL;
-    if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\BZFlag",
-	0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL,
-	&key, NULL) == ERROR_SUCCESS) {
-      RegSetValueEx(key, "CurrentRunningPath", 0, REG_SZ, (LPBYTE)temppath,
-		   (DWORD)strlen(temppath));
-    }
-  }
-#endif
-
   createCacheSignature();
 
   // initialize global objects and classes
@@ -1385,18 +1358,6 @@ int			main(int argc, char** argv)
   delete bm;
   Flags::kill();
 
-#if defined(_WIN32)
-  {
-    /* clear HKEY_CURRENT_USER\Software\BZFlag\CurrentRunningPath if it
-     * exists */
-    HKEY key = NULL;
-    if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\BZFlag",
-	0, KEY_ALL_ACCESS, &key) == ERROR_SUCCESS) {
-      RegSetValueEx(key, "CurrentRunningPath", 0, REG_SZ, (LPBYTE)"\0", 1);
-    }
-  }
-#endif
-
 #ifdef _WIN32
   // clean up
   WSACleanup();
diff --git a/src/bzflag/playing.cxx b/src/bzflag/playing.cxx
index 00cf2b9..007c278 100644
--- a/src/bzflag/playing.cxx
+++ b/src/bzflag/playing.cxx
@@ -2279,10 +2279,12 @@ static void		handleServerMessage(bool human, uint16_t code,
 	  addMessage(victimPlayer, message);
 	}
 	else if (killer >= LastRealPlayer) {
-	  addMessage(victimPlayer, "destroyed by the server");
+	  message += "destroyed by the server";
+	  addMessage(victimPlayer, message);
 	}
 	else if (!killerPlayer) {
-	  addMessage(victimPlayer, "destroyed by a (GHOST)");
+	  message += "destroyed by a (GHOST)";
+	  addMessage(victimPlayer, message);
 	}
 	else if (reason == WaterDeath) {
 	  message += "fell in the water";
@@ -6767,35 +6769,35 @@ static void		playingLoop()
       float fpsLimit = BZDB.eval("fpsLimit");
       if (fpsLimit < 15 || isnan(fpsLimit))
 	fpsLimit = 15;
-	TimeKeeper nextTime(lastTime);
-	nextTime += 1.0f / fpsLimit;
-	float remaining;
-        while (1) {
-	  remaining = (float)(nextTime - TimeKeeper::getCurrent());
-	  if (remaining > 1.0f)
-	    break;
-	  if (remaining <= 0.0f)
-	    break;
-	  // Instead of sleeping try to handle network packets
-	  char msg[MaxPacketLen];
-	  uint16_t code, len;
-
-	  // handle server messages
-	  if (serverLink && !serverError) {
-	    int e = 0;
-	    e = serverLink->read(code, len, msg, int(remaining * 1000.0f));
-	    if (e == 1)
-	      handleServerMessage(true, code, len, msg);
-	    if (e == -2) {
-	      printError("Server communication error");
-	      serverError = true;
-	      break;
-	    }
-	  } else {
-	    TimeKeeper::sleep(remaining);
+      TimeKeeper nextTime(lastTime);
+      nextTime += 1.0f / fpsLimit;
+      float remaining;
+      while (1) {
+	remaining = (float)(nextTime - TimeKeeper::getCurrent());
+	if (remaining > 1.0f)
+	  break;
+	if (remaining <= 0.0f)
+	  break;
+	// Instead of sleeping try to handle network packets
+	char msg[MaxPacketLen];
+	uint16_t code, len;
+
+	// handle server messages
+	if (serverLink && !serverError) {
+	  int e = 0;
+	  e = serverLink->read(code, len, msg, int(remaining * 1000.0f));
+	  if (e == 1)
+	    handleServerMessage(true, code, len, msg);
+	  if (e == -2) {
+	    printError("Server communication error");
+	    serverError = true;
 	    break;
 	  }
+	} else {
+	  TimeKeeper::sleep(remaining);
+	  break;
 	}
+      }
       lastTime = TimeKeeper::getCurrent();
     } // end energy saver check
 
diff --git a/src/bzflag/sound.cxx b/src/bzflag/sound.cxx
index 1aef1a4..b9ba79b 100644
--- a/src/bzflag/sound.cxx
+++ b/src/bzflag/sound.cxx
@@ -1089,7 +1089,9 @@ static bool		audioInnerLoop()
       break;
 
     case SoundCommand::SET_VOL:
-      volumeAtten = 0.2f * cmd.code;
+      // The provided volume value is multiplied by itself to compensate for
+      // human hearing
+      volumeAtten = 0.02f * cmd.code * cmd.code;
       if (volumeAtten <= 0.0f) {
 	mutingOn = true;
 	volumeAtten = 0.0f;
diff --git a/src/bzfs/AccessControlList.cxx b/src/bzfs/AccessControlList.cxx
index b082a80..0652376 100644
--- a/src/bzfs/AccessControlList.cxx
+++ b/src/bzfs/AccessControlList.cxx
@@ -34,10 +34,8 @@
 #include "TimeKeeper.h"
 #include "TextUtils.h"
 
-#if !defined(CPPUTEST)
 // bzfs specific headers
 #include "bzfs.h"
-#endif // CPPUTEST
 
 
 void AccessControlList::ban(in_addr &ipAddr, const char *bannedBy, int period,
@@ -291,7 +289,6 @@ std::string AccessControlList::getBanMaskString(in_addr mask, unsigned char cidr
 }
 
 
-#if !defined(CPPUTEST)
 void AccessControlList::sendBan(PlayerId id, const BanInfo &baninfo)
 {
   std::ostringstream os;
@@ -306,7 +303,7 @@ void AccessControlList::sendBan(PlayerId id, const BanInfo &baninfo)
     os << " (m)";
   if (baninfo.bannedBy.length())
     os << " banned by: " << baninfo.bannedBy;
-    bz_sendTextMessage(BZ_SERVER, id, os.str().c_str());
+  bz_sendTextMessage(BZ_SERVER, id, os.str().c_str());
 
   // add reason, if any
   if (baninfo.reason.size()) {
@@ -743,7 +740,6 @@ std::vector<std::pair<std::string, std::string> > AccessControlList::listMasterB
 
   return bans;
 }
-#endif
 
 bool AccessControlList::convert(std::string ip, in_addr &mask, unsigned char &_cidr) {
   std::vector<std::string> ipParts;
diff --git a/src/bzfs/CmdLineOptions.cxx b/src/bzfs/CmdLineOptions.cxx
index 9065090..ebeed61 100644
--- a/src/bzfs/CmdLineOptions.cxx
+++ b/src/bzfs/CmdLineOptions.cxx
@@ -612,14 +612,17 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       options.randomBoxes = true;
     }
     else if (strcmp(argv[i], "-badwords") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.filterFilename = argv[i];
     }
     else if (strcmp(argv[i], "-ban") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.acl.ban(argv[i]);
     }
     else if (strcmp(argv[i], "-banfile") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.acl.setBanFile(argv[i]);
       if (!options.acl.load()) {
@@ -636,10 +639,12 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       options.gameType = ClassicCTF;
     }
     else if (strcmp(argv[i], "-cache") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.cacheURL = argv[i];
     }
     else if (strcmp(argv[i], "-cacheout") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.cacheOut = argv[i];
     }
@@ -680,6 +685,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       BZDB.set(StateDatabase::BZDB_DISABLEBOTS, "true");
     }
     else if (strncmp(argv[i], "-d", 2) == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       // increase debug level - this must be the last
       // option beginning with -d so that -dd, -ddd, etc. work
       const char num = argv[i][2];
@@ -715,12 +721,15 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       options.flagsOnBuildings = true;
     }
     else if (strcmp(argv[i], "-filterCallsigns") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       options.filterCallsigns = true;
     }
     else if (strcmp(argv[i], "-filterChat") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       options.filterChat = true;
     }
     else if (strcmp(argv[i], "-filterSimple") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       options.filterSimple = true;
     }
     else if (strcmp(argv[i], "-g") == 0) {
@@ -734,6 +743,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       MATERIALMGR.addMaterial(&material);
     }
     else if (strcmp(argv[i], "-groupdb") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       groupsFile = argv[i];
       logDebugMessage(1,"using group file \"%s\"\n", argv[i]);
@@ -756,6 +766,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       i++;
     }
     else if (strcmp(argv[i], "-i") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       // use a different interface
       checkArgc(1, i, argc, argv[i]);
       options.pingInterface = argv[i];
@@ -846,6 +857,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       }
     }
     else if (strcmp(argv[i],"-noMasterBanlist") == 0){
+      checkFromWorldFile(argv[i], fromWorldFile);
       options.suppressMasterBanList = true;
     }
     else if (strcmp(argv[i],"-noradar") == 0){
@@ -855,6 +867,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       /* if this is the first master ban url, override the default
        * list.  otherwise just keep adding urls.
        */
+      checkFromWorldFile(argv[i], fromWorldFile);
       if (!options.masterBanListOverridden) {
 	options.masterBanListURL.clear();
 	options.masterBanListOverridden = true;
@@ -895,6 +908,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       memset(argv[i], 'X', options.password.size());
     }
     else if (strcmp(argv[i], "-pidfile") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       unsigned int pid = 0;
 	  checkArgc(1, i, argc, argv[i]);
       FILE *fp = fopen(argv[i], "wt");
@@ -908,11 +922,6 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
 	fclose(fp);
       }
     }
-    else if (strcmp(argv[i], "-pf") == 0) {
-      // try wksPort first and if we can't open that port then
-      // let system assign a port for us.
-      options.useFallbackPort = true;
-    }
     else if (strcmp(argv[i], "-poll") == 0) {
       // parse the variety of poll system variables
       checkArgc(1, i, argc, argv[i]);
@@ -964,11 +973,11 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       /* if this is the first -publiclist, override the default list
        * server.  otherwise just keep adding urls.
        */
+      checkFromWorldFile(argv[i], fromWorldFile);
       if (!options.listServerOverridden) {
 	options.listServerURL.clear();
 	options.listServerOverridden = true;
       }
-      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.listServerURL.push_back(argv[i]);
     }
@@ -1019,25 +1028,31 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       }
     }
     else if (strcmp(argv[i], "-recbuf") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       Record::setSize (ServerPlayer, atoi(argv[i]));
       options.startRecording = true;
     }
     else if (strcmp(argv[i], "-recbufonly") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       Record::setAllowFileRecs (false);
     }
     else if (strcmp(argv[i], "-recdir") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       Record::setDirectory (argv[i]);
     }
     else if (strcmp(argv[i], "-replay") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       options.replayServer = true;
     }
     else if (strcmp(argv[i], "-reportfile") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.reportFile = argv[i];
     }
     else if (strcmp(argv[i], "-reportpipe") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       options.reportPipe = argv[i];
     }
@@ -1251,6 +1266,7 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
       }
     }
     else if (strcmp(argv[i], "-ts") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       // timestamp output
       options.timestampLog = true;
       // if there is an argument following, see if it is 'micros'
@@ -1263,16 +1279,19 @@ void parse(int argc, char **argv, CmdLineOptions &options, bool fromWorldFile)
     }
 #ifdef HAVE_MINIUPNPC_MINIUPNPC_H
     else if (strcmp(argv[i], "-UPnP") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       // timestamp output
       options.UPnP = true;
     }
 #endif
     else if (strcmp(argv[i], "-utc") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       // timestamp output
       options.timestampLog = true;
       options.timestampUTC = true;
     }
     else if (strcmp(argv[i], "-userdb") == 0) {
+      checkFromWorldFile(argv[i], fromWorldFile);
       checkArgc(1, i, argc, argv[i]);
       userDatabaseFile = argv[i];
       logDebugMessage(1,"using userDB file \"%s\"\n", argv[i]);
diff --git a/src/bzfs/CmdLineOptions.h b/src/bzfs/CmdLineOptions.h
index 98b059b..2577fee 100644
--- a/src/bzfs/CmdLineOptions.h
+++ b/src/bzfs/CmdLineOptions.h
@@ -72,7 +72,7 @@ struct CmdLineOptions
     packetlosswarnthresh(-1.0),
     idlekickthresh(-1.0), timeLimit(0.0f), timeElapsed(0.0f), addedTime(0.0f),
     linearAcceleration(_DEFAULT_LIN_ACCEL), angularAcceleration(_DEFAULT_ANGLE_ACCELL), useGivenPort(false),
-    useFallbackPort(false), UPnP(false), randomBoxes(false),
+    UPnP(false), randomBoxes(false),
     randomCTF(false), flagsOnBuildings(false), respawnOnBuildings(false),
     oneGameOnly(false), timeManualStart(false), randomHeights(false),
     useTeleporters(false), teamKillerDies(true), printScore(false),
@@ -152,7 +152,6 @@ struct CmdLineOptions
   float			angularAcceleration;
 
   bool			useGivenPort;
-  bool			useFallbackPort;
   bool			UPnP;
   bool			randomBoxes;
   bool			randomCTF;
diff --git a/src/bzfs/bzfs.cxx b/src/bzfs/bzfs.cxx
index 0ad0319..497868d 100644
--- a/src/bzfs/bzfs.cxx
+++ b/src/bzfs/bzfs.cxx
@@ -927,27 +927,9 @@ static bool serverStart()
   }
 #endif
   if (bind(wksSocket, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
-    if (!clOptions->useFallbackPort) {
-      nerror("couldn't bind connect socket");
-      close(wksSocket);
-      return false;
-    }
-
-    // if we get here then try binding to any old port the system gives us
-    addr.sin_port = htons(0);
-    if (bind(wksSocket, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
-      nerror("couldn't bind connect socket");
-      close(wksSocket);
-      return false;
-    }
-
-    // fixup ping reply
-    AddrLen addrLen = sizeof(addr);
-    if (getsockname(wksSocket, (struct sockaddr*)&addr, &addrLen) >= 0)
-      pingReply.serverId.port = addr.sin_port;
-
-    // fixup publicized name will want it here later
-    clOptions->wksPort = ntohs(addr.sin_port);
+    nerror("couldn't bind connect socket");
+    close(wksSocket);
+    return false;
   }
 
   if (listen(wksSocket, 5) == -1) {
@@ -5227,17 +5209,20 @@ static void resetAllCallback(const std::string &name, void*)
   }
 }
 
-static std::string cmdReset(const std::string&, const CommandManager::ArgList& args, bool*)
+static std::string cmdReset(const std::string&, const CommandManager::ArgList& args, bool* cmdError)
 {
+  if (cmdError) *cmdError = true;
   if (args.size() == 1) {
     if (args[0] == "*") {
       BZDB.iterate(resetAllCallback,NULL);
+      if (cmdError) *cmdError = false;
       return "all variables reset";
     } else if (BZDB.isSet(args[0])) {
       StateDatabase::Permission permission = BZDB.getPermission(args[0]);
       if ((permission == StateDatabase::ReadWrite) || (permission == StateDatabase::Locked)) {
 	BZDB.set(args[0], BZDB.getDefault(args[0]), StateDatabase::Server);
 	lastWorldParmChange = TimeKeeper::getCurrent();
+	if (cmdError) *cmdError = false;
 	return args[0] + " reset";
       }
       return "variable " + args[0] + " is not writeable";
@@ -6613,6 +6598,7 @@ int main(int argc, char **argv)
 	      player->player.setDead();
 	      zapFlagByPlayer(j);
 	      player->player.setPlayedEarly(false);
+	      player->player.setRestartOnBase(true);
 	    }
 	  }
 
diff --git a/src/bzfs/bzfsAPI.cxx b/src/bzfs/bzfsAPI.cxx
index fec5813..a94a59e 100644
--- a/src/bzfs/bzfsAPI.cxx
+++ b/src/bzfs/bzfsAPI.cxx
@@ -3450,7 +3450,7 @@ public:
 
   ~URLFetchHandler()
   {
-    removeAllJobs();
+    KillCurrentJob(false); // don't notify, since the handler might have been destructed
     if (curlHandle) {
       curl_multi_cleanup(curlHandle);
     }
diff --git a/src/bzfs/commands.cxx b/src/bzfs/commands.cxx
index 274465a..dab21a9 100644
--- a/src/bzfs/commands.cxx
+++ b/src/bzfs/commands.cxx
@@ -1045,10 +1045,19 @@ bool ResetCommand::operator() (const char	 *message,
     return true;
   }
   std::string command = (message + 1);
+  bool cmdError = false;
   // we aren't case sensitive but CMDMGR is
   for (int i = 0; i < 5 /*"reset"*/; ++i)
     command[i] = tolower(command[i]);
-  sendMessage(ServerPlayer, t, CMDMGR.run(command).c_str());
+  sendMessage(ServerPlayer, t, CMDMGR.run(command, &cmdError).c_str());
+
+  if (!cmdError) {
+    char message2[MessageLen];
+    snprintf(message2, MessageLen, "Variable Reset Notice by %s of %s",
+             playerData->player.getCallSign(), command.c_str());
+    sendMessage(ServerPlayer, AdminPlayers, message2);
+  }
+
   return true;
 }
 
diff --git a/src/date/buildDate.cxx b/src/date/buildDate.cxx
index b7ff96e..f3f96ed 100644
--- a/src/date/buildDate.cxx
+++ b/src/date/buildDate.cxx
@@ -46,7 +46,7 @@
 #endif
 
 #ifndef BZ_REV
-#  define BZ_REV		6
+#  define BZ_REV		8
 #endif
 
 // DEVEL | RC# | STABLE | MAINT
diff --git a/src/obstacle/Teleporter.cxx b/src/obstacle/Teleporter.cxx
index d80c486..e194265 100644
--- a/src/obstacle/Teleporter.cxx
+++ b/src/obstacle/Teleporter.cxx
@@ -478,7 +478,8 @@ void Teleporter::getPointWRT(const Teleporter& t2, int face1, int face2,
 
   // fixed x offset, and scale y & z coordinates
   p.x = -size2.x;
-  p.yz() *= dimsScale; // note the .yz()
+  p.y *= dimsScale.x;
+  p.z *= dimsScale.y;
 
   // apply rotation, translate to new position
   p = p.rotateZ(+radians2);
diff --git a/src/platform/SDL2Display.cxx b/src/platform/SDL2Display.cxx
index 949a9d4..688dd8f 100644
--- a/src/platform/SDL2Display.cxx
+++ b/src/platform/SDL2Display.cxx
@@ -569,9 +569,11 @@ bool SDLDisplay::setupEvent(BzfEvent& _event, const SDL_Event& event) const
       _event.type = BzfEvent::Redraw;
       break;
     case SDL_WINDOWEVENT_HIDDEN:
+    case SDL_WINDOWEVENT_MINIMIZED:
       _event.type = BzfEvent::Unmap;
       break;
     case SDL_WINDOWEVENT_SHOWN:
+    case SDL_WINDOWEVENT_RESTORED:
       _event.type = BzfEvent::Map;
       break;
 #ifdef SDL_WINDOW_MOUSE_CAPTURE
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index be97f52..0000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-check_PROGRAMS = unittests
-
-unittests_SOURCES = \
-        tests.cxx \
-	bans.cxx \
-	../src/bzfs/AccessControlList.cxx
-
-unittests_CXXFLAGS = -lCppUTest
-
-EXTRA_DIST = 
-
-MAINTAINERCLEANFILES = \
-        Makefile.in
-
-AM_CPPFLAGS = \
-	-I$(top_srcdir)/src/bzfs \
-	$(CONF_CPPFLAGS) \
-	-I$(top_srcdir)/include \
-	-DCPPUTEST
-AM_CFLAGS = $(CONF_CFLAGS)
-AM_CXXFLAGS = $(CONF_CXXFLAGS)
-
-LDADD = \
-	../src/common/libCommon.la \
-	$(LIBREGEX)
diff --git a/tests/bans.cxx b/tests/bans.cxx
deleted file mode 100644
index 31d431f..0000000
--- a/tests/bans.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-/* bzflag
- * Copyright (c) 1993-2016 Tim Riker
- *
- * This package is free software;  you can redistribute it and/or
- * modify it under the terms of the license found in the file
- * named COPYING that should have accompanied this file.
- *
- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include "AccessControlList.h"
-
-#include "CppUTest/TestHarness.h"
-
-TEST_GROUP(Bans)
-{
-
-};
-
-TEST(Bans, IPBanComparisons)
-{
-  in_addr ip1, ip2, ip3;
-  ip1.s_addr = inet_addr("127.0.0.1");
-  ip2.s_addr = inet_addr("127.0.0.1");
-  ip3.s_addr = inet_addr("127.0.0.2");
-
-  BanInfo a1(ip1, "nobody", 0, 32);
-  BanInfo a2(ip2, "nobody", 0, 32);
-  BanInfo a3(ip3, "nobody", 0, 32);
-  BanInfo a4(ip2, "nobody", 0, 8);
-
-  // 127.0.0.1/32 should equal 127.0.0.1/32
-  CHECK_TEXT(a1 == a2, "Equality: Two equivilent bans were not equal.");
-  CHECK_TEXT(!(a1 != a2), "Inequality: Two equivilent bans were not equal.");
-
-  // 127.0.0.1/32 should not equal 127.0.0.2/32
-  CHECK_TEXT(!(a1 == a3), "Equality: Two different bans were equal.");
-  CHECK_TEXT(a1 != a3, "Inequality: Two different bans were equal.");
-
-  // 127.0.0.1/32 should not equal 127.0.0.1/8
-  CHECK_TEXT(!(a1 == a4), "Equality: Two different bans with the same IP but different CIDR were equal.");
-  CHECK_TEXT(a1 != a4, "Inequality: Two different bans with the same IP but different CIDR were equal.");
-}
-
-TEST(Bans, IPBanContains)
-{
-  in_addr ip1, ip2, ip3, ip4, ip5;
-  ip1.s_addr = inet_addr("127.0.0.1");
-  ip2.s_addr = inet_addr("127.0.0.5");
-  ip3.s_addr = inet_addr("127.0.5.5");
-  ip4.s_addr = inet_addr("127.5.5.5");
-  ip5.s_addr = inet_addr("128.1.2.3");
-
-  BanInfo exact1(ip1, "nobody", 0, 32);
-  BanInfo exact2(ip2, "nobody", 0, 32);
-
-  BanInfo classC1(ip1, "nobody", 0, 24);
-  BanInfo classB1(ip1, "nobody", 0, 16);
-  BanInfo classA1(ip1, "nobody", 0, 8);
-
-  BanInfo CIDR30(ip1, "nobody", 0, 30);
-  BanInfo CIDR29(ip1, "nobody", 0, 30);
-
-  // Exact matches should be contained
-  CHECK_TEXT(exact1.contains(ip1), "First exact IP false negative.");
-  CHECK_TEXT(exact2.contains(ip2), "Second exact IP false negative.");
-
-  // But these should not (since we're using the opposite IPs)
-  CHECK_TEXT(!exact1.contains(ip2), "First exact IP false positive.");
-  CHECK_TEXT(!exact2.contains(ip1), "Second exact IP false positive.");
-
-  // Check IPs within the subnet
-  CHECK_TEXT(classC1.contains(ip2), "Class C positive match test failure.");
-  CHECK_TEXT(classB1.contains(ip3), "Class B positive match test failure.");
-  CHECK_TEXT(classA1.contains(ip4), "Class A positive match test failure.");
-
-  // Check IPs outside of the subnet
-  CHECK_TEXT(!classC1.contains(ip3), "Class C negative match test failure.");
-  CHECK_TEXT(!classC1.contains(ip4), "Class B negative match test failure.");
-  CHECK_TEXT(!classC1.contains(ip5), "Class A negative match test failure.");
-}
-
-TEST(Bans, BanMaskString)
-{
-  in_addr ip1;
-  ip1.s_addr = inet_addr("127.5.35.135");
-
-  AccessControlList acl;
-
-  std::string exact = acl.getBanMaskString(ip1, 32);
-  std::string cidr24 = acl.getBanMaskString(ip1, 24);
-  std::string cidr16 = acl.getBanMaskString(ip1, 16);
-  std::string cidr8 = acl.getBanMaskString(ip1, 8);
-  std::string cidr25 = acl.getBanMaskString(ip1, 25);
-  std::string cidr19 = acl.getBanMaskString(ip1, 19);
-  
-  CHECK_TEXT(exact == "127.5.35.135", std::string("Exact IP mask generation failed: " + exact + " != 127.5.7.135").c_str());
-  CHECK_TEXT(cidr24 == "127.5.35.*", std::string("CIDR /24 mask generation failed: " + cidr24 + " != 127.5.7.*").c_str());
-  CHECK_TEXT(cidr16 == "127.5.*.*", std::string("CIDR /16 mask generation failed: " + cidr16 + " != 127.5.*.*").c_str());
-  CHECK_TEXT(cidr8 == "127.*.*.*", std::string("CIDR /8 mask generation failed: " + cidr8 + " != 127.*.*.*").c_str());
-  CHECK_TEXT(cidr25 == "127.5.35.128/25", std::string("CIDR /25 mask generation failed: " + cidr25 + " != 127.5.7.128/25").c_str());
-  CHECK_TEXT(cidr19 == "127.5.32.0/19", std::string("CIDR /19 mask generation failed: " + cidr19 + " != 127.5.32.0/19").c_str());
-}
-
-
-// Local Variables: ***
-// mode:C++ ***
-// tab-width: 8 ***
-// c-basic-offset: 2 ***
-// indent-tabs-mode: t ***
-// End: ***
-// ex: shiftwidth=2 tabstop=8
diff --git a/tests/tests.cxx b/tests/tests.cxx
deleted file mode 100644
index 173f731..0000000
--- a/tests/tests.cxx
+++ /dev/null
@@ -1,29 +0,0 @@
-/* bzflag
- * Copyright (c) 1993-2016 Tim Riker
- *
- * This package is free software;  you can redistribute it and/or
- * modify it under the terms of the license found in the file
- * named COPYING that should have accompanied this file.
- *
- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include "CppUTest/CommandLineTestRunner.h"
-
-// Set a debug level so it doesn't complain about a missing external symbol
-int debugLevel = 0;
-
-int main(int ac, const char** av)
-{
-  return CommandLineTestRunner::RunAllTests(ac, av);
-}
-
-// Local Variables: ***
-// mode:C++ ***
-// tab-width: 8 ***
-// c-basic-offset: 2 ***
-// indent-tabs-mode: t ***
-// End: ***
-// ex: shiftwidth=2 tabstop=8

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/bzflag.git



More information about the Pkg-games-commits mailing list