Hello community,

here is the log from the commit of package slade for openSUSE:Factory checked 
in at 2017-02-21 13:38:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/slade (Old)
 and      /work/SRC/openSUSE:Factory/.slade.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "slade"

Changes:
--------
--- /work/SRC/openSUSE:Factory/slade/slade.changes      2017-01-25 
23:24:02.456394251 +0100
+++ /work/SRC/openSUSE:Factory/.slade.new/slade.changes 2017-02-21 
13:38:35.695784433 +0100
@@ -1,0 +2,25 @@
+Fri Feb 10 01:19:39 UTC 2017 - [email protected]
+
+- Update to 3.1.1.5
+- Add appdata.xml
+- General
+  * Added an option to always show acc compiler output, even on
+    success
+  * Various updates to game and language configurations
+- Resource Editor
+  * Added a button to clear the entry list filter
+  * Fixed some issues when importing a palette from a PNG
+  * Fixed some potential crashes when loading corrupted Doom gfx
+    entries
+  * Fixed some issues with converting to doom flat format
+- Texture Editor
+  * Patch and texture operations should now work on the correct
+    item when the texture or patch list is sorted
+  * Fixed PNG alpha channel being ignored for CopyAlpha/Overlay
+    patches
+- Map Editor
+  * Added the option not to build nodes when saving a map (select
+    "Don't build nodes" as the node builder)
+  * Fixed a potential crash when building nodes
+
+-------------------------------------------------------------------

Old:
----
  3.1.1.4.tar.gz

New:
----
  3.1.1.5.tar.gz
  slade.appdata.xml

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ slade.spec ++++++
--- /var/tmp/diff_new_pack.qBR2wR/_old  2017-02-21 13:38:36.335694159 +0100
+++ /var/tmp/diff_new_pack.qBR2wR/_new  2017-02-21 13:38:36.339693595 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package slade
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           slade
-Version:        3.1.1.4
+Version:        3.1.1.5
 Release:        0
 Summary:        An editor for DOOM maps and WAD/PK3 archives
 License:        GPL-2.0+
@@ -25,22 +25,23 @@
 Url:            https://github.com/sirjuddington/SLADE
 Source:         https://github.com/sirjuddington/%name/archive/%version.tar.gz
 Source2:        slade.desktop
+Source100:      slade.appdata.xml
 Patch1:         basepk3.diff
 Patch2:         wxChar.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  ImageMagick
 BuildRequires:  cmake
 BuildRequires:  freeimage-devel
-BuildRequires:  ftgl-devel
 BuildRequires:  gcc-c++
-BuildRequires:  sfml2-devel
 BuildRequires:  update-desktop-files
 BuildRequires:  wxWidgets-3_0-devel
 BuildRequires:  zip
 BuildRequires:  pkgconfig(fluidsynth)
+BuildRequires:  pkgconfig(ftgl)
 BuildRequires:  pkgconfig(gl)
 BuildRequires:  pkgconfig(glew)
 BuildRequires:  pkgconfig(libcurl)
+BuildRequires:  pkgconfig(sfml-all)
 BuildRequires:  pkgconfig(x11)
 
 %description
@@ -64,6 +65,7 @@
 
 convert "build/msvc/slade.ico[0]" -alpha on "%name.png"
 install -Dpm0644 "%name.png" "$b/%_datadir/pixmaps/%name.png"
+install -Dpm0644 %{SOURCE100} "$b/%_datadir/appdata/%name.appdata.xml"
 
 pushd misc
 for txtfile in detect_functions.txt old-simage-formats.txt stuff.txt 
udmf11.txt \
@@ -88,5 +90,6 @@
 %_datadir/slade3/
 %_datadir/pixmaps/%name.png
 %_datadir/applications/%name.desktop
+%_datadir/appdata/%name.appdata.xml
 
 %changelog

++++++ 3.1.1.4.tar.gz -> 3.1.1.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/build/msvc/SLADE.rc 
new/SLADE-3.1.1.5/build/msvc/SLADE.rc
--- old/SLADE-3.1.1.4/build/msvc/SLADE.rc       2016-09-26 06:00:29.000000000 
+0200
+++ new/SLADE-3.1.1.5/build/msvc/SLADE.rc       2017-01-17 15:25:52.000000000 
+0100
@@ -60,8 +60,8 @@
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,1,1,4
- PRODUCTVERSION 3,1,1,4
+ FILEVERSION 3,1,1,5
+ PRODUCTVERSION 3,1,1,5
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -77,12 +77,12 @@
         BLOCK "0c0904b0"
         BEGIN
             VALUE "FileDescription", "SLADE"
-            VALUE "FileVersion", "3.1.1.4"
+            VALUE "FileVersion", "3.1.1.5"
             VALUE "InternalName", "SLADE.exe"
-            VALUE "LegalCopyright", "Copyright (C) 2016"
+            VALUE "LegalCopyright", "Copyright (C) 2017"
             VALUE "OriginalFilename", "SLADE.exe"
             VALUE "ProductName", "SLADE"
-            VALUE "ProductVersion", "3.1.1.4"
+            VALUE "ProductVersion", "3.1.1.5"
         END
     END
     BLOCK "VarFileInfo"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/build/msvc/SLADE.sln 
new/SLADE-3.1.1.5/build/msvc/SLADE.sln
--- old/SLADE-3.1.1.4/build/msvc/SLADE.sln      2016-09-26 06:00:29.000000000 
+0200
+++ new/SLADE-3.1.1.5/build/msvc/SLADE.sln      2017-01-17 15:25:52.000000000 
+0100
@@ -1,21 +1,21 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30501.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SLADE", "SLADE.vcxproj", 
"{33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
-               Release - FTGL|Win32 = Release - FTGL|Win32
+               Release - WinXP|Win32 = Release - WinXP|Win32
                Release|Win32 = Release|Win32
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
                {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Debug|Win32.ActiveCfg = 
Debug|Win32
                {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Debug|Win32.Build.0 = 
Debug|Win32
-               {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release - 
FTGL|Win32.ActiveCfg = Release - FTGL|Win32
-               {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release - 
FTGL|Win32.Build.0 = Release - FTGL|Win32
+               {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release - 
WinXP|Win32.ActiveCfg = Release - WinXP|Win32
+               {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release - 
WinXP|Win32.Build.0 = Release - WinXP|Win32
                {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release|Win32.ActiveCfg 
= Release|Win32
                {33CC5FBD-4EB0-48A9-9069-0EC0B5FF5A46}.Release|Win32.Build.0 = 
Release|Win32
        EndGlobalSection
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/build/msvc/SLADE.vcxproj 
new/SLADE-3.1.1.5/build/msvc/SLADE.vcxproj
--- old/SLADE-3.1.1.4/build/msvc/SLADE.vcxproj  2016-09-26 06:00:29.000000000 
+0200
+++ new/SLADE-3.1.1.5/build/msvc/SLADE.vcxproj  2017-01-17 15:25:52.000000000 
+0100
@@ -5,8 +5,8 @@
       <Configuration>Debug</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Release - FTGL|Win32">
-      <Configuration>Release - FTGL</Configuration>
+    <ProjectConfiguration Include="Release - WinXP|Win32">
+      <Configuration>Release - WinXP</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
     <ProjectConfiguration Include="Release|Win32">
@@ -26,10 +26,10 @@
     <CharacterSet>Unicode</CharacterSet>
     <PlatformToolset>v140_xp</PlatformToolset>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'" Label="Configuration">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v110_xp</PlatformToolset>
+    <PlatformToolset>v140_xp</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
@@ -42,7 +42,7 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
   </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'" Label="PropertySheets">
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="PropertySheets">
@@ -55,17 +55,17 @@
     <IntDir 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
     <LinkIncremental 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <OutDir 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\dist\</OutDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">.\dist\</OutDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">..\..\dist\WinXP\</OutDir>
     <IntDir 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">$(Configuration)\</IntDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">$(Configuration)\</IntDir>
     <LinkIncremental 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">false</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">false</LinkIncremental>
     <GenerateManifest 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</GenerateManifest>
-    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">true</GenerateManifest>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">true</GenerateManifest>
     <IncludePath 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\..\src;$(ProjectDir)\fluidsynth\include;$(ProjectDir)..\..\src\External\dumb;$(WXWIN)\lib\vc_lib\mswu;$(WXWIN)\include;$(FREEIMAGE)\Dist\x32;$(SFML)\include;$(ProjectDir)..\..\src\Application;$(CURL)\include;$(IncludePath)</IncludePath>
-    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">$(ProjectDir)src;$(FLUIDSYNTH)\include;$(WXWIN)\lib\vc_lib\mswu;$(WXWIN)\include;$(FREEIMAGE)\Dist;$(SFML)\include;$(FTGL)\src;$(FREETYPE)\include;$(IncludePath)</IncludePath>
+    <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">$(ProjectDir)..\..\src;$(ProjectDir)\fluidsynth\include;$(ProjectDir)..\..\src\External\dumb;$(WXWIN)\lib\vc_lib\mswu;$(WXWIN)\include;$(FREEIMAGE)\Dist\x32;$(SFML)\include;$(ProjectDir)..\..\src\Application;$(CURL)\include;$(IncludePath)</IncludePath>
     <LibraryPath 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)\fluidsynth\lib;$(SolutionDir)$(Configuration)\;$(WXWIN)\lib\vc_lib;$(FREEIMAGE)\Dist\x32;$(SFML)\lib;$(CURL)\lib\static-release-x86;$(LibraryPath)</LibraryPath>
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">$(FLUIDSYNTH)\lib;$(WXWIN)\lib\vc_lib;$(FREEIMAGE)\Dist;$(SFML)\lib;$(FTGL)\msvc\build;$(FREETYPE)\objs\win32;$(SolutionDir)$(Configuration)\;$(LibraryPath)</LibraryPath>
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">$(ProjectDir)\fluidsynth\lib;$(SolutionDir)$(Configuration)\;$(WXWIN)\lib\vc_lib;$(FREEIMAGE)\Dist\x32;$(SFML)\lib;$(CURL)\lib\static-release-x86;$(LibraryPath)</LibraryPath>
     <IncludePath 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\..\src;$(ProjectDir)\fluidsynth\include;$(ProjectDir)..\..\src\External\dumb;$(WXWIN)\lib\vc_lib\mswu;$(WXWIN)\include;$(FREEIMAGE)\Dist\x32;$(SFML)\include;$(ProjectDir)..\..\src\Application;$(CURL)\include;$(IncludePath)</IncludePath>
     <LibraryPath 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)\fluidsynth\lib;$(SolutionDir)$(Configuration)\;$(WXWIN)\lib\vc_lib;$(FREEIMAGE)\Dist\x32;$(SFML)\lib;$(CURL)\lib\static-release-x86;$(LibraryPath)</LibraryPath>
     <TargetName 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">SLADE-dbg</TargetName>
@@ -78,8 +78,13 @@
     <Linkage-sfml-graphics>static</Linkage-sfml-graphics>
     <Linkage-sfml-window>static</Linkage-sfml-window>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">
-    <CodeAnalysisRuleSet>MixedRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    <Linkage-sfml-audio>static</Linkage-sfml-audio>
+    <Linkage-sfml-system>static</Linkage-sfml-system>
+    <Linkage-sfml-graphics>static</Linkage-sfml-graphics>
+    <Linkage-sfml-window>static</Linkage-sfml-window>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <Linkage-sfml-audio>static</Linkage-sfml-audio>
@@ -146,28 +151,26 @@
       <AdditionalManifestFiles>SLADE.manifest 
%(AdditionalManifestFiles)</AdditionalManifestFiles>
     </Manifest>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
FTGL|Win32'">
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release - 
WinXP|Win32'">
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      
<PreprocessorDefinitions>WIN32;SFML_STATIC;__WXMSW__;_WINDOWS;NOPCH;_CRT_SECURE_NO_WARNINGS;NDEBUG;GLEW_STATIC;FTGL_STATIC_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      
<PreprocessorDefinitions>SFML_STATIC;WIN32;USE_SFML_RENDERWINDOW;USE_WEBVIEW_STARTPAGE;__WXMSW__;_WINDOWS;NOPCH;_CRT_SECURE_NO_WARNINGS;NDEBUG;GLEW_STATIC;NOLIBMODPLUG;NOCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessToFile>false</PreprocessToFile>
       <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <FloatingPointModel>Fast</FloatingPointModel>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
-      
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
+      
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>fluidsynth.lib;ftgl_static.lib;freetype2411.lib;FreeImage.lib;wxbase30u.lib;wxmsw30u_core.lib;wxmsw30u_aui.lib;wxmsw30u_gl.lib;wxmsw30u_webview.lib;wxmsw30u_adv.lib;wxmsw30u_stc.lib;wxmsw30u_propgrid.lib;wxmsw30u_media.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;wxzlib.lib;wxregexu.lib;wxexpat.lib;wxscintilla.lib;sfml-window-s.lib;sfml-audio-s.lib;sfml-system-s.lib;sfml-main.lib;openal32.lib;sndfile.lib;winmm.lib;comctl32.lib;rpcrt4.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>fluidsynth.lib;winmm.lib;rpcrt4.lib;kernel32.lib;user32.lib;gdi32.lib;ole32.lib;oleaut32.lib;comctl32.lib;comdlg32.lib;uuid.lib;advapi32.lib;shell32.lib;wxbase31u.lib;wxbase31u_net.lib;wxmsw31u_core.lib;wxmsw31u_gl.lib;wxmsw31u_aui.lib;wxmsw31u_webview.lib;wxmsw31u_adv.lib;wxmsw31u_stc.lib;wxmsw31u_propgrid.lib;wxmsw31u_media.lib;wxregexu.lib;wxzlib.lib;wxpng.lib;wxtiff.lib;wxjpeg.lib;wxscintilla.lib;opengl32.lib;glu32.lib;FreeImage.lib;sfml-graphics-s.lib;sfml-audio-s.lib;sfml-window-s.lib;sfml-system-s.lib;sfml-main.lib;freetype.lib;openal32.lib;wsock32.lib;flac.lib;ogg.lib;vorbis.lib;vorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <EnableUAC>false</EnableUAC>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <SubSystem>Windows</SubSystem>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/dist/makebuild.ps1 
new/SLADE-3.1.1.5/dist/makebuild.ps1
--- old/SLADE-3.1.1.4/dist/makebuild.ps1        2016-09-26 06:00:29.000000000 
+0200
+++ new/SLADE-3.1.1.5/dist/makebuild.ps1        2017-01-17 15:25:52.000000000 
+0100
@@ -1,5 +1,5 @@
-$version = "3114"
-$versionstring = "3.1.1.4"
+$version = "3115"
+$versionstring = "3.1.1.5"
 
 # Check for 7-zip install
 $7zpath = "$env:ProgramFiles\7-Zip\7z.exe"
@@ -21,12 +21,25 @@
 #    $versionstring = $version+"_b"+$beta
 #}
 
+# Prompt to build SLADE
+Write-Host "`nRebuild SLADE? (y/n) " -foregroundcolor cyan -nonewline
+$buildbinaries = Read-Host
+
+# Build SLADE
+if ($buildbinaries.ToLower() -eq "y")
+{
+       $devenvpath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 
14.0\Common7\IDE\devenv.com"
+       & $devenvpath (resolve-path ..\build\msvc\SLADE.sln).Path /rebuild 
Release /project SLADE.vcxproj
+       & $devenvpath (resolve-path ..\build\msvc\SLADE.sln).Path /rebuild 
"Release - WinXP" /project SLADE.vcxproj
+}
+
 # Determine release directory
 $releasedir = "$PSScriptRoot\$version"
 
 # Create release directory if needed
 Write-Host "`nCreate directory $releasedir" -foregroundcolor yellow
 New-Item -ItemType directory -Force -Path $releasedir | out-null
+New-Item -ItemType directory -Force -Path "$releasedir\XP" | out-null
 
 # Remove existing pk3 if it exists
 $pk3path = ".\slade.pk3"
@@ -50,9 +63,11 @@
 Write-Host "`nCopying SLADE files..." -foregroundcolor yellow
 Copy-Item (resolve-path ".\FreeImage.dll")      "$releasedir" -Force
 Copy-Item (resolve-path ".\libfluidsynth.dll")  "$releasedir" -Force
-Copy-Item (resolve-path ".\openal32.dll")       "$releasedir" -Force
+Copy-Item (resolve-path ".\openal32.dll")              "$releasedir" -Force
 Copy-Item (resolve-path ".\SLADE.exe")          "$releasedir" -Force
 Copy-Item (resolve-path ".\SLADE.pdb")          "$releasedir" -Force
+Copy-Item (resolve-path ".\WinXP\SLADE.exe")    "$releasedir\XP" -Force
+Copy-Item (resolve-path ".\WinXP\SLADE.pdb")    "$releasedir\XP" -Force
 Copy-Item (resolve-path ".\slade.pk3")          "$releasedir" -Force
 Write-Host "Done" -foregroundcolor green
 
@@ -72,6 +87,16 @@
        "$releasedir\SLADE.pdb" `
        "$releasedir\slade.pk3"
        Write-Host "Done" -foregroundcolor green
+
+       Write-Host "`nBuilding XP binary 7z..." -ForegroundColor Yellow
+       & $7zpath a -t7z "$releasedir\slade_${version}_winxp.7z" `
+       "$releasedir\FreeImage.dll" `
+       "$releasedir\libfluidsynth.dll" `
+       "$releasedir\openal32.dll" `
+       "$releasedir\XP\SLADE.exe" `
+       "$releasedir\XP\SLADE.pdb" `
+       "$releasedir\slade.pk3"
+       Write-Host "Done" -ForegroundColor Green
 }
 
 # Prompt to build installer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/dist/res/config/entry_types/types_text.txt 
new/SLADE-3.1.1.5/dist/res/config/entry_types/types_text.txt
--- old/SLADE-3.1.1.4/dist/res/config/entry_types/types_text.txt        
2016-09-26 06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/dist/res/config/entry_types/types_text.txt        
2017-01-17 15:25:52.000000000 +0100
@@ -291,6 +291,12 @@
                icon = "e_texturex";
                text_language = "z_textures";
        }
+
+       trnslate : text
+       {
+               name = "Translation defs";
+               match_name = "trnslate";
+       }
        
        palvers : text
        {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/dist/res/config/languages/acs.txt 
new/SLADE-3.1.1.5/dist/res/config/languages/acs.txt
--- old/SLADE-3.1.1.4/dist/res/config/languages/acs.txt 2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/dist/res/config/languages/acs.txt 2017-01-17 
15:25:52.000000000 +0100
@@ -160,7 +160,7 @@
        keywords = {
                function, enter, respawn, death, lightning, unloading, 
disconnect, kill,
                fixed, global, net, import, libdefine, library, nocompact, 
nowadauthor,
-               EncryptStrings, static, wadauthor, region, endregion,
+               EncryptStrings, static, wadauthor, region, endregion, reopen,
                
                // Skulltag script types
                BlueReturn, RedReturn, WhiteReturn, Pickup, ClientSide
@@ -633,7 +633,7 @@
                Thing_ProjectileIntercept = "int tid, int type, int speed, int 
target, int newtid";
                Thing_Raise = "int tid";
                Thing_Remove = "int tid";
-               Thing_SetConversation = "int tid, conv_id";
+               Thing_SetConversation = "int tid, int conv_id";
                Thing_SetGoal = "int tid, int goal, int delay, [int chasegoal]";
                Thing_SetSpecial = "int tid, int special, int arg1, int arg2, 
int arg3";
                Thing_SetTranslation = "int tid, int translation_num";
@@ -672,7 +672,7 @@
                CheckActorClass = "int tid, str class";
                CheckActorFloorTexture = "int tid, str texture";
                CheckActorInventory = "int tid, str inventory_item";
-               CheckActorProperty = "int tid, int property, int value", "int 
tid, int property, float value", "int tid, int property, str value";
+               CheckActorProperty = "int tid, int property, int value", "int 
tid, int property, fixed value", "int tid, int property, str value";
                CheckActorState = "int tid, str statename, [bool exact]";
                CheckClass = "str classname";
                CheckFlag = "int tid, str flag";
@@ -686,7 +686,7 @@
                ClearActorInventory = "int tid";
                ClearInventory;
                ClearLineSpecial;
-               Cos = "int angle";
+               Cos = "fixed angle";
                CreateTranslation = "int transnumber, a:b=c:d, ...", "int 
transnumber, a:b=[red1,green1,blue1]:[red2,green2,blue2], ...";
                DamageActor = "int target_tid, int target_pointer, int 
inflictor_tid, int inflictor_pointer, int amount, str damagetype";
                Delay = "int tics";
@@ -718,15 +718,15 @@
                GetAirSupply = "int playernum";
                GetAmmoCapacity = "str classname";
                GetArmorInfo = "int infotype";
-               GetArmorType = "string armortype, int playernum";
+               GetArmorType = "str armortype, int playernum";
                GetChar = "str string, int index";
                GetCVar = "str cvar";
                GetCVarString = "str cvarname";
                GetLevelInfo = "int levelinfo";
                GetLineActivation = "int lineid";
                GetLineRowOffset;
-               GetLineUDMFFixed = "int lineid, string key";
-               GetLineUDMFInt = "int lineid, string key";
+               GetLineUDMFFixed = "int lineid, str key";
+               GetLineUDMFInt = "int lineid, str key";
                GetMaxInventory = "int tid, str inventory";
                GetPlayerInfo = "int playernumber, int playerinfo";
                GetPlayerInput = "int player, int input";
@@ -737,13 +737,13 @@
                GetSectorCeilingZ = "int tag, int x, int y";
                GetSectorFloorZ = "int tag, int x, int y";
                GetSectorLightLevel = "int tag";
-               GetSectorUDMFFixed = "int tag, string key";
-               GetSectorUDMFInt = "int tag, string key";
-               GetSideUDMFFixed = "int lineid, bool back, string key";
-               GetSideUDMFInt = "int lineid, bool back, string key";
+               GetSectorUDMFFixed = "int tag, str key";
+               GetSectorUDMFInt = "int tag, str key";
+               GetSideUDMFFixed = "int lineid, bool back, str key";
+               GetSideUDMFInt = "int lineid, bool back, str key";
                GetSigilPieces;
-               GetThingUDMFFixed = "int tid, string key";
-               GetThingUDMFInt = "int tid, string key";
+               GetThingUDMFFixed = "int tid, str key";
+               GetThingUDMFInt = "int tid, str key";
                GetUserArray = "int tid, str name, int pos";
                GetUserCVar = "int playernum, str cvarname";
                GetUserCVarString = "int playernum, str cvarname";
@@ -751,8 +751,8 @@
                GetWeapon;
                GiveActorInventory = "int tid, str inventory_item, int amount";
                GiveInventory = "str inventory_item, int amount";
-               HudMessage = "text; int type, int id, int color, fixed x, fixed 
y, fixed holdTime, alpha", "text; HUDMSG_FADEOUT, int id, int color, fixed x, 
fixed y, fixed holdTime, fixed fadetime, alpha", "text; HUDMSG_TYPEON, int id, 
int color, fixed x, fixed y, fixed holdTime, fixed typetime, fixed fadetime, 
alpha", "text; HUDMSG_FADEINOUT, int id, int color, fixed x, fixed y, fixed 
holdTime, fixed inTime, fixed outTime, alpha";
-               HudMessageBold = "text; int type, int id, int color, fixed x, 
fixed y, fixed holdTime, alpha", "text; HUDMSG_FADEOUT, int id, int color, 
fixed x, fixed y, fixed holdTime, fixed fadetime, alpha", "text; HUDMSG_TYPEON, 
int id, int color, fixed x, fixed y, fixed holdTime, fixed typetime, fixed 
fadetime, alpha", "text; HUDMSG_FADEINOUT, int id, int color, fixed x, fixed y, 
fixed holdTime, fixed inTime, fixed outTime, alpha";
+               HudMessage = "type:expression; int type, int id, int color, 
fixed x, fixed y, fixed holdTime, fixed alpha", "type:expression; 
HUDMSG_FADEOUT, int id, int color, fixed x, fixed y, fixed holdTime, fixed 
fadetime, fixed alpha", "type:expression; HUDMSG_TYPEON, int id, int color, 
fixed x, fixed y, fixed holdTime, fixed typetime, fixed fadetime, fixed alpha", 
"type:expression; HUDMSG_FADEINOUT, int id, int color, fixed x, fixed y, fixed 
holdTime, fixed inTime, fixed outTime, fixed alpha";
+               HudMessageBold = "type:expression; int type, int id, int color, 
fixed x, fixed y, fixed holdTime, fixed alpha", "type:expression; 
HUDMSG_FADEOUT, int id, int color, fixed x, fixed y, fixed holdTime, fixed 
fadetime, fixed alpha", "type:expression; HUDMSG_TYPEON, int id, int color, 
fixed x, fixed y, fixed holdTime, fixed typetime, fixed fadetime, fixed alpha", 
"type:expression; HUDMSG_FADEINOUT, int id, int color, fixed x, fixed y, fixed 
holdTime, fixed inTime, fixed outTime, fixed alpha";
                IsPointerEqual = "int ptr_select1, int ptr_select2, [int tid1], 
[int tid2]";
                IsTIDUsed = "int tid";
                LineSide;
@@ -771,7 +771,7 @@
                PlayerIsBot = "int playernumber";
                PlayerNumber;
                PlayMovie = "str moviename - but this function does not work 
anyway";
-               PlaySound = "int tid, str sound, [int channel], [fixed volume], 
[bool looping], [fixed attenuation]";
+               PlaySound = "int tid, str sound, [int channel], [fixed volume], 
[bool looping], [fixed attenuation], [bool local]";
                PolyWait = "int polynum";
                Print = "type:expression";
                PrintBold = "type:expression";
@@ -788,7 +788,7 @@
                SetActorFlag = "int tid, str flagname, bool set";
                SetActorPitch = "int tid, fixed pitch";
                SetActorPosition = "int tid, fixed x, fixed y, fixed z, bool 
fog";
-               SetActorProperty = "int tid, int property, int value", "int 
tid, int property, float value", "int tid, int property, str value";
+               SetActorProperty = "int tid, int property, int value", "int 
tid, int property, fixed value", "int tid, int property, str value";
                SetActorRoll = "int tid, fixed angle";
                SetActorState = "int tid, str statename[, bool exact]";
                SetActorTeleFog = "int tid, str sourcefog, str destfog";
@@ -820,24 +820,25 @@
                SetResultValue = "int value";
                SetSectorDamage = "int tag, int amount [, str damagetype [, int 
interval [, int leaky]]]";
                SetSectorTerrain = "int tag, int whichplane, str terraintype";
-               SetSkyScrollSpeed = "int sky, float skyspeed";
+               SetSkyScrollSpeed = "int sky, fixed skyspeed";
                SetThingSpecial = "int tid, int special [, int arg0 [, int arg1 
[, int arg2 [, int arg3 [, int arg4]]]]]";
+               SetTranslation = "int tid, str transname";
                SetUserArray = "int tid, str name, int pos, int value";
                SetUserCVar = "int playernum, str cvarname, int newvalue", "int 
playernum, str cvarname, fixed newvalue", "int playernum, str cvarname, bool 
newvalue";
                SetUserCVarString = "int playernum, str cvarname, str newvalue";
                SetUserVariable = "int tid, str name, int value";
                SetWeapon = "str weaponname";
-               Sin = "int angle";
+               Sin = "fixed angle";
                SoundSequence = "str sndseq";
                SoundSequenceOnActor = "int tid, str sndseq";
                SoundSequenceOnPolyobj = "int polynum, str sndseq";
-               SoundSequenceOnSector = "int tag, string seqname, int location";
+               SoundSequenceOnSector = "int tag, str seqname, int location";
                SoundVolume = "int tid, int channel, fixed volume";
                Spawn = "str classname, fixed x, fixed y, fixed z [, int tid [, 
int angle]]";
                SpawnDecal = "int tid, str decalname, [int flags], [fixed 
angle], [fixed zoffset], [fixed distance]";
                SpawnForced = "str classname, fixed x, fixed y, fixed z [, int 
tid [, int angle]]";
-               SpawnParticle = "int color [, bool fullbright [, int lifetime 
[, float size [, fixed x [, fixed y [, fixed z [, fixed velx [, fixed vely [, 
fixed velz [, fixed accelx [, fixed accely [, fixed accelz [, int startalpha [, 
int fadestep [, fixed endsize]]]]]]]]]]]]]]]";
-               SpawnProjectile = "int tid, string type, int angle, int speed, 
int vspeed, int gravity, int newtid";
+               SpawnParticle = "int color [, bool fullbright [, int lifetime 
[, fixed size [, fixed x [, fixed y [, fixed z [, fixed velx [, fixed vely [, 
fixed velz [, fixed accelx [, fixed accely [, fixed accelz [, int startalpha [, 
int fadestep [, fixed endsize]]]]]]]]]]]]]]]";
+               SpawnProjectile = "int tid, str type, int angle, int speed, int 
vspeed, int gravity, int newtid";
                SpawnSpot = "str classname, int spottid [, int tid [, int 
angle]]";
                SpawnSpotFacing = "str classname, int spottid [, int tid]";
                SpawnSpotFacingForced = "str classname, int spottid [, int 
tid]";
@@ -846,7 +847,7 @@
                StopSound = "int tid, [int channel]";
                StrCaseCmp = "str string1, str string2, [int maxcomparenum]";
                StrCmp = "str string1, str string2, [int maxcomparenum]";
-               StrCpy = "a:destination, string source[, int source_index]";
+               StrCpy = "a:destination, str source[, int source_index]";
                StrIcmp = "str string1, str string2, [int maxcomparenum]";
                StrLeft = "str string, int length";
                StrLen = "str string";
@@ -889,28 +890,30 @@
                BlueTeamScore;
                ConsoleCommand = "str command";
                ConsolePlayerNumber;
-               CountDBResults = "unknown parameters list";
+               CountDBResults = "res results";
                EndDBTransaction;
-               FreeDBResults = "unknown parameters list";
-               GetDBEntries = "unknown parameters list";
-               GetDBEntry = "str table, str variable";
-               GetDBEntryRank = "unknown parameters list";
-               GetDBEntryString = "unknown parameters list";
-               GetDBResultKeyString = "unknown parameters list";
-               GetDBResultValue = "unknown parameters list";
-               GetDBResultValueString = "unknown parameters list";
+               FreeDBResults = "res results";
+               GetDBEntries = "str namespace";
+               GetDBEntry = "str namespace, str key";
+               GetDBEntryRank = "str namespace, str key, bool order";
+               GetDBEntryString = "str namespace, str key";
+               GetDBResultKeyString = "res results, int row";
+               GetDBResultValue = "res results, int row";
+               GetDBResultValueString = "res results, int row";
                GetGamemodeState;
                GetInvasionState;
                GetInvasionWave;
-               GetPlayerAccountName = "unknown parameters list";
+               GetPlayerAccountName = "int player";
                GetPlayerLivesLeft = "int player";
                GetTeamProperty = "int team, int property";
-               IncrementDBEntry = "unknown parameters list";
+               GetTimeProperty = "int timestamp, int which, [int utc]";
+               IncrementDBEntry = "str namespace, str key, int value";
                IsMultiplayer;
                IsNetworkGame;
                IsOneFlagCTF;
                KickFromGame = "int player, str reason";
                Music_Change = "str music, int pattern";
+               NamedRequestScriptPuke = "str script, [int arg0], [int arg1], 
[int arg2], [int arg3]";
                PlayerArmorPoints;
                PlayerHealth;
                PlayerIsLoggedIn = "int playernumber";
@@ -920,13 +923,15 @@
                RedScore;
                RedTeamCount;
                RedTeamScore;
-               RequestScriptPuke = "int script, int arg0, int arg1, int arg2";
+               RequestScriptPuke = "int script, [int arg0], [int arg1], [int 
arg2], [int arg3]";
                ResetMap;
-               SetDBEntry = "str table, str variable, int value";
-               SetDBEntryString = "unknown parameters list";
+               SetDBEntry = "str namespace, str key, int value";
+               SetDBEntryString = "str namespace, str key, str value";
                SetPlayerLivesLeft = "int player, int amount";
                SinglePlayer;
-               SortDBEntries = "unknown parameters list";
+               SortDBEntries = "str namespace, int limit, int offset, bool 
order";
+               Strftime = "int timestamp, str format, [int utc]";
+               SystemTime;
                
                // ZDaemon functions
                GetTeamScore = "int team";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/dist/res/config/languages/decorate.txt 
new/SLADE-3.1.1.5/dist/res/config/languages/decorate.txt
--- old/SLADE-3.1.1.4/dist/res/config/languages/decorate.txt    2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/dist/res/config/languages/decorate.txt    2017-01-17 
15:25:52.000000000 +0100
@@ -15,7 +15,7 @@
                Raise, Heal, Crash, Crush, Wound, Greetings, Yes, No, Extreme, 
Bounce, Floor, Ceiling,
                Wall, Creature, Loop, Stop, Wait, Fail, Goto, Ready, Deselect, 
Select, Fire, AltFire,
                Hold, AltHold, Flash, AltFlash, Reload, Zoom, Pickup, Use, 
Drop, Bright, Fast, Slow, NoDelay,
-               CanRaise, Idle, Active, Inactive, Light, Offset, Action, 
Native, Const, Enum, Replaces,
+               CanRaise, Idle, Active, Inactive, Action, Native, Const, Enum, 
Replaces,
                LightDone, Super, Spray, GenericFreezeDeath, GenericCrush, 
User1, User2, User3, User4,
                DeadLowered,
 
@@ -48,7 +48,8 @@
                // Rendering
                RenderStyle, None, Normal, Fuzzy, OptFuzzy, Translucent, 
SoulTrans, Stencil, AddStencil, StencilColor, Shaded, 
                AddShaded, Shadow, Add, Subtract, DefaultAlpha, Alpha, XScale, 
YScale, Scale, Translation,
-               BloodColor, BloodType, Decal, FloatBobPhase, DistanceCheck, 
SpriteAngle, SpriteRotation,
+               BloodColor, BloodType, Decal, FloatBobPhase, DistanceCheck, 
SpriteAngle, SpriteRotation, VisibleAngles,
+               VisiblePitch,
                
                // Sounds
                SeeSound, AttackSound, PainSound, BounceSound, CrushPainSound,
@@ -65,7 +66,7 @@
                AttackZOffset, JumpZ, SpawnClass, ViewHeight, ForwardMove, 
SideMove, MaxHealth, MugshotMaxHealth, 
                RunHealth, MorphWeapon, FlechetteType, ScoreIcon, CrouchSprite, 
DamageScreenColor, StartItem, 
                InvulnerabilityMode, HealRadiusType, HexenArmor, Portrait, 
WeaponSlot, FallingScreamSpeed, GruntSpeed,
-               AirCapacity, UseRange,
+               AirCapacity, UseRange, ViewBob,
                
                // Inventory-specific properties
                Inventory, RestrictedTo, ForbiddenTo, Amount, Icon, 
InterHubAmount, MaxAmount, 
@@ -117,7 +118,7 @@
                // DECORATE expressions
                x, y, z, angle, momx, momy, momz, velx, vely, velz, pitch, tid, 
tidtohate, 
                ceilingz, floorz, scalex, scaley, score, special, waterlevel, 
var, int,
-               roll,
+               roll, visibleendangle, visibleendpitch, visiblestartangle, 
visiblestartpitch,
 
                // Anonymous functions
                bool, state, if, else, return, for, while, do, break, continue,
@@ -134,7 +135,7 @@
                TRUE, FALSE,
                
                // Flags
-               ACTIVATEIMPACT, ACTIVATEMCROSS, ACTIVATEPCROSS, ACTLIKEBRIDGE, 
ADDITIVEPOISONDAMAGE,
+               ABSMASKANGLE, ABSMASKPITCH, ACTIVATEIMPACT, ACTIVATEMCROSS, 
ACTIVATEPCROSS, ACTLIKEBRIDGE, ADDITIVEPOISONDAMAGE,
                ADDITIVEPOISONDURATION, AIMREFLECT, ALLOWBOUNCEONACTORS, 
ALLOWPAIN, ALLOWPARTICLES, ALLOWTHRUFLAGS, ALWAYSFAST,
                ALWAYSPUFF, ALWAYSRESPAWN, ALWAYSTELEFRAG, AMBUSH, AVOIDMELEE, 
BLASTED, BLOCKEDBYSOLIDACTORS,
                BLOODLESSIMPACT, BLOODSPLATTER, BOSS, BOSSDEATH, BOUNCEAUTOOFF, 
BOUNCEAUTOOFFFLOORONLY,
@@ -149,7 +150,7 @@
                FORCEYBILLBOARD, FRIENDLY, FRIGHTENED, FULLVOLACTIVE, 
FULLVOLDEATH, GETOWNER, GHOST, GRENADETRAIL, HARMFRIENDS,
                HERETICBOUNCE, HEXENBOUNCE, HITMASTER, HITTARGET, HITTRACER, 
ICECORPSE, ICEDAMAGE, ICESHATTER, INCOMBAT, INVISIBLE,
                INVULNERABLE, ISMONSTER, JUMPDOWN, JUSTATTACKED, JUSTHIT, 
LAXTELEFRAGDMG, LONGMELEERANGE, LOOKALLAROUND, LOWGRAVITY, 
-               MBFBOUNCER, MISSILE, MISSILEEVENMORE, MISSILEMORE, 
MIRRORREFLECT, MOVEWITHSECTOR, MTHRUSPECIES, NEVERFAST, 
+               MASKROTATION, MBFBOUNCER, MISSILE, MISSILEEVENMORE, 
MISSILEMORE, MIRRORREFLECT, MOVEWITHSECTOR, MTHRUSPECIES, NEVERFAST, 
                NEVERRESPAWN, NEVERTARGET, NOBLOCKMAP, NOBLOCKMONST, NOBLOOD, 
NOBLOODDECALS, NOBOSSRIP, NOBOUNCESOUND, 
                NOCLIP, NODAMAGE, NODAMAGETHRUST, NODECAL, NODROPOFF, 
NOEXPLODEFLOOR, NOEXTREMEDEATH, NOFEAR, NOFORWARDFALL, 
                NOGRAVITY, NOICEDEATH, NOINFIGHTING, NOINTERACTION, 
NOKILLSCRIPTS, NOLIFTDROP, NOMENU, NONSHOOTABLE, NOPAIN, 
@@ -319,7 +320,7 @@
                PROP_TOTALLYFROZEN, PROP_WEAPONLEVEL2, PTROP_NOSAFEGUARDS, 
PTROP_UNSAFEMASTER, PTROP_UNSAFETARGET,
 
                // psprite layers flags
-               PSPF_ADDWEAPON, PSPF_ADDBOB, PSPF_POWDOUBLE, PSPF_CVARFAST,
+               PSPF_ADDWEAPON, PSPF_ADDBOB, PSPF_POWDOUBLE, PSPF_CVARFAST, 
PSPF_FLIP,
 
                // Default psprite layers
                PSP_WEAPON, PSP_FLASH,
@@ -359,6 +360,11 @@
                // A_SpawnParticle flags
                SPF_FULLBRIGHT, SPF_RELACCEL, SPF_RELANG, SPF_RELATIVE, 
SPF_RELPOS, SPF_RELVEL, SPF_NOTIMEFREEZE,
 
+               // Render styles
+               STYLE_None, STYLE_Normal, STYLE_Fuzzy, STYLE_SoulTrans, 
STYLE_OptFuzzy, STYLE_Stencil, STYLE_Translucent,
+               STYLE_Add, STYLE_Shaded, STYLE_TranslucentStencil, 
STYLE_Shadow, STYLE_Subtract, STYLE_AddStencil,
+               STYLE_AddShaded,
+
                // A_SelectWeapon flags
                SWF_SELECTPRIORITY,
 
@@ -379,6 +385,11 @@
                THINGSPEC_TriggerTargets,
                TIF_NOTAKEINFINITE,
                VAF_DMGTYPEAPPLYTODIRECT,
+
+               // A_SetVisibleRotation flags
+               VRF_NOANGLE, VRF_NOANGLEEND, VRF_NOANGLESTART, VRF_NOPITCH, 
VRF_NOPITCHEND, VRF_NOPITCHSTART,
+
+               // A_WolfAttack flags
                WAF_NORANDOM, WAF_USEPUFF,
 
                // A_Warp flags
@@ -408,6 +419,11 @@
        }
 
        functions {
+               // Actor states
+               Light = "string lightname";
+               Offset = "int xpos, int ypos";
+
+               // Action functions
                A_AlertMonsters = "[float maxdist], [int flags]";
                A_Burst = "string classname";
                A_CentaurDefend;
@@ -487,7 +503,7 @@
                A_FreezeDeathChunks;
                A_IceGuyDie;
 
-               A_PlaySound = "[string soundname], [int slot], [float volume], 
[bool looping], [float attenuation]";
+               A_PlaySound = "[string soundname], [int slot], [float volume], 
[bool looping], [float attenuation], [bool local]";
                A_PlaySoundEx = "string soundname, string channel, [bool loop], 
[int attenuation]";
                A_PlayWeaponSound = "string soundname";
                A_ActiveSound;
@@ -530,7 +546,7 @@
                A_SpawnDebris = "string type, [bool translation], [float 
mult_h], [float mult_v]";
                A_SpawnItem = "[string type], [float distance], [float zpos], 
[bool useammo], [bool translation]";
                A_SpawnItemEx = "string type, [float xoffset], [float yoffset], 
[float zoffset], [float xvelocity], [float yvelocity], [float zvelocity], 
[float angle], [int flags], [int failchance], [int tid]";
-               A_SpawnParticle = "string color1 [, int flags [, int lifetime 
[, float size [, float angle [, float xoff [, float yoff [, float zoff [, float 
velx [, float vely [, float velz [, float accelx [, float accely [, float 
accelz [, float startalphaf [, float fadestepf [, float 
stepsize]]]]]]]]]]]]]]]]";
+               A_SpawnParticle = "string color1, [int flags], [int lifetime], 
[float size], [float angle], [float xoff], [float yoff], [float zoff], [float 
velx], [float vely], [float velz], [float accelx], [float accely], [float 
accelz], [float startalphaf], [float fadestepf], [float stepsize]";
 
                A_CheckCeiling = "string state", "int offset";
                A_CheckFloor =  "string state", "int offset";
@@ -589,6 +605,7 @@
                A_SetShadow;
                A_ClearShadow;
                A_SetTranslucent = "float alpha, [int mode]";
+               A_SetRenderStyle = "float alpha, int style";
                A_FadeIn = "[float increase_amount], [int flags]";
                A_FadeOut = "[float reduce_amount], [int flags]";
                A_FadeTo = "float target, [float amount], [int flags]";
@@ -624,6 +641,8 @@
                A_SetChaseThreshold = "int threshold, [bool def], [int ptr]";
                A_SetSpriteAngle = "[float angle], [int ptr]";
                A_SetSpriteRotation = "[float angle], [int ptr]";
+               A_SetVisibleRotation = "[float anglestart], [float angleend], 
[float pitchstart], [float pitchend], [int flags], [int ptr]";
+               A_SetTranslation = "string transname";
 
                A_SeekerMissile = "angle threshold, angle maxturnangle, [int 
flags], [int chance_to_reacquire], [int max_acquiring_distance]";
                A_Tracer;
@@ -646,6 +665,7 @@
                A_TakeFromSiblings = "string type, [int count]";
                A_TakeFromTarget = "string type, [int count], [int flags], 
[pointer forward]";
                A_DropInventory = "string type";
+               A_SetInventory = "string type, int amount, [int ptr], [bool 
beyondMax]";
                A_SelectWeapon = "string type, [int flags]";
                A_GiveQuestItem = "int itemno";
                A_DropItem = "class item, [int dropamount], [int chance]";
@@ -862,7 +882,7 @@
                A_ExtraLightOff; A_Explode512; A_LightGoesOut;
 
                // Special functions for DECORATE expressions
-               abs = "int value";
+               abs = "float value";
                cos = "angle degrees";
                sin = "angle degrees";
                tan = "angle degrees";
@@ -872,8 +892,8 @@
                cosh = "angle degrees";
                sinh = "angle degrees";
                tanh = "angle degrees";
-               atan2 = "int y, int x", "float y, float x";
-               VectorAngle = "int x, int y", "float x, float y";
+               atan2 = "float y, float x";
+               VectorAngle = "float x, float y";
                sqrt = "float value";
                random = "int min, int max";
                random2 = "int mask";
@@ -882,11 +902,11 @@
                frandompick = "float value1, float value2, float value3, ...";
                min = "int value1, int value2, int value3, ...", "float value1, 
float value2, float value3, ...";
                max = "int value1, int value2, int value3, ...", "float value1, 
float value2, float value3, ...";
-               exp = "int value", "float value";
-               log = "int value", "float value";
-               log10 = "int value", "float value";
-               ceil = "int value", "float value";
-               floor = "int value", "float value";
+               exp = "float value";
+               log = "float value";
+               log10 = "float value";
+               ceil = "float value";
+               floor = "float value";
                clamp = "int value, int min, int max", "float value, float min, 
float max";
                ACS_NamedExecute = "string script, [int mapnum], [int s_arg1], 
[int s_arg2], [int s_arg3]";
                ACS_NamedExecuteAlways = "string script, [int mapnum], [int 
arg1], [int arg2], [int arg3]";
@@ -910,6 +930,10 @@
                GetSpriteAngle = "[int ptr]";
                GetSpriteRotation = "[int ptr]";
                CountProximity = "string classname, float distance, [int 
flags], [int ptr]";
+               GetMissileDamage = "int mask, int add, [int ptr]";
+               OverlayID;
+               OverlayX = "[int layer]";
+               OverlayY = "[int layer]";
                
                // Internal use only, normally
                A_Turn = "[float angle]";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/dist/res/config/languages/usdf.txt 
new/SLADE-3.1.1.5/dist/res/config/languages/usdf.txt
--- old/SLADE-3.1.1.4/dist/res/config/languages/usdf.txt        2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/dist/res/config/languages/usdf.txt        2017-01-17 
15:25:52.000000000 +0100
@@ -26,6 +26,7 @@
                voice, dialog, drop, link, ifitem, item, page,
                actor, text, displaycost, yesmessage, nomessage,
                log, giveitem, nextpage, closedialog, special,
-               arg0, arg1, arg2, arg3, arg4, cost, amount, id
+               arg0, arg1, arg2, arg3, arg4, cost, amount, id,
+               goodbye, require, exclude
        }
 }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/dist/res/config/languages/zdoom.txt 
new/SLADE-3.1.1.5/dist/res/config/languages/zdoom.txt
--- old/SLADE-3.1.1.4/dist/res/config/languages/zdoom.txt       2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/dist/res/config/languages/zdoom.txt       2017-01-17 
15:25:52.000000000 +0100
@@ -364,7 +364,7 @@
                ammo2tag, weapontag, inventorytag, time, logtext, linebreaks, 
normal, pain, ouch, rampage, god, godanimated, grin, death,
                xdeath, custom, health2, healthspecial, directional, left, 
right, dontcap, itemflash, alticonfirst, alternateonfail,
                forcescale, skipalticon, skipicon, skipready, skipspawn, auto, 
cooperative, singleplayer, teamgame, deathmatch, weaponslot,
-               equal,
+               equal, intcvar,
 
                //Some default fonts
                BIGFONT, INDEXFONT, SMALLFONT, HUDFONT_DOOM, INDEXFONT_DOOM, 
HUDFONT_RAVEN, INDEXFONT_RAVEN,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/Application/MainApp.cpp 
new/SLADE-3.1.1.5/src/Application/MainApp.cpp
--- old/SLADE-3.1.1.4/src/Application/MainApp.cpp       2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Application/MainApp.cpp       2017-01-17 
15:25:52.000000000 +0100
@@ -87,8 +87,8 @@
        string error = "";
 
        int beta_num = 0;
-       int version_num = 3114;
-       string version = "3.1.1.4";
+       int version_num = 3115;
+       string version = "3.1.1.5";
 #ifdef GIT_DESCRIPTION
        string sc_rev = GIT_DESCRIPTION;
 #else
@@ -224,18 +224,26 @@
                hbox->Add(picture, 0, 
wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxTOP|wxBOTTOM, 10);
 
                // Add general crash message
+#ifndef NOCURL
                string message = "SLADE has crashed unexpectedly. To help fix 
the problem that caused this crash, "
                        "please (optionally) enter a short description of what 
you were doing at the time "
                        "of the crash, and click the 'Send Crash Report' 
button.";
+#else
+               string message = "SLADE has crashed unexpectedly. To help fix 
the problem that caused this crash, "
+                       "please email a copy of the stack trace below to 
[email protected], along with a "
+                       "description of what you were doing at the time of the 
crash.";
+#endif
                wxStaticText* label = new wxStaticText(this, -1, message);
                hbox->Add(label, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10);
                label->Wrap(480 - 20 - picture->GetSize().x);
 
+#ifndef NOCURL
                // Add description text area
                text_description = new wxTextCtrl(this, -1, wxEmptyString, 
wxDefaultPosition, wxSize(-1, 100), wxTE_MULTILINE);
                sizer->Add(new wxStaticText(this, -1, "Description:"), 0, 
wxLEFT|wxRIGHT, 10);
                sizer->AddSpacer(2);
                sizer->Add(text_description, 0, 
wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM, 10);
+#endif
 
                // SLADE info
                trace = S_FMT("Version: %s\n", Global::version);
@@ -278,12 +286,14 @@
                // Also dump stack trace to console
                std::cerr << trace;
 
+#ifndef NOCURL
                // Add small privacy disclaimer
                string privacy = "Sending a crash report will only send the 
information displayed above, "
                                                "along with a copy of the logs 
for this session.";
                label = new wxStaticText(this, -1, privacy);
                label->Wrap(480);
                sizer->Add(label, 0, 
wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM, 10);
+#endif
 
                // Add 'Copy Stack Trace' button
                hbox = new wxBoxSizer(wxHORIZONTAL);
@@ -298,10 +308,12 @@
                hbox->Add(btn_exit, 0, wxLEFT|wxRIGHT|wxBOTTOM, 4);
                btn_exit->Bind(wxEVT_COMMAND_BUTTON_CLICKED, 
&SLADECrashDialog::onBtnExit, this);
 
+#ifndef NOCURL
                // Add 'Send Crash Report' button
                btn_send = new wxButton(this, -1, "Send Crash Report");
                hbox->Add(btn_send, 0, wxLEFT|wxRIGHT|wxBOTTOM, 4);
                btn_send->Bind(wxEVT_COMMAND_BUTTON_CLICKED, 
&SLADECrashDialog::onBtnSend, this);
+#endif
 
                Bind(wxEVT_THREAD, &SLADECrashDialog::onThreadUpdate, this);
                Bind(wxEVT_CLOSE_WINDOW, &SLADECrashDialog::onClose, this);
@@ -1452,6 +1464,11 @@
        if (!handled)
                wxLogMessage("Warning: Action \"%s\" not handled", id);
 
+       // Log action (to log file only)
+       exiting = true;
+       wxLogMessage("**** Action \"%s\"", id);
+       exiting = false;
+
        // Return true if handled
        return handled;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/Dialogs/Preferences/ACSPrefsPanel.cpp 
new/SLADE-3.1.1.5/src/Dialogs/Preferences/ACSPrefsPanel.cpp
--- old/SLADE-3.1.1.4/src/Dialogs/Preferences/ACSPrefsPanel.cpp 2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Dialogs/Preferences/ACSPrefsPanel.cpp 2017-01-17 
15:25:52.000000000 +0100
@@ -31,6 +31,7 @@
 #include "ACSPrefsPanel.h"
 #include "Utility/SFileDialog.h"
 #include <wx/button.h>
+#include <wx/checkbox.h>
 #include <wx/dirdlg.h>
 #include <wx/filedlg.h>
 #include <wx/listbox.h>
@@ -45,6 +46,7 @@
  *******************************************************************/
 EXTERN_CVAR(String, path_acc)
 EXTERN_CVAR(String, path_acc_libs)
+EXTERN_CVAR(Bool, acc_always_show_output)
 
 
 /*******************************************************************
@@ -94,6 +96,10 @@
        // Populate include paths list
        list_inc_paths->Append(wxSplit(path_acc_libs, ';'));
 
+       // 'Always Show Output' checkbox
+       cb_always_show_output = new wxCheckBox(this, -1, "Always Show Compiler 
Output");
+       sizer->Add(cb_always_show_output, 0, wxEXPAND | wxALL, 4);
+
        // Bind events
        btn_browse_accpath->Bind(wxEVT_BUTTON, 
&ACSPrefsPanel::onBtnBrowseACCPath, this);
        btn_incpath_add->Bind(wxEVT_BUTTON, &ACSPrefsPanel::onBtnAddIncPath, 
this);
@@ -113,6 +119,7 @@
 void ACSPrefsPanel::init()
 {
        text_accpath->SetValue(wxString(path_acc));
+       cb_always_show_output->SetValue(acc_always_show_output);
 }
 
 /* ACSPrefsPanel::applyPreferences
@@ -131,6 +138,7 @@
                paths_string.RemoveLast(1);
 
        path_acc_libs = paths_string;
+       acc_always_show_output = cb_always_show_output->GetValue();
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/Dialogs/Preferences/ACSPrefsPanel.h 
new/SLADE-3.1.1.5/src/Dialogs/Preferences/ACSPrefsPanel.h
--- old/SLADE-3.1.1.4/src/Dialogs/Preferences/ACSPrefsPanel.h   2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Dialogs/Preferences/ACSPrefsPanel.h   2017-01-17 
15:25:52.000000000 +0100
@@ -13,6 +13,7 @@
        wxButton*       btn_incpath_add;
        wxButton*       btn_incpath_remove;
        wxListBox*      list_inc_paths;
+       wxCheckBox*     cb_always_show_output;
 
 public:
        ACSPrefsPanel(wxWindow* parent);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/Dialogs/Preferences/NodesPrefsPanel.cpp 
new/SLADE-3.1.1.5/src/Dialogs/Preferences/NodesPrefsPanel.cpp
--- old/SLADE-3.1.1.4/src/Dialogs/Preferences/NodesPrefsPanel.cpp       
2016-09-26 06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Dialogs/Preferences/NodesPrefsPanel.cpp       
2017-01-17 15:25:52.000000000 +0100
@@ -144,6 +144,7 @@
 {
        // Get current builder
        NodeBuilders::builder_t& builder = 
NodeBuilders::getBuilder(choice_nodebuilder->GetSelection());
+       btn_browse_path->Enable(builder.id != "none");
 
        // Set builder path
        text_path->SetValue(builder.path);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/External/email/wxMailer.cpp 
new/SLADE-3.1.1.5/src/External/email/wxMailer.cpp
--- old/SLADE-3.1.1.4/src/External/email/wxMailer.cpp   2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/External/email/wxMailer.cpp   2017-01-17 
15:25:52.000000000 +0100
@@ -2,7 +2,9 @@
 // wxEmail by Eran Ifrah (https://github.com/eranif/wxEmail)
 
 #include "wxMailer.h"
+#ifndef NOCURL
 #include <curl/curl.h>
+#endif
 #ifdef __WXMSW__
 #include "wx/msw/winundef.h"
 #endif
@@ -36,6 +38,7 @@
 
 bool wxMailer::Send(const wxEmailMessage& message)
 {
+#ifndef NOCURL
     CURL* curl;
     curl = curl_easy_init();
 
@@ -71,4 +74,7 @@
         curl_easy_cleanup(curl);
     }
     return true;
+#else
+    return false;
+#endif
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/Graphics/Palette/Palette.cpp 
new/SLADE-3.1.1.5/src/Graphics/Palette/Palette.cpp
--- old/SLADE-3.1.1.4/src/Graphics/Palette/Palette.cpp  2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Graphics/Palette/Palette.cpp  2017-01-17 
15:25:52.000000000 +0100
@@ -145,30 +145,31 @@
  *******************************************************************/
 bool Palette8bit::loadMem(MemChunk& mc, int format)
 {
-
        // Raw data
        if (format == FORMAT_RAW)
-       {
                return loadMem(mc);
-       }
 
        // Image
        else if (format == FORMAT_IMAGE)
        {
                SImage image;
                image.open(mc);
+
                // Verify validity and only accept square images
                if (!image.isValid())
                {
-                       wxLogMessage("Palette information cannot be loaded from 
an invalid image");
+                       Global::error = "Palette information cannot be loaded 
from an invalid image";
+                       LOG_MESSAGE(0, Global::error);
                        return false;
                }
                int side = image.getHeight();
                if (side != image.getWidth() || side%16)
                {
-                       wxLogMessage("Palette information cannot be loaded from 
a non-square image");
+                       Global::error = "Palette information cannot be loaded 
from a non-square image";
+                       LOG_MESSAGE(0, Global::error);
                        return false;
                }
+
                // Find color cell size
                int cell = side / 16;
 
@@ -178,23 +179,25 @@
                        // Find position in grid
                        int x = (a % 16) * cell;
                        int y = (a / 16) * cell;
+
                        // Ignore possible borders
                        if (cell > 3)
                                ++x, ++y;
+
                        // Get color from image
                        rgba_t col = image.getPixel(x, y);
+
                        // Validate color cell
                        for (int b = x; b < (x + (cell > 3 ? cell - 1 : cell)); 
++b)
                                for (int c = y; c < (y + (cell > 3 ? cell - 1 : 
cell)); ++c)
                                        if (!col.equals(image.getPixel(b, c)))
-                                       {
-                                               wxLogMessage("Image does not 
seem to be a valid palette, color discrepancy in cell %u at [%u, %u]", a, b, c);
-                                               return false;
-                                       }
+                                               LOG_MESSAGE(0, "Image does not 
seem to be a valid palette, color discrepancy in cell %u at [%u, %u]", a, b, c);
 
                        // Color is validated, so add it
+                       LOG_MESSAGE(3, "Colour index %d / at %d,%d / rgb 
%d,%d,%d", a, x, y, col.r, col.g, col.b);
                        setColour(a, col);
                }
+
                return true;
        }
 
@@ -214,13 +217,15 @@
                {
                        if (!tz.checkToken("JASC-PAL") || 
!tz.checkToken("0100"))
                        {
-                               wxLogMessage("Invalid JASC palette (unknown 
header)");
+                               Global::error = "Invalid JASC palette (unknown 
header)";
+                               LOG_MESSAGE(0, Global::error);
                                return false;
                        }
                        int count = tz.getInteger();
                        if (count > 256 || count < 0)
                        {
-                               wxLogMessage("Invalid JASC palette (wrong 
count)");
+                               Global::error = "Invalid JASC palette (wrong 
count)";
+                               LOG_MESSAGE(0, Global::error);
                                return false;
                        }
                }
@@ -228,7 +233,8 @@
                {
                        if (!tz.checkToken("GIMP") || !tz.checkToken("Palette"))
                        {
-                               wxLogMessage("Invalid GIMP palette (unknown 
header)");
+                               Global::error = "Invalid GIMP palette (unknown 
header)";
+                               LOG_MESSAGE(0, Global::error);
                                return false;
                        }
                }
@@ -263,7 +269,11 @@
 
        }
 
-       else wxLogMessage("Sorry, palette couldn't be imported, this format is 
not supported yet for import.");
+       else
+       {
+               Global::error = "Palette could not be imported, this format is 
not supported yet for import.";
+               LOG_MESSAGE(0, Global::error);
+       }
 
        return false;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/Graphics/SImage/Formats/SIFDoom.h 
new/SLADE-3.1.1.5/src/Graphics/SImage/Formats/SIFDoom.h
--- old/SLADE-3.1.1.4/src/Graphics/SImage/Formats/SIFDoom.h     2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Graphics/SImage/Formats/SIFDoom.h     2017-01-17 
15:25:52.000000000 +0100
@@ -109,11 +109,11 @@
                                        int pos = ((top + p)*width + c);
 
                                        // Stop if we're outside the image
-                                       if (pos > width*height)
+                                       if (pos >= width*height)
                                                break;
 
                                        // Stop if for some reason we're 
outside the gfx data
-                                       if (bits > gfx_data + data.getSize())
+                                       if (bits >= gfx_data + data.getSize())
                                                break;
 
                                        // Fail if bogus data gives a negative 
pos (this corrupts the heap!)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/Graphics/SImage/SIFormat.cpp 
new/SLADE-3.1.1.5/src/Graphics/SImage/SIFormat.cpp
--- old/SLADE-3.1.1.4/src/Graphics/SImage/SIFormat.cpp  2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Graphics/SImage/SIFormat.cpp  2017-01-17 
15:25:52.000000000 +0100
@@ -401,12 +401,19 @@
        int canWrite(SImage& image)
        {
                // If it's the correct size and colour format, it's writable
+               int width = image.getWidth();
+               int height = image.getHeight();
                if (image.getType() == PALMASK &&
                        validSize(image.getWidth(), image.getHeight()))
                        return WRITABLE;
 
-               // Otherwise, it can be converted via palettising and cropping
-               return CONVERTIBLE;
+               // Otherwise, check if it can be cropped to a valid size
+               for (unsigned a = 0; a < n_valid_flat_sizes; a++)
+                       if (width >= valid_flat_size[a][0] && height >= 
valid_flat_size[a][1] &&
+                               valid_flat_size[a][2] == 1 || gfx_extraconv)
+                                       return CONVERTIBLE;
+
+               return NOTWRITABLE;
        }
 
        bool convertWritable(SImage& image, convert_options_t opt)
@@ -432,28 +439,30 @@
 
                for (unsigned a = 1; a < n_valid_flat_sizes; a++)
                {
-                       // Ignore non-writable flat sizes
-                       if (valid_flat_size[a][2] == 0)
-                               continue;
+                       bool writable = (valid_flat_size[a][2] == 1 || 
gfx_extraconv);
 
                        // Check for exact match (no need to crop)
                        if (image.getWidth() == valid_flat_size[a][0] &&
-                               image.getHeight() == valid_flat_size[a][1])
+                           image.getHeight() == valid_flat_size[a][1] &&
+                               writable)
                                return true;
 
                        // If the flat will fit within this size, crop to the 
previous size
                        // (this works because flat sizes list is in size-order)
                        if (image.getWidth() <= (int)valid_flat_size[a][0] &&
-                               image.getHeight() <= (int)valid_flat_size[a][1] 
&&
-                               width > 0 && height > 0)
+                           image.getHeight() <= (int)valid_flat_size[a][1] &&
+                           width > 0 && height > 0)
                        {
                                image.crop(0, 0, width, height);
                                return true;
                        }
 
                        // Save 'previous' valid size
-                       width = valid_flat_size[a][0];
-                       height = valid_flat_size[a][1];
+                       if (writable)
+                       {
+                               width = valid_flat_size[a][0];
+                               height = valid_flat_size[a][1];
+                       }
                }
 
                return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/Graphics/SImage/SImage.cpp 
new/SLADE-3.1.1.5/src/Graphics/SImage/SImage.cpp
--- old/SLADE-3.1.1.4/src/Graphics/SImage/SImage.cpp    2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/Graphics/SImage/SImage.cpp    2017-01-17 
15:25:52.000000000 +0100
@@ -1577,31 +1577,32 @@
                d_colour = pal->colour(data[p]);
        else
                d_colour.set(data[p], data[p+1], data[p+2], data[p+3]);
+       float alpha = (float)colour.a / 255.0f;
 
        // Additive blending
        if (properties.blend == ADD)
        {
-               d_colour.set(   
MathStuff::clamp(d_colour.r+colour.r*properties.alpha, 0, 255),
-                               
MathStuff::clamp(d_colour.g+colour.g*properties.alpha, 0, 255),
-                               
MathStuff::clamp(d_colour.b+colour.b*properties.alpha, 0, 255),
+               d_colour.set(   MathStuff::clamp(d_colour.r+colour.r*alpha, 0, 
255),
+                               MathStuff::clamp(d_colour.g+colour.g*alpha, 0, 
255),
+                               MathStuff::clamp(d_colour.b+colour.b*alpha, 0, 
255),
                                MathStuff::clamp(d_colour.a + colour.a, 0, 
255));
        }
 
        // Subtractive blending
        else if (properties.blend == SUBTRACT)
        {
-               d_colour.set(   
MathStuff::clamp(d_colour.r-colour.r*properties.alpha, 0, 255),
-                               
MathStuff::clamp(d_colour.g-colour.g*properties.alpha, 0, 255),
-                               
MathStuff::clamp(d_colour.b-colour.b*properties.alpha, 0, 255),
+               d_colour.set(   MathStuff::clamp(d_colour.r-colour.r*alpha, 0, 
255),
+                               MathStuff::clamp(d_colour.g-colour.g*alpha, 0, 
255),
+                               MathStuff::clamp(d_colour.b-colour.b*alpha, 0, 
255),
                                MathStuff::clamp(d_colour.a + colour.a, 0, 
255));
        }
 
        // Reverse-Subtractive blending
        else if (properties.blend == REVERSE_SUBTRACT)
        {
-               d_colour.set(   
MathStuff::clamp((-d_colour.r)+colour.r*properties.alpha, 0, 255),
-                               
MathStuff::clamp((-d_colour.g)+colour.g*properties.alpha, 0, 255),
-                               
MathStuff::clamp((-d_colour.b)+colour.b*properties.alpha, 0, 255),
+               d_colour.set(   MathStuff::clamp((-d_colour.r)+colour.r*alpha, 
0, 255),
+                               MathStuff::clamp((-d_colour.g)+colour.g*alpha, 
0, 255),
+                               MathStuff::clamp((-d_colour.b)+colour.b*alpha, 
0, 255),
                                MathStuff::clamp(d_colour.a + colour.a, 0, 
255));
        }
 
@@ -1617,10 +1618,10 @@
        // Normal blending (or unknown blend type)
        else
        {
-               float inv_alpha = 1.0f - properties.alpha;
-               d_colour.set(   d_colour.r*inv_alpha + 
colour.r*properties.alpha,
-                               d_colour.g*inv_alpha + 
colour.g*properties.alpha,
-                               d_colour.b*inv_alpha + 
colour.b*properties.alpha,
+               float inv_alpha = 1.0f - alpha;
+               d_colour.set(   d_colour.r*inv_alpha + colour.r*alpha,
+                               d_colour.g*inv_alpha + colour.g*alpha,
+                               d_colour.b*inv_alpha + colour.b*alpha,
                                MathStuff::clamp(d_colour.a + colour.a, 0, 
255));
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/MainEditor/EntryOperations.cpp 
new/SLADE-3.1.1.5/src/MainEditor/EntryOperations.cpp
--- old/SLADE-3.1.1.4/src/MainEditor/EntryOperations.cpp        2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/EntryOperations.cpp        2017-01-17 
15:25:52.000000000 +0100
@@ -60,6 +60,7 @@
 CVAR(String, path_pngcrush, "", CVAR_SAVE);
 CVAR(String, path_deflopt, "", CVAR_SAVE);
 CVAR(String, path_db2, "", CVAR_SAVE)
+CVAR(Bool, acc_always_show_output, false, CVAR_SAVE);
 
 
 /*******************************************************************
@@ -1312,7 +1313,7 @@
                for (unsigned a = 0; a < errout.size(); a++)
                {
                        theConsole->logMessage(errout[a]);
-                       output_log += errout[a];
+                       output_log += errout[a] + "\n";
                }
        }
 
@@ -1324,7 +1325,8 @@
                wxRemoveFile(lib_paths[a]);
 
        // Check it compiled successfully
-       if (wxFileExists(ofile))
+       bool success = wxFileExists(ofile);
+       if (success)
        {
                // If no target entry was given, find one
                if (!target)
@@ -1371,7 +1373,8 @@
                // Delete compiled script file
                wxRemoveFile(ofile);
        }
-       else
+
+       if (!success || acc_always_show_output)
        {
                string errors;
                if (wxFileExists(appPath("acs.err", DIR_TEMP)))
@@ -1386,12 +1389,18 @@
                else
                        errors = output_log;
 
-               ExtMessageDialog dlg(NULL, "Error Compiling");
-               dlg.setMessage("The following errors were encountered while 
compiling, please fix them and recompile:");
-               dlg.setExt(errors);
-               dlg.ShowModal();
+               if (errors != "" || !success)
+               {
+                       ExtMessageDialog dlg(NULL, success ? "ACC Output" : 
"Error Compiling");
+                       dlg.setMessage(success ?
+                               "The following errors were encountered while 
compiling, please fix them and recompile:" :
+                               "Compiler output shown below: "
+                       );
+                       dlg.setExt(errors);
+                       dlg.ShowModal();
+               }
 
-               return false;
+               return success;
        }
 
        return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/MainEditor/UI/ArchivePanel.cpp 
new/SLADE-3.1.1.5/src/MainEditor/UI/ArchivePanel.cpp
--- old/SLADE-3.1.1.4/src/MainEditor/UI/ArchivePanel.cpp        2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/UI/ArchivePanel.cpp        2017-01-17 
15:25:52.000000000 +0100
@@ -377,13 +377,16 @@
                choice_category->Append(cats[a]);
        choice_category->SetSelection(0);
        gb_sizer->Add(new wxStaticText(this, -1, "Show:"), wxGBPosition(0, 0), 
wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
-       gb_sizer->Add(choice_category, wxGBPosition(0, 1), wxDefaultSpan, 
wxEXPAND);
+       gb_sizer->Add(choice_category, wxGBPosition(0, 1), wxGBSpan(1, 2), 
wxEXPAND);
        gb_sizer->AddGrowableCol(1, 1);
 
        // Create filter
        text_filter = new wxTextCtrl(this, -1);
        gb_sizer->Add(new wxStaticText(this, -1, "Filter:"), wxGBPosition(1, 
0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
        gb_sizer->Add(text_filter, wxGBPosition(1, 1), wxDefaultSpan, wxEXPAND);
+       btn_clear_filter = new wxBitmapButton(this, -1, 
Icons::getIcon(Icons::GENERAL, "close"));
+       btn_clear_filter->SetToolTip("Clear Filter");
+       gb_sizer->Add(btn_clear_filter, wxGBPosition(1, 2), wxDefaultSpan, 
wxEXPAND);
 
 
        // Add default entry panel
@@ -404,6 +407,7 @@
        choice_category->Bind(wxEVT_CHOICE, 
&ArchivePanel::onChoiceCategoryChanged, this);
        Bind(EVT_AEL_DIR_CHANGED, &ArchivePanel::onDirChanged, this);
        btn_updir->Bind(wxEVT_BUTTON, &ArchivePanel::onBtnUpDir, this);
+       btn_clear_filter->Bind(wxEVT_BUTTON, &ArchivePanel::onBtnClearFilter, 
this);
 
        // Do a quick check to see if we need the path display
        if (archive->getRoot()->nChildren() == 0)
@@ -3721,6 +3725,14 @@
        entry_list->goUpDir();
 }
 
+/* ArchivePanel::onBtnClearFilter
+ * Called when the 'Clear Filter' button is clicked
+ *******************************************************************/
+void ArchivePanel::onBtnClearFilter(wxCommandEvent& e)
+{
+       text_filter->SetValue("");
+}
+
 
 /*******************************************************************
  * ENTRYDATAUS CLASS FUNCTIONS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/MainEditor/UI/ArchivePanel.h 
new/SLADE-3.1.1.5/src/MainEditor/UI/ArchivePanel.h
--- old/SLADE-3.1.1.4/src/MainEditor/UI/ArchivePanel.h  2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/UI/ArchivePanel.h  2017-01-17 
15:25:52.000000000 +0100
@@ -27,6 +27,7 @@
        Archive*                        archive;
        ArchiveEntryList*       entry_list;
        wxTextCtrl*                     text_filter;
+       wxButton*                       btn_clear_filter;
        wxChoice*                       choice_category;
        wxStaticText*           label_path;
        wxBitmapButton*         btn_updir;
@@ -162,6 +163,7 @@
        void                    onChoiceCategoryChanged(wxCommandEvent& e);
        void                    onDirChanged(wxCommandEvent& e);
        void                    onBtnUpDir(wxCommandEvent& e);
+       void                    onBtnClearFilter(wxCommandEvent& e);
 };
 
 class EntryDataUS : public UndoStep
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/MainEditor/UI/EntryPanel/PaletteEntryPanel.cpp 
new/SLADE-3.1.1.5/src/MainEditor/UI/EntryPanel/PaletteEntryPanel.cpp
--- old/SLADE-3.1.1.4/src/MainEditor/UI/EntryPanel/PaletteEntryPanel.cpp        
2016-09-26 06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/UI/EntryPanel/PaletteEntryPanel.cpp        
2017-01-17 15:25:52.000000000 +0100
@@ -39,6 +39,7 @@
 #include <wx/clrpicker.h>
 #include <wx/colordlg.h>
 #include <wx/menu.h>
+#include <wx/msgdlg.h>
 #include <wx/radiobut.h>
 #include <wx/slider.h>
 #include <wx/stattext.h>
@@ -848,6 +849,8 @@
                        setModified();
                        showPalette(cur_palette);
                }
+               else
+                       wxMessageBox(Global::error, "Import Failed", 
wxICON_ERROR | wxOK);
        }
        return ret;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/MainEditor/UI/TextureXEditor/PatchTablePanel.cpp 
new/SLADE-3.1.1.5/src/MainEditor/UI/TextureXEditor/PatchTablePanel.cpp
--- old/SLADE-3.1.1.4/src/MainEditor/UI/TextureXEditor/PatchTablePanel.cpp      
2016-09-26 06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/UI/TextureXEditor/PatchTablePanel.cpp      
2017-01-17 15:25:52.000000000 +0100
@@ -390,7 +390,7 @@
 void PatchTablePanel::onBtnRemovePatch(wxCommandEvent& e)
 {
        // Check anything is selected
-       vector<long> selection = list_patches->getSelection();
+       vector<long> selection = list_patches->getSelection(true);
        if (selection.size() == 0)
                return;
 
@@ -435,7 +435,7 @@
 void PatchTablePanel::onBtnChangePatch(wxCommandEvent& e)
 {
        // Check anything is selected
-       vector<long> selection = list_patches->getSelection();
+       vector<long> selection = list_patches->getSelection(true);
        if (selection.size() == 0)
                return;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/SLADE-3.1.1.4/src/MainEditor/UI/TextureXEditor/TextureXPanel.cpp 
new/SLADE-3.1.1.5/src/MainEditor/UI/TextureXEditor/TextureXPanel.cpp
--- old/SLADE-3.1.1.4/src/MainEditor/UI/TextureXEditor/TextureXPanel.cpp        
2016-09-26 06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MainEditor/UI/TextureXEditor/TextureXPanel.cpp        
2017-01-17 15:25:52.000000000 +0100
@@ -614,7 +614,7 @@
                tex->setScale(0, 0);
 
        // Add it after the last selected item
-       int selected = list_textures->getLastSelected();
+       int selected = 
list_textures->getItemIndex(list_textures->getLastSelected());
        if (selected == -1) selected = texturex.nTextures() - 1; // Add to end 
of the list if nothing selected
        texturex.addTexture(tex, selected + 1);
 
@@ -663,7 +663,7 @@
                CTexture* tex = newTextureFromPatch(name, patch);
 
                // Add texture after the last selected item
-               int selected = list_textures->getLastSelected();
+               int selected = 
list_textures->getItemIndex(list_textures->getLastSelected());
                if (selected == -1) selected = texturex.nTextures() - 1; // Add 
to end of the list if nothing selected
                texturex.addTexture(tex, selected + 1);
 
@@ -757,7 +757,7 @@
                        CTexture* tex = newTextureFromPatch(name, name);
 
                        // Add texture after the last selected item
-                       int selected = list_textures->getLastSelected();
+                       int selected = 
list_textures->getItemIndex(list_textures->getLastSelected());
                        if (selected == -1) selected = texturex.nTextures() - 
1; // Add to end of the list if nothing selected
                        texturex.addTexture(tex, selected + 1);
 
@@ -786,7 +786,7 @@
 void TextureXPanel::removeTexture()
 {
        // Get selected textures
-       vector<long> selection = list_textures->getSelection();
+       vector<long> selection = list_textures->getSelection(true);
 
        // Begin recording undo level
        undo_manager->beginRecord("Remove Texture(s)");
@@ -824,7 +824,7 @@
 void TextureXPanel::moveUp()
 {
        // Get selected textures
-       vector<long> selection = list_textures->getSelection();
+       vector<long> selection = list_textures->getSelection(true);
 
        // Do nothing if the first selected item is at the top of the list
        if (selection.size() > 0 && selection[0] == 0)
@@ -864,7 +864,7 @@
 void TextureXPanel::moveDown()
 {
        // Get selected textures
-       vector<long> selection = list_textures->getSelection();
+       vector<long> selection = list_textures->getSelection(true);
 
        // Do nothing if the last selected item is at the end of the list
        if (selection.size() > 0 && selection.back() == 
list_textures->GetItemCount()-1)
@@ -904,7 +904,7 @@
 void TextureXPanel::sort()
 {
        // Get selected textures
-       vector<long> selection = list_textures->getSelection();
+       vector<long> selection = list_textures->getSelection(true);
        // Without selection of multiple texture, sort everything instead
        if (selection.size() < 2)
        {
@@ -972,7 +972,7 @@
 void TextureXPanel::copy()
 {
        // Get selected textures
-       vector<long> selection = list_textures->getSelection();
+       vector<long> selection = list_textures->getSelection(true);
 
        // Do nothing if nothing selected
        if (selection.size() == 0)
@@ -998,7 +998,7 @@
                return;
 
        // Get last selected index
-       int selected = list_textures->getLastSelected();
+       int selected = 
list_textures->getItemIndex(list_textures->getLastSelected());
        if (selected == -1) selected = texturex.nTextures() - 1; // Add to end 
of the list if nothing selected
 
        // Begin recording undo level
@@ -1073,7 +1073,7 @@
 void TextureXPanel::renameTexture(bool each)
 {
        // Get selected textures
-       vector<long> selec_num = list_textures->getSelection();
+       vector<long> selec_num = list_textures->getSelection(true);
        vector<CTexture*> selection;
 
        if (!tx_entry) return;
@@ -1142,7 +1142,7 @@
 void TextureXPanel::exportTexture()
 {
        // Get selected textures
-       vector<long> selec_num = list_textures->getSelection();
+       vector<long> selec_num = list_textures->getSelection(true);
        vector<CTexture*> selection;
 
        if (!tx_entry) return;
@@ -1237,7 +1237,7 @@
 void TextureXPanel::extractTexture()
 {
        // Get selected textures
-       vector<long> selec_num = list_textures->getSelection();
+       vector<long> selec_num = list_textures->getSelection(true);
        vector<CTexture*> selection;
 
        if (!tx_entry) return;
@@ -1326,7 +1326,7 @@
                return false;
 
        // Go through selection
-       vector<long> selec_num = list_textures->getSelection();
+       vector<long> selec_num = list_textures->getSelection(true);
        for (unsigned a = 0; a < selec_num.size(); ++a)
        {
                // Get texture
@@ -1467,7 +1467,7 @@
        theApp->getAction("txed_delete")->addToMenu(&context, true);
        context.AppendSeparator();
        theApp->getAction("txed_rename")->addToMenu(&context, true);
-       if (list_textures->getSelection().size() > 1)
+       if (list_textures->GetSelectedItemCount() > 1)
                theApp->getAction("txed_rename_each")->addToMenu(&context, 
true);
        if (texturex.getFormat() == TXF_TEXTURES)
                theApp->getAction("txed_offsets")->addToMenu(&context, true);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/MapEditor/MapEditorWindow.cpp 
new/SLADE-3.1.1.5/src/MapEditor/MapEditorWindow.cpp
--- old/SLADE-3.1.1.4/src/MapEditor/MapEditorWindow.cpp 2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MapEditor/MapEditorWindow.cpp 2017-01-17 
15:25:52.000000000 +0100
@@ -670,6 +670,10 @@
        command = builder.command;
        options = nodebuilder_options;
 
+       // Don't build if none selected
+       if (builder.id == "none")
+               return;
+
        // Switch to ZDBSP if UDMF
        if (mdesc_current.format == MAP_UDMF && nodebuilder_id != "zdbsp")
        {
@@ -709,7 +713,7 @@
                wxWindow* focus = wxWindow::FindFocus();
                wxExecute(S_FMT("\"%s\" %s", builder.path, command), out, 
wxEXEC_HIDE_CONSOLE);
                theApp->SetTopWindow(theMainWindow);
-               focus->SetFocusFromKbd();
+               if (focus) focus->SetFocusFromKbd();
                wxLogMessage("Nodebuilder output:");
                for (unsigned a = 0; a < out.size(); a++)
                        wxLogMessage(out[a]);
@@ -1094,7 +1098,7 @@
                                vector<Archive::mapdesc_t> maps = 
data->detectMaps();
                                if (!maps.empty())
                                {
-                                       editor.getMap().clearMap();
+                                       editor.clearMap();
                                        editor.openMap(maps[0]);
                                        loadMapScripts(maps[0]);
                                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/MapEditor/NodeBuilders.cpp 
new/SLADE-3.1.1.5/src/MapEditor/NodeBuilders.cpp
--- old/SLADE-3.1.1.4/src/MapEditor/NodeBuilders.cpp    2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/MapEditor/NodeBuilders.cpp    2017-01-17 
15:25:52.000000000 +0100
@@ -41,6 +41,7 @@
 {
        vector<builder_t>       builders;
        builder_t                       invalid;
+       builder_t                       none;
        string                          custom;
        vector<string>          builder_paths;
 }
@@ -55,8 +56,11 @@
  *******************************************************************/
 void NodeBuilders::init()
 {
-       // Init invalid builder
+       // Init default builders
        invalid.id = "invalid";
+       none.id = "none";
+       none.name = "Don't Build Nodes";
+       builders.push_back(none);
 
        // Get nodebuilders configuration from slade.pk3
        Archive* archive = theArchiveManager->programResourceArchive();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/UI/Lists/VirtualListView.cpp 
new/SLADE-3.1.1.5/src/UI/Lists/VirtualListView.cpp
--- old/SLADE-3.1.1.4/src/UI/Lists/VirtualListView.cpp  2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/UI/Lists/VirtualListView.cpp  2017-01-17 
15:25:52.000000000 +0100
@@ -204,9 +204,10 @@
 }
 
 /* VirtualListView::getSelection
- * Returns a list of all selected item indices
+ * Returns a list of all selected item indices. If [item_indices] is
+ * true, the returned indices will have sorting and filtering applied
  *******************************************************************/
-vector<long> VirtualListView::getSelection()
+vector<long> VirtualListView::getSelection(bool item_indices)
 {
        // Init return array
        vector<long> ret;
@@ -223,7 +224,7 @@
                        break;
 
                // Otherwise add the selected index to the vector
-               ret.push_back(item);
+               ret.push_back(item_indices ? getItemIndex(item) : item);
        }
 
        return ret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/src/UI/Lists/VirtualListView.h 
new/SLADE-3.1.1.5/src/UI/Lists/VirtualListView.h
--- old/SLADE-3.1.1.4/src/UI/Lists/VirtualListView.h    2016-09-26 
06:00:29.000000000 +0200
+++ new/SLADE-3.1.1.5/src/UI/Lists/VirtualListView.h    2017-01-17 
15:25:52.000000000 +0100
@@ -55,7 +55,7 @@
        void                    selectItems(long start, long end, bool select = 
true);
        void                    selectAll();
        void                    clearSelection();
-       vector<long>    getSelection();
+       vector<long>    getSelection(bool item_indices = false);
        long                    getFirstSelected();
        long                    getLastSelected();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/SLADE-3.1.1.4/win_installer/SLADE.iss 
new/SLADE-3.1.1.5/win_installer/SLADE.iss
--- old/SLADE-3.1.1.4/win_installer/SLADE.iss   2016-09-26 06:00:29.000000000 
+0200
+++ new/SLADE-3.1.1.5/win_installer/SLADE.iss   2017-01-17 15:25:52.000000000 
+0100
@@ -2,8 +2,8 @@
 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 
 #define MyAppName "SLADE"
-#define MyAppVersion "3.1.1.4"
-#define VersionNum "3114"
+#define MyAppVersion "3.1.1.5"
+#define VersionNum "3115"
 #define MyAppURL "http://slade.mancubus.net";
 #define MyAppExeName "SLADE.exe"
 
@@ -24,7 +24,7 @@
 DefaultDirName={pf}\{#MyAppName}
 DefaultGroupName={#MyAppName}
 AllowNoIcons=yes
-;InfoBeforeFile=..\dist\slade3.txt
+;InfoBeforeFile=..\dist\SLADE.html
 OutputBaseFilename=Setup_{#MyAppName}_{#VersionNum}
 SetupIconFile=..\build\msvc\slade.ico
 Compression=lzma
@@ -42,10 +42,8 @@
 Source: "..\dist\SLADE.exe"; DestDir: "{app}"; Flags: ignoreversion
 Source: "..\dist\FreeImage.dll"; DestDir: "{app}"; Flags: ignoreversion
 Source: "..\dist\libfluidsynth.dll"; DestDir: "{app}"; Flags: ignoreversion
-; Source: "..\dist\libsndfile-1.dll"; DestDir: "{app}"; Flags: ignoreversion
 Source: "..\dist\openal32.dll"; DestDir: "{app}"; Flags: ignoreversion
 Source: "..\dist\slade.pk3"; DestDir: "{app}"; Flags: ignoreversion
-; Source: "..\dist\slade3.txt"; DestDir: "{app}"; Flags: ignoreversion
 Source: "..\dist\SLADE.pdb"; DestDir: "{app}"; Flags: ignoreversion
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 

++++++ slade.appdata.xml ++++++
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
​  <id>slade.desktop</id>
​  <metadata_license>CC0</metadata_license>
​  <project_license>GPL-2.0+</project_license>
​  <name>SLADE 3</name>
​  <summary>An editor for games using the Doom engine</summary>
​
​  <description>
​    <p>
​      SLADE3 is a modern editor for Doom-engine based games and source
      ports. It has the ability to view, modify, and write many different
      game-specific formats, and even convert between some of them, or
      from/to other generic formats such as PNG.
    </p>
​  </description>
​
​  <screenshots>
​    <screenshot type="default">
​      <caption>Map Editor</caption>
​      <image>http://slade.mancubus.net/shots/map_t.png</image>
​    </screenshot>
​    <screenshot>
      <caption>3D Map Editor</caption>
​      <image>http://slade.mancubus.net/shots/map3d_t.png</image>
​    </screenshot>
    <screenshot>
      <caption>Basic Editor View</caption>
      <image>http://slade.mancubus.net/shots/gfx_t.png</image>
    </screenshot>
    <screenshot>
      <caption>Advanced Text Editor</caption>
      <image>http://slade.mancubus.net/shots/text.png</image>
    </screenshot>
      <caption>Texture Editor</caption>
      <image>http://slade.mancubus.net/shots/textures.png</image>
    </screenshot>
​  </screenshots>
​
​  <url type="homepage">http://slade.mancubus.net/</url>
​
​  <provides>
​    <binary>slade</binary>
​  </provides>
​
​</component>

Reply via email to