[deng] 01/03: import upstream 1.15.7

Michael Gilbert mgilbert at moszumanska.debian.org
Sun Jan 3 04:15:51 UTC 2016


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

mgilbert pushed a commit to branch master
in repository deng.

commit b6fef3a9dd034c6eec7246172e3ed010ce8b1304
Author: Michael Gilbert <mgilbert at debian.org>
Date:   Sun Jan 3 01:26:00 2016 +0000

    import upstream 1.15.7
---
 doomsday/api/dd_version.h                          |   4 +-
 doomsday/build/scripts/packres.py                  |   1 +
 doomsday/client/net.dengine.client.pack/Info.dei   |   2 +-
 .../net.dengine.client.pack/defaultstyle.pack/Info |   2 +-
 .../net.dengine.client.pack/renderer.pack/Info     |   2 +-
 .../renderer.pack/lensflares.pack/Info             |   2 +-
 doomsday/client/src/resource/resourcesystem.cpp    |   2 +-
 .../client/src/ui/dialogs/vrsettingsdialog.cpp     |   6 +-
 doomsday/doc/output/doomsday.6                     |   2 +-
 doomsday/doc/readme/readme.ame                     |   2 +-
 doomsday/doc/server/server.ame                     |   2 +-
 doomsday/doc/shell-text/shell-text.ame             |   2 +-
 doomsday/libappfw/appfw.doxy                       |   2 +-
 doomsday/libappfw/include/de/vr/oculusrift.h       |  12 +-
 doomsday/libappfw/src/vr/oculusrift.cpp            |  15 +-
 doomsday/libcore/include/de/data/reader.h          |   4 +-
 doomsday/libcore/include/de/libcore.h              |   2 +-
 doomsday/libcore/include/de/net/packet.h           |   6 +-
 doomsday/libcore/net.dengine.stdlib.pack/Info      |   2 +-
 doomsday/libcore/src/core/log.cpp                  |   2 +-
 doomsday/libcore/src/data/archive.cpp              |   8 +-
 doomsday/libcore/src/data/record.cpp               |   4 +-
 doomsday/libcore/src/data/value.cpp                |   2 +-
 doomsday/libcore/src/data/variable.cpp             |   2 +-
 doomsday/libcore/src/filesys/archivefeed.cpp       |   4 +-
 doomsday/libcore/src/filesys/directoryfeed.cpp     |   4 +-
 doomsday/libcore/src/filesys/filesystem.cpp        |   2 +-
 .../libcore/src/scriptsys/builtinexpression.cpp    |   4 +-
 .../libcore/src/scriptsys/dictionaryexpression.cpp |  16 +-
 doomsday/libcore/src/scriptsys/expression.cpp      |  18 +-
 .../libcore/src/scriptsys/functionstatement.cpp    |  10 +-
 doomsday/libcore/src/scriptsys/module.cpp          |   6 +-
 .../libcore/src/scriptsys/operatorexpression.cpp   |  26 +-
 doomsday/libcore/src/scriptsys/parser.cpp          | 173 +++++++-------
 doomsday/libcore/src/scriptsys/process.cpp         |   4 +-
 doomsday/libcore/src/scriptsys/scriptsystem.cpp    |   2 +-
 doomsday/libcore/src/scriptsys/statement.cpp       |  30 +--
 doomsday/libgui/gui.doxy                           |   2 +-
 doomsday/libgui/net.dengine.stdlib.gui.pack/Info   |   2 +-
 doomsday/libgui/src/graphics/atlas.cpp             |   2 +-
 doomsday/libshell/src/abstractlink.cpp             |   6 +-
 doomsday/net.dengine.base.pack/Info                |   2 +-
 doomsday/plugins/common/include/dmu_archiveindex.h |   4 +-
 doomsday/plugins/doom/data/doom2-freedm.mapinfo    | 262 +++++++++++++++++++++
 doomsday/plugins/doom/defs/doom2-freedm.ded        |  28 +++
 doomsday/plugins/doom/include/doomdef.h            |   6 +-
 doomsday/plugins/doom/src/d_api.c                  |  13 +
 doomsday/sdk-qch.doxy                              |   4 +-
 .../shell/shell-gui/src/localserverdialog.cpp      |  13 +-
 49 files changed, 533 insertions(+), 200 deletions(-)

diff --git a/doomsday/api/dd_version.h b/doomsday/api/dd_version.h
index cba9596..11bf2ee 100644
--- a/doomsday/api/dd_version.h
+++ b/doomsday/api/dd_version.h
@@ -51,8 +51,8 @@ extern "C" {
  * Revision number increases with each small (maintenance) release.
  */
 
-#define DOOMSDAY_VERSION_BASE   "1.15.5"
-#define DOOMSDAY_VERSION_NUMBER 1,15,5,0 // For WIN32 version info.
+#define DOOMSDAY_VERSION_BASE   "1.15.7"
+#define DOOMSDAY_VERSION_NUMBER 1,15,7,0 // For WIN32 version info.
 //#define DOOMSDAY_RELEASE_NAME   "Example"
 
 /**
diff --git a/doomsday/build/scripts/packres.py b/doomsday/build/scripts/packres.py
index 2181899..b8ae565 100755
--- a/doomsday/build/scripts/packres.py
+++ b/doomsday/build/scripts/packres.py
@@ -81,6 +81,7 @@ p.add_files(
       ('plugins/doom/data/doom1.mapinfo',          'data/jdoom/doom1.mapinfo'),
       ('plugins/doom/data/doom2-plut.mapinfo',     'data/jdoom/doom2-plut.mapinfo'),
       ('plugins/doom/data/doom2-tnt.mapinfo',      'data/jdoom/doom2-tnt.mapinfo'),
+      ('plugins/doom/data/doom2-freedm.mapinfo',   'data/jdoom/doom2-freedm.mapinfo'),
       ('plugins/doom/data/doom2.mapinfo',          'data/jdoom/doom2.mapinfo'),
       ('plugins/doom/data/hacx.mapinfo',           'data/jdoom/hacx.mapinfo'),
       ('plugins/doom/data/conhelp.txt', 'data/jdoom/conhelp.txt'),
diff --git a/doomsday/client/net.dengine.client.pack/Info.dei b/doomsday/client/net.dengine.client.pack/Info.dei
index a4efda1..823f334 100644
--- a/doomsday/client/net.dengine.client.pack/Info.dei
+++ b/doomsday/client/net.dengine.client.pack/Info.dei
@@ -1,7 +1,7 @@
 # Client's primary resources
 
 title: Doomsday Client
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core client
 
diff --git a/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info b/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info
index d80f38f..3df38f8 100644
--- a/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info
+++ b/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info
@@ -1,4 +1,4 @@
 title: Doomsday Default UI Style
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: ui style
diff --git a/doomsday/client/net.dengine.client.pack/renderer.pack/Info b/doomsday/client/net.dengine.client.pack/renderer.pack/Info
index 3500c7a..c450fe9 100644
--- a/doomsday/client/net.dengine.client.pack/renderer.pack/Info
+++ b/doomsday/client/net.dengine.client.pack/renderer.pack/Info
@@ -1,6 +1,6 @@
 # General resources for the renderer
 
 title: Doomsday Renderer
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core
diff --git a/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info b/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info
index 431f905..5030710 100644
--- a/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info
+++ b/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info
@@ -1,5 +1,5 @@
 title: Doomsday Default Lens Flares
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core fx
 
diff --git a/doomsday/client/src/resource/resourcesystem.cpp b/doomsday/client/src/resource/resourcesystem.cpp
index e999fa2..52142c2 100644
--- a/doomsday/client/src/resource/resourcesystem.cpp
+++ b/doomsday/client/src/resource/resourcesystem.cpp
@@ -1697,7 +1697,7 @@ DENG2_PIMPL(ResourceSystem)
 
         if(!numFoundSkins)
         {
-            LOG_RES_WARNING("Model \"%s\" will be rendered without a skin (none found)")
+            LOG_RES_MSG("No skins found for model \"%s\" (it may use a custom skin specified in a DED)")
                 << NativePath(modelFilePath).pretty();
         }
 
diff --git a/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp b/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp
index af3263c..37a7a56 100644
--- a/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp
+++ b/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp
@@ -63,9 +63,13 @@ DENG_GUI_PIMPL(VRSettingsDialog)
                 << new ChoiceItem(tr("Side-by-side"),             VRConfig::SideBySide)
                 << new ChoiceItem(tr("Parallel"),                 VRConfig::Parallel)
                 << new ChoiceItem(tr("Cross-eye"),                VRConfig::CrossEye)
-                << new ChoiceItem(tr("Oculus Rift"),              VRConfig::OculusRift)
                 << new ChoiceItem(tr("Hardware stereo"),          VRConfig::QuadBuffered);
 
+        if(vrCfg().oculusRift().isEnabled())
+        {
+            mode->items() << new ChoiceItem(tr("Oculus Rift"), VRConfig::OculusRift);
+        }
+
         area.add(swapEyes    = new CVarToggleWidget("rend-vr-swap-eyes", tr("Swap Eyes")));
         area.add(dominantEye = new CVarSliderWidget("rend-vr-dominant-eye"));
         area.add(humanHeight = new CVarSliderWidget("rend-vr-player-height"));
diff --git a/doomsday/doc/output/doomsday.6 b/doomsday/doc/output/doomsday.6
index e94a751..22b292e 100644
--- a/doomsday/doc/output/doomsday.6
+++ b/doomsday/doc/output/doomsday.6
@@ -1,5 +1,5 @@
 .\" manual page generated by Amethyst (mdoc+tbl) 
-.Dd November 1, 2015 
+.Dd January 1, 2016 
 .Os 
 .Dt "DOOMSDAY" 6 
 .Sh NAME 
diff --git a/doomsday/doc/readme/readme.ame b/doomsday/doc/readme/readme.ame
index aefeb6b..dfb96b3 100644
--- a/doomsday/doc/readme/readme.ame
+++ b/doomsday/doc/readme/readme.ame
@@ -5,7 +5,7 @@
     @macro{TITLE}{ doomsday }
 }
 @macro{ONELINER}{ Enhanced source port of Doom, Heretic and Hexen }
- at macro{VERSION}{ Version 1.15.5 }
+ at macro{VERSION}{ Version 1.15.7 }
 @macro{AUTHOR}{ Deng Team }
 @macro{LINK}{ http://dengine.net/ }
 @require{amestd}
diff --git a/doomsday/doc/server/server.ame b/doomsday/doc/server/server.ame
index fdc0a7a..8c8c422 100644
--- a/doomsday/doc/server/server.ame
+++ b/doomsday/doc/server/server.ame
@@ -1,7 +1,7 @@
 $ Man page for doomsday-server
 @macro{TITLE}{ doomsday-server }
 @macro{ONELINER}{ Doomsday Engine multiplayer daemon }
- at macro{VERSION}{ Version 1.15.5 }
+ at macro{VERSION}{ Version 1.15.7 }
 @macro{AUTHOR}{ Deng Team }
 @macro{LINK}{ http://dengine.net/ }
 @require{amestd}
diff --git a/doomsday/doc/shell-text/shell-text.ame b/doomsday/doc/shell-text/shell-text.ame
index d8a9460..a89f962 100644
--- a/doomsday/doc/shell-text/shell-text.ame
+++ b/doomsday/doc/shell-text/shell-text.ame
@@ -1,7 +1,7 @@
 $ Man page for doomsday-shell-text
 @macro{TITLE}{ doomsday-shell-text }
 @macro{ONELINER}{ Utility for controlling and monitoring Doomsday servers }
- at macro{VERSION}{ Version 1.15.5 }
+ at macro{VERSION}{ Version 1.15.7 }
 @macro{AUTHOR}{ Deng Team }
 @macro{LINK}{ http://dengine.net/ }
 @require{amestd}
diff --git a/doomsday/libappfw/appfw.doxy b/doomsday/libappfw/appfw.doxy
index 3b8bbba..762ff48 100644
--- a/doomsday/libappfw/appfw.doxy
+++ b/doomsday/libappfw/appfw.doxy
@@ -2,7 +2,7 @@
 @INCLUDE = ../doomsday.doxy
 
 PROJECT_NAME            = "libappfw"
-PROJECT_NUMBER          = 1.15.5
+PROJECT_NUMBER          = 1.15.7
 PROJECT_BRIEF           = "Application Framework"
 OUTPUT_DIRECTORY        = ../apidoc/appfw/
 
diff --git a/doomsday/libappfw/include/de/vr/oculusrift.h b/doomsday/libappfw/include/de/vr/oculusrift.h
index dcc3093..c62a23e 100644
--- a/doomsday/libappfw/include/de/vr/oculusrift.h
+++ b/doomsday/libappfw/include/de/vr/oculusrift.h
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #ifndef LIBAPPFW_OCULUSRIFT_H
@@ -28,6 +28,8 @@ namespace de {
 
 /**
  * Oculus Rift configuration and head tracking.
+ *
+ * @ingroup vr
  */
 class LIBAPPFW_PUBLIC OculusRift
 {
@@ -38,6 +40,12 @@ public:
 public:
     OculusRift();
 
+    /**
+     * Checks if the Oculus Rift functionality is available. This returns
+     * @c true if LibOVR is enabled in the build.
+     */
+    bool isEnabled() const;
+
     void glPreInit();
 
     /**
@@ -97,7 +105,7 @@ public:
      * yaw angles, in radians. If no head tracking is available, the returned values are
      * not valid.
      */
-    Vector3f headOrientation() const;      
+    Vector3f headOrientation() const;
 
     /**
      * Returns the current real-world head position.
diff --git a/doomsday/libappfw/src/vr/oculusrift.cpp b/doomsday/libappfw/src/vr/oculusrift.cpp
index 1af06ed..3ca99e7 100644
--- a/doomsday/libappfw/src/vr/oculusrift.cpp
+++ b/doomsday/libappfw/src/vr/oculusrift.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/OculusRift"
@@ -390,7 +390,7 @@ DENG2_PIMPL(OculusRift)
         if(screen == HMDScreen)
         {
             if(isWindowOnHMD()) return; // Nothing further to do.
-#ifdef WIN32            
+#ifdef WIN32
             oldGeometry = window->geometry();
             window->setGeometry(screenGeometry(HMDScreen));
             window->showFullScreen();
@@ -542,6 +542,15 @@ DENG2_PIMPL(OculusRift)
 OculusRift::OculusRift() : d(new Instance(this))
 {}
 
+bool OculusRift::isEnabled() const
+{
+#ifdef DENG_HAVE_OCULUS_API
+    return true;
+#else
+    return false;
+#endif
+}
+
 void OculusRift::glPreInit()
 {
 #ifdef DENG_HAVE_OCULUS_API
@@ -574,7 +583,7 @@ void OculusRift::deinit()
 
 void OculusRift::beginFrame()
 {
-#ifdef DENG_HAVE_OCULUS_API    
+#ifdef DENG_HAVE_OCULUS_API
     if(!isReady() || !d->inited || d->frameOngoing) return;
 
     // Begin the frame and acquire timing information.
diff --git a/doomsday/libcore/include/de/data/reader.h b/doomsday/libcore/include/de/data/reader.h
index a710d62..31d5b94 100644
--- a/doomsday/libcore/include/de/data/reader.h
+++ b/doomsday/libcore/include/de/data/reader.h
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #ifndef LIBDENG2_READER_HH
@@ -197,7 +197,7 @@ public:
         duint32 count;
         *this >> count;
         while(count-- > 0) {
-            std::auto_ptr<ObjectType> entry(new ObjectType);
+            std::unique_ptr<ObjectType> entry(new ObjectType);
             *this >> *entry.get();
             list.push_back(entry.release());
         }
diff --git a/doomsday/libcore/include/de/libcore.h b/doomsday/libcore/include/de/libcore.h
index b535edb..383a432 100644
--- a/doomsday/libcore/include/de/libcore.h
+++ b/doomsday/libcore/include/de/libcore.h
@@ -340,7 +340,7 @@ struct IPrivate {
 };
 
 /**
- * Pointer to the private implementation. Behaves like std::auto_ptr, but with
+ * Pointer to the private implementation. Behaves like std::unique_ptr, but with
  * the additional requirement that the pointed/owned instance must be derived
  * from de::IPrivate.
  */
diff --git a/doomsday/libcore/include/de/net/packet.h b/doomsday/libcore/include/de/net/packet.h
index 0faf1e9..cfd2754 100644
--- a/doomsday/libcore/include/de/net/packet.h
+++ b/doomsday/libcore/include/de/net/packet.h
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #ifndef LIBDENG2_PACKET_H
@@ -28,7 +28,7 @@
 namespace de {
 
 class String;
-    
+
 /**
  * Base class for all network packets in the libcore network communications
  * protocol. All packets are based on this class.
@@ -108,7 +108,7 @@ public:
         Reader from(block);
         if(checkType(from, packetTypeIdentifier))
         {
-            std::auto_ptr<PacketType> p(new PacketType);
+            std::unique_ptr<PacketType> p(new PacketType);
             from >> *static_cast<IReadable *>(p.get());
             return p.release();
         }
diff --git a/doomsday/libcore/net.dengine.stdlib.pack/Info b/doomsday/libcore/net.dengine.stdlib.pack/Info
index 3e32197..55a4ab2 100644
--- a/doomsday/libcore/net.dengine.stdlib.pack/Info
+++ b/doomsday/libcore/net.dengine.stdlib.pack/Info
@@ -1,5 +1,5 @@
 title: Doomsday Script Standard Library
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core script
 
diff --git a/doomsday/libcore/src/core/log.cpp b/doomsday/libcore/src/core/log.cpp
index 2b5acab..f1d8619 100644
--- a/doomsday/libcore/src/core/log.cpp
+++ b/doomsday/libcore/src/core/log.cpp
@@ -61,7 +61,7 @@ public:
 } // namespace internal
 
 /// The logs table contains the log of each thread that uses logging.
-static std::auto_ptr<internal::Logs> logsPtr;
+static std::unique_ptr<internal::Logs> logsPtr;
 
 /// Unused entry arguments are stored here in the pool.
 static FIFO<LogEntry::Arg> argPool;
diff --git a/doomsday/libcore/src/data/archive.cpp b/doomsday/libcore/src/data/archive.cpp
index bfc5a2d..edd3f45 100644
--- a/doomsday/libcore/src/data/archive.cpp
+++ b/doomsday/libcore/src/data/archive.cpp
@@ -13,7 +13,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/Archive"
@@ -168,7 +168,7 @@ Block const &Archive::entryBlock(Path const &path) const
             // Got it.
             return *entry.data;
         }
-        std::auto_ptr<Block> cached(new Block);
+        std::unique_ptr<Block> cached(new Block);
         d->readEntry(path, *cached.get());
         entry.data = cached.release();
         return *entry.data;
@@ -188,14 +188,14 @@ Block &Archive::entryBlock(Path const &path)
     }
 
     Block const &block = const_cast<Archive const *>(this)->entryBlock(path);
-    
+
     // Mark for recompression.
     Entry &entry = static_cast<Entry &>(d->index->find(path, PathTree::MatchFull | PathTree::NoBranch));
     entry.maybeChanged = true;
     entry.modifiedAt   = Time();
 
     d->modified = true;
-    
+
     return const_cast<Block &>(block);
 }
 
diff --git a/doomsday/libcore/src/data/record.cpp b/doomsday/libcore/src/data/record.cpp
index cef65da..2f602de 100644
--- a/doomsday/libcore/src/data/record.cpp
+++ b/doomsday/libcore/src/data/record.cpp
@@ -328,7 +328,7 @@ bool Record::hasSubrecord(String const &subrecordName) const
 
 Variable &Record::add(Variable *variable)
 {
-    std::auto_ptr<Variable> var(variable);
+    std::unique_ptr<Variable> var(variable);
     if(variable->name().empty())
     {
         /// @throw UnnamedError All variables in a record must have a name.
@@ -429,7 +429,7 @@ Variable &Record::addFunction(const String &name, Function *func)
     
 Record &Record::add(String const &name, Record *subrecord)
 {
-    std::auto_ptr<Record> sub(subrecord);
+    std::unique_ptr<Record> sub(subrecord);
     d->parentRecordByPath(name)
             .add(new Variable(Instance::memberNameFromPath(name),
                               new RecordValue(sub.release(), RecordValue::OwnsRecord)));
diff --git a/doomsday/libcore/src/data/value.cpp b/doomsday/libcore/src/data/value.cpp
index 8b25928..fd36562 100644
--- a/doomsday/libcore/src/data/value.cpp
+++ b/doomsday/libcore/src/data/value.cpp
@@ -187,7 +187,7 @@ Value *Value::constructFrom(Reader &reader)
     reader >> id;
     reader.rewind();
     
-    std::auto_ptr<Value> result;
+    std::unique_ptr<Value> result;
     switch(id)
     {
     case NONE:
diff --git a/doomsday/libcore/src/data/variable.cpp b/doomsday/libcore/src/data/variable.cpp
index a3941e9..eec1004 100644
--- a/doomsday/libcore/src/data/variable.cpp
+++ b/doomsday/libcore/src/data/variable.cpp
@@ -72,7 +72,7 @@ Variable::Variable(String const &name, Value *initial, Flags const &m)
     d->name = name;
     d->mode = m;
 
-    std::auto_ptr<Value> v(initial);
+    std::unique_ptr<Value> v(initial);
     if(!initial)
     {
         v.reset(new NoneValue);
diff --git a/doomsday/libcore/src/filesys/archivefeed.cpp b/doomsday/libcore/src/filesys/archivefeed.cpp
index f61ec49..5b992ca 100644
--- a/doomsday/libcore/src/filesys/archivefeed.cpp
+++ b/doomsday/libcore/src/filesys/archivefeed.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/ArchiveFeed"
@@ -168,7 +168,7 @@ DENG2_PIMPL(ArchiveFeed)
 
             String entry = basePath / *i;
 
-            std::auto_ptr<ArchiveEntryFile> archFile(new ArchiveEntryFile(*i, archive(), entry));
+            std::unique_ptr<ArchiveEntryFile> archFile(new ArchiveEntryFile(*i, archive(), entry));
 
             // Write access is inherited from the main source file.
             if(allowWrite) archFile->setMode(File::Write);
diff --git a/doomsday/libcore/src/filesys/directoryfeed.cpp b/doomsday/libcore/src/filesys/directoryfeed.cpp
index ebc17b3..1d726b2 100644
--- a/doomsday/libcore/src/filesys/directoryfeed.cpp
+++ b/doomsday/libcore/src/filesys/directoryfeed.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/DirectoryFeed"
@@ -110,7 +110,7 @@ void DirectoryFeed::populateFile(Folder &folder, String const &entryName)
     NativePath entryPath = _nativePath / entryName;
 
     // Open the native file.
-    std::auto_ptr<NativeFile> nativeFile(new NativeFile(entryName, entryPath));
+    std::unique_ptr<NativeFile> nativeFile(new NativeFile(entryName, entryPath));
     nativeFile->setStatus(fileStatus(entryPath));
     if(_mode & AllowWrite)
     {
diff --git a/doomsday/libcore/src/filesys/filesystem.cpp b/doomsday/libcore/src/filesys/filesystem.cpp
index 6287432..da25f99 100644
--- a/doomsday/libcore/src/filesys/filesystem.cpp
+++ b/doomsday/libcore/src/filesys/filesystem.cpp
@@ -154,7 +154,7 @@ File *FileSystem::interpret(File *sourceData)
             try
             {
                 // It is a ZIP archive: we will represent it as a folder.
-                std::auto_ptr<ArchiveFolder> package;
+                std::unique_ptr<ArchiveFolder> package;
 
                 if(sourceData->name().fileNameExtension() == ".save")
                 {
diff --git a/doomsday/libcore/src/scriptsys/builtinexpression.cpp b/doomsday/libcore/src/scriptsys/builtinexpression.cpp
index bb174b1..b5cfe4e 100644
--- a/doomsday/libcore/src/scriptsys/builtinexpression.cpp
+++ b/doomsday/libcore/src/scriptsys/builtinexpression.cpp
@@ -57,7 +57,7 @@ void BuiltInExpression::push(Evaluator &evaluator, Value *scope) const
 
 Value *BuiltInExpression::evaluate(Evaluator &evaluator) const
 {
-    std::auto_ptr<Value> value(evaluator.popResult());
+    std::unique_ptr<Value> value(evaluator.popResult());
     ArrayValue const &args = value.get()->as<ArrayValue>();
     
     switch(_type)
@@ -269,7 +269,7 @@ Value *BuiltInExpression::evaluate(Evaluator &evaluator) const
             throw WrongArgumentsError("BuiltInExpression::evaluate",
                 "Expected exactly one argument for SERIALIZE");
         }
-        std::auto_ptr<BlockValue> data(new BlockValue);
+        std::unique_ptr<BlockValue> data(new BlockValue);
         Writer(*data.get()) << args.at(1);
         return data.release();
     }
diff --git a/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp b/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp
index f0ca717..9a5e92e 100644
--- a/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp
+++ b/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/DictionaryExpression"
@@ -55,7 +55,7 @@ void DictionaryExpression::add(Expression *key, Expression *value)
 void DictionaryExpression::push(Evaluator &evaluator, Value *scope) const
 {
     Expression::push(evaluator, scope);
-    
+
     // The arguments in reverse order (so they are evaluated in
     // natural order, i.e., the same order they are in the source).
     for(Arguments::const_reverse_iterator i = _arguments.rbegin();
@@ -63,15 +63,15 @@ void DictionaryExpression::push(Evaluator &evaluator, Value *scope) const
     {
         i->second->push(evaluator);
         i->first->push(evaluator);
-    }    
+    }
 }
 
 Value *DictionaryExpression::evaluate(Evaluator &evaluator) const
 {
-    std::auto_ptr<DictionaryValue> dict(new DictionaryValue);
-    
+    std::unique_ptr<DictionaryValue> dict(new DictionaryValue);
+
     std::list<Value *> keys, values;
-    
+
     // Collect the right number of results into the array.
     for(Arguments::const_reverse_iterator i = _arguments.rbegin();
         i != _arguments.rend(); ++i)
@@ -88,7 +88,7 @@ Value *DictionaryExpression::evaluate(Evaluator &evaluator) const
     {
         dict->add(*key, *value);
     }
-    
+
     return dict.release();
 }
 
@@ -111,7 +111,7 @@ void DictionaryExpression::operator << (Reader &from)
     from >> id;
     if(id != DICTIONARY)
     {
-        /// @throw DeserializationError The identifier that species the type of the 
+        /// @throw DeserializationError The identifier that species the type of the
         /// serialized expression was invalid.
         throw DeserializationError("DictionaryExpression::operator <<", "Invalid ID");
     }
diff --git a/doomsday/libcore/src/scriptsys/expression.cpp b/doomsday/libcore/src/scriptsys/expression.cpp
index 2be7838..71e3165 100644
--- a/doomsday/libcore/src/scriptsys/expression.cpp
+++ b/doomsday/libcore/src/scriptsys/expression.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/Expression"
@@ -47,22 +47,22 @@ Expression *Expression::constructFrom(Reader &reader)
     reader.mark();
     reader >> id;
     reader.rewind();
-    
-    std::auto_ptr<Expression> result;
+
+    std::unique_ptr<Expression> result;
     switch(id)
     {
     case ARRAY:
         result.reset(new ArrayExpression());
         break;
-        
+
     case BUILT_IN:
         result.reset(new BuiltInExpression());
         break;
-        
+
     case CONSTANT:
         result.reset(new ConstantExpression());
         break;
-        
+
     case DICTIONARY:
         result.reset(new DictionaryExpression());
         break;
@@ -74,16 +74,16 @@ Expression *Expression::constructFrom(Reader &reader)
     case OPERATOR:
         result.reset(new OperatorExpression());
         break;
-                
+
     default:
-        /// @throw DeserializationError The identifier that species the type of the 
+        /// @throw DeserializationError The identifier that species the type of the
         /// serialized expression was invalid.
         throw DeserializationError("Expression::constructFrom", "Invalid expression identifier");
     }
 
     // Deserialize it.
     reader >> *result.get();
-    return result.release();    
+    return result.release();
 }
 
 Expression::Flags const &Expression::flags () const
diff --git a/doomsday/libcore/src/scriptsys/functionstatement.cpp b/doomsday/libcore/src/scriptsys/functionstatement.cpp
index e08355f..6adc8ed 100644
--- a/doomsday/libcore/src/scriptsys/functionstatement.cpp
+++ b/doomsday/libcore/src/scriptsys/functionstatement.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/FunctionStatement"
@@ -68,7 +68,7 @@ void FunctionStatement::execute(Context &context) const
 
     // Variable that will store the function.
     eval.evaluateTo<RefValue>(_identifier);
-    std::auto_ptr<RefValue> ref(eval.popResultAs<RefValue>());
+    std::unique_ptr<RefValue> ref(eval.popResultAs<RefValue>());
 
     // Evaluate the argument default values.
     DictionaryValue &dict = eval.evaluateTo<DictionaryValue>(&_defaults);
@@ -76,10 +76,10 @@ void FunctionStatement::execute(Context &context) const
     {
         _function->defaults()[i->first.value->asText()] = i->second->duplicate();
     }
-        
+
     // The value takes a reference to the function.
     ref->assign(new FunctionValue(_function));
-    
+
     context.proceed();
 }
 
@@ -94,7 +94,7 @@ void FunctionStatement::operator << (Reader &from)
     from >> id;
     if(id != FUNCTION)
     {
-        /// @throw DeserializationError The identifier that species the type of the 
+        /// @throw DeserializationError The identifier that species the type of the
         /// serialized statement was invalid.
         throw DeserializationError("FunctionStatement::operator <<", "Invalid ID");
     }
diff --git a/doomsday/libcore/src/scriptsys/module.cpp b/doomsday/libcore/src/scriptsys/module.cpp
index b5a9627..9d1834c 100644
--- a/doomsday/libcore/src/scriptsys/module.cpp
+++ b/doomsday/libcore/src/scriptsys/module.cpp
@@ -14,9 +14,9 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
- 
+
 #include "de/Module"
 #include "de/File"
 #include "de/Process"
@@ -40,7 +40,7 @@ Module::Module(File const &sourceFile) : _sourcePath(sourceFile.path()), _proces
 void Module::initialize(Script const &script)
 {
     // Execute the script.
-    std::auto_ptr<Process> proc(new Process(script));
+    std::unique_ptr<Process> proc(new Process(script));
     proc->execute();
     _process = proc.release();
 }
diff --git a/doomsday/libcore/src/scriptsys/operatorexpression.cpp b/doomsday/libcore/src/scriptsys/operatorexpression.cpp
index 3af323e..90d438c 100644
--- a/doomsday/libcore/src/scriptsys/operatorexpression.cpp
+++ b/doomsday/libcore/src/scriptsys/operatorexpression.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/OperatorExpression"
@@ -64,11 +64,11 @@ OperatorExpression::~OperatorExpression()
 void OperatorExpression::push(Evaluator &evaluator, Value *scope) const
 {
     Expression::push(evaluator);
-    
+
     if(_op == MEMBER)
     {
         // The MEMBER operator works a bit differently. Just push the left side
-        // now. We'll push the other side when we've found out what is the 
+        // now. We'll push the other side when we've found out what is the
         // scope defined by the result of the left side.
         _leftOperand->push(evaluator, scope);
     }
@@ -132,7 +132,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
         case PLUS_ASSIGN:
             verifyAssignable(leftValue);
             leftValue->sum(*rightValue);
-            break;    
+            break;
 
         case MINUS:
             if(leftValue)
@@ -149,7 +149,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
         case MINUS_ASSIGN:
             verifyAssignable(leftValue);
             leftValue->subtract(*rightValue);
-            break;    
+            break;
 
         case DIVIDE:
             leftValue->divide(*rightValue);
@@ -158,7 +158,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
         case DIVIDE_ASSIGN:
             verifyAssignable(leftValue);
             leftValue->divide(*rightValue);
-            break;    
+            break;
 
         case MULTIPLY:
             leftValue->multiply(*rightValue);
@@ -167,7 +167,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
         case MULTIPLY_ASSIGN:
             verifyAssignable(leftValue);
             leftValue->multiply(*rightValue);
-            break;    
+            break;
 
         case MODULO:
             leftValue->modulo(*rightValue);
@@ -246,11 +246,11 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
             break;
         }
 
-        case SLICE:            
+        case SLICE:
             result = performSlice(*leftValue, *rightValue);
             break;
 
-        case MEMBER: 
+        case MEMBER:
         {
             Record *scope = (leftValue? leftValue->memberScope() : 0);
             if(!scope)
@@ -288,7 +288,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const
     // Delete the unnecessary values.
     if(result != rightValue) delete rightValue;
     if(result != leftValue) delete leftValue;
-    
+
     return result;
 }
 
@@ -320,7 +320,7 @@ void OperatorExpression::operator << (Reader &from)
     from >> id;
     if(id != OPERATOR)
     {
-        /// @throw DeserializationError The identifier that species the type of the 
+        /// @throw DeserializationError The identifier that species the type of the
         /// serialized expression was invalid.
         throw DeserializationError("OperatorExpression::operator <<", "Invalid ID");
     }
@@ -335,7 +335,7 @@ void OperatorExpression::operator << (Reader &from)
     delete _rightOperand;
     _leftOperand = 0;
     _rightOperand = 0;
-    
+
     _rightOperand = Expression::constructFrom(from);
     if(header & HAS_LEFT_OPERAND)
     {
@@ -385,7 +385,7 @@ Value *OperatorExpression::performSlice(Value &leftValue, Value &rightValue) con
     DENG2_ASSERT(args != NULL); // Parser makes sure.
 
     // The resulting slice of leftValue's elements.
-    std::auto_ptr<SliceTarget> slice;
+    std::unique_ptr<SliceTarget> slice;
     if(dynamic_cast<TextValue *>(&leftValue))
     {
         slice.reset(new TextSliceTarget);
diff --git a/doomsday/libcore/src/scriptsys/parser.cpp b/doomsday/libcore/src/scriptsys/parser.cpp
index 26dc40b..549547d 100644
--- a/doomsday/libcore/src/scriptsys/parser.cpp
+++ b/doomsday/libcore/src/scriptsys/parser.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/Parser"
@@ -46,7 +46,6 @@
 
 #include <sstream>
 
-using std::auto_ptr;
 using namespace de;
 
 Parser::Parser()
@@ -59,7 +58,7 @@ void Parser::parse(String const &input, Script &output)
 {
     // Lexical analyzer for Haw scripts.
     _analyzer = ScriptLex(input);
-    
+
     // Get the tokens of the first statement.
     if(nextStatement() > 0)
     {
@@ -74,18 +73,18 @@ void Parser::parse(String const &input, Script &output)
 duint Parser::nextStatement()
 {
     duint result = _analyzer.getStatement(_tokens);
-    
+
     // Begin with the whole thing.
     _statementRange = TokenRange(_tokens);
 
     //std::cout << "Next statement: '" << _statementRange.asText() << "'\n";
-    
+
     return result;
 }
 
 void Parser::parseCompound(Compound &compound)
 {
-    while(_statementRange.size() > 0) 
+    while(_statementRange.size() > 0)
     {
         if(_statementRange.firstToken().equals(ScriptLex::ELSIF) ||
            _statementRange.firstToken().equals(ScriptLex::ELSE) ||
@@ -95,7 +94,7 @@ void Parser::parseCompound(Compound &compound)
             // End of compound.
             break;
         }
-        
+
         // We have a list of tokens, which form a statement.
         // Figure out what it is and generate the correct statement(s)
         // and expressions.
@@ -106,7 +105,7 @@ void Parser::parseCompound(Compound &compound)
 void Parser::parseStatement(Compound &compound)
 {
     DENG2_ASSERT(!_statementRange.empty());
-    
+
     Token const &firstToken = _statementRange.firstToken();
 
     // Statements with a compound: if, for, while, def.
@@ -135,7 +134,7 @@ void Parser::parseStatement(Compound &compound)
         parseTryCatchSequence(compound);
         return;
     }
-    
+
     // Statements without a compound (must advance to next statement manually).
     if(firstToken.equals(ScriptLex::IMPORT))
     {
@@ -197,7 +196,7 @@ void Parser::parseStatement(Compound &compound)
     {
         compound.add(parseExpressionStatement());
     }
-    
+
     // We've fully parsed the current set of tokens, get the next statement.
     nextStatement();
 }
@@ -206,29 +205,29 @@ IfStatement *Parser::parseIfStatement()
 {
     // The "end" keyword is necessary in the full form.
     bool expectEnd = !_statementRange.hasBracketless(Token::COLON);
-    
-    auto_ptr<IfStatement> statement(new IfStatement());
+
+    std::unique_ptr<IfStatement> statement(new IfStatement());
     statement->newBranch();
     statement->setBranchCondition(
-        parseConditionalCompound(statement->branchCompound(), 
+        parseConditionalCompound(statement->branchCompound(),
             HasCondition | StayAtClosingStatement));
-    
+
     while(_statementRange.beginsWith(ScriptLex::ELSIF))
     {
         expectEnd = !_statementRange.hasBracketless(Token::COLON);
         statement->newBranch();
         statement->setBranchCondition(
-            parseConditionalCompound(statement->branchCompound(), 
+            parseConditionalCompound(statement->branchCompound(),
                 HasCondition | StayAtClosingStatement));
     }
-    
+
     if(_statementRange.beginsWith(ScriptLex::ELSE))
     {
         expectEnd = !_statementRange.has(Token::COLON);
         parseConditionalCompound(statement->elseCompound(), StayAtClosingStatement);
     }
-    
-    if(expectEnd) 
+
+    if(expectEnd)
     {
         if(_statementRange.size() != 1 || !_statementRange.firstToken().equals(ScriptLex::END))
         {
@@ -238,15 +237,15 @@ IfStatement *Parser::parseIfStatement()
         nextStatement();
     }
 
-    return statement.release(); 
+    return statement.release();
 }
 
 WhileStatement *Parser::parseWhileStatement()
 {
     // "while" expr ":" statement
     // "while" expr "\n" compound
-    
-    auto_ptr<WhileStatement> statement(new WhileStatement());
+
+    std::unique_ptr<WhileStatement> statement(new WhileStatement());
     statement->setCondition(parseConditionalCompound(statement->compound(), HasCondition));
     return statement.release();
 }
@@ -255,7 +254,7 @@ ForStatement *Parser::parseForStatement()
 {
     // "for" by-ref-expr "in" expr ":" statement
     // "for" by-ref-expr "in" expr "\n" compound
-    
+
     dint colonPos = _statementRange.find(Token::COLON);
     dint inPos = _statementRange.find(ScriptLex::IN);
     if(inPos < 0 || (colonPos > 0 && inPos > colonPos))
@@ -263,23 +262,23 @@ ForStatement *Parser::parseForStatement()
         throw MissingTokenError("Parser::parseForStatement",
             "Expected 'in' to follow " + _statementRange.firstToken().asText());
     }
-    
-    auto_ptr<Expression> iter(parseExpression(_statementRange.between(1, inPos),
+
+    std::unique_ptr<Expression> iter(parseExpression(_statementRange.between(1, inPos),
         Expression::ByReference | Expression::NewVariable | Expression::LocalOnly));
     Expression *iterable = parseExpression(_statementRange.between(inPos + 1, colonPos));
-    
-    auto_ptr<ForStatement> statement(new ForStatement(iter.release(), iterable));
+
+    std::unique_ptr<ForStatement> statement(new ForStatement(iter.release(), iterable));
 
     // Parse the statements of the method.
     parseConditionalCompound(statement->compound(), IgnoreExtraBeforeColon);
-    
+
     return statement.release();
 }
 
 ExpressionStatement *Parser::parseImportStatement()
 {
     // "import" ["record"] name-expr ["," name-expr]*
- 
+
     if(_statementRange.size() < 2)
     {
         throw MissingTokenError("Parser::parseImportStatement",
@@ -322,7 +321,7 @@ Statement *Parser::parseDeclarationStatement()
     {
         throw MissingTokenError("Parser::parseDeclarationStatement",
             "Expected identifier to follow " + _statementRange.firstToken().asText());
-    }    
+    }
 
     // Is this a class record declaration?
     dint pos = _statementRange.find(Token::PARENTHESIS_OPEN);
@@ -348,12 +347,12 @@ Statement *Parser::parseDeclarationStatement()
 DeleteStatement *Parser::parseDeleteStatement()
 {
     // "del" name-expr ["," name-expr]*
-    
+
     if(_statementRange.size() < 2)
     {
         throw MissingTokenError("Parser::parseDeleteStatement",
             "Expected identifier to follow " + _statementRange.firstToken().asText());
-    }    
+    }
     return new DeleteStatement(parseList(_statementRange.startingFrom(1), Token::COMMA,
                                          Expression::LocalOnly | Expression::ByReference));
 }
@@ -370,8 +369,8 @@ FunctionStatement *Parser::parseFunctionStatement()
     }
 
     // The function must have a name that is not already in use in the scope.
-    auto_ptr<FunctionStatement> statement(new FunctionStatement(
-        parseExpression(_statementRange.between(1, pos), 
+    std::unique_ptr<FunctionStatement> statement(new FunctionStatement(
+        parseExpression(_statementRange.between(1, pos),
                         Expression::LocalOnly   | Expression::ByReference |
                         Expression::NewVariable | Expression::NotInScope)));
 
@@ -388,7 +387,7 @@ FunctionStatement *Parser::parseFunctionStatement()
                 // Just the name of the argument.
                 statement->addArgument(delim.firstToken().str());
             }
-            else if(delim.size() >= 3 && 
+            else if(delim.size() >= 3 &&
                 delim.token(0).type() == Token::IDENTIFIER &&
                 delim.token(1).equals(ScriptLex::ASSIGN))
             {
@@ -407,7 +406,7 @@ FunctionStatement *Parser::parseFunctionStatement()
 
     // Parse the statements of the function.
     parseConditionalCompound(statement->compound(), IgnoreExtraBeforeColon);
-    
+
     return statement.release();
 }
 
@@ -415,8 +414,8 @@ void Parser::parseTryCatchSequence(Compound &compound)
 {
     // "try" cond-compound catch-compound [catch-compound]*
     // catch-compound: "catch" name-expr ["," ref-name-expr] cond-compound
-    
-    auto_ptr<TryStatement> tryStat(new TryStatement);
+
+    std::unique_ptr<TryStatement> tryStat(new TryStatement);
     parseConditionalCompound(tryStat->compound(), StayAtClosingStatement);
     compound.add(tryStat.release());
 
@@ -434,7 +433,7 @@ void Parser::parseTryCatchSequence(Compound &compound)
         expectEnd = (colon < 0);
 
         // Parse the arguments.
-        auto_ptr<ArrayExpression> args;
+        std::unique_ptr<ArrayExpression> args;
         if(_statementRange.size() > 1)
         {
             TokenRange argRange;
@@ -450,7 +449,7 @@ void Parser::parseTryCatchSequence(Compound &compound)
                 Expression::ByReference | Expression::LocalOnly | Expression::NewVariable));
         }
 
-        auto_ptr<CatchStatement> catchStat(new CatchStatement(args.release()));
+        std::unique_ptr<CatchStatement> catchStat(new CatchStatement(args.release()));
         parseConditionalCompound(catchStat->compound(),
             StayAtClosingStatement | IgnoreExtraBeforeColon);
 
@@ -459,7 +458,7 @@ void Parser::parseTryCatchSequence(Compound &compound)
 
         // Add it to the compound.
         compound.add(catchStat.release());
-    }    
+    }
     finalCatch->flags |= CatchStatement::FinalCompound;
     if(expectEnd)
     {
@@ -473,7 +472,7 @@ void Parser::parseTryCatchSequence(Compound &compound)
 }
 
 PrintStatement *Parser::parsePrintStatement()
-{    
+{
     ArrayExpression *args = 0;
     if(_statementRange.size() == 1) // Just the keyword.
     {
@@ -484,13 +483,13 @@ PrintStatement *Parser::parsePrintStatement()
         // Parse the arguments of the print statement.
         args = parseList(_statementRange.startingFrom(1));
     }
-    return new PrintStatement(args);    
+    return new PrintStatement(args);
 }
 
 AssignStatement *Parser::parseAssignStatement()
 {
     Expression::Flags flags = Expression::NewVariable | Expression::ByReference | Expression::LocalOnly;
-    
+
     /// "export" will export the newly assigned variable.
     if(_statementRange.firstToken().equals(ScriptLex::EXPORT))
     {
@@ -504,7 +503,7 @@ AssignStatement *Parser::parseAssignStatement()
         flags |= Expression::ReadOnly;
         _statementRange = _statementRange.startingFrom(1);
     }
-    
+
     dint pos = _statementRange.find(ScriptLex::ASSIGN);
     if(pos < 0)
     {
@@ -517,7 +516,7 @@ AssignStatement *Parser::parseAssignStatement()
             flags |= Expression::ThrowawayIfInScope;
         }
     }
-    
+
     // Has indices been specified?
     AssignStatement::Indices indices;
     dint nameEndPos = pos;
@@ -533,7 +532,7 @@ AssignStatement *Parser::parseAssignStatement()
             indices.push_back(indexExpr);
             bracketPos = nameEndPos - 1;
         }
-        
+
         if(indices.size() > 0 && (flags & Expression::ThrowawayIfInScope))
         {
             throw SyntaxError("Parser::parseAssignStatement",
@@ -547,7 +546,7 @@ AssignStatement *Parser::parseAssignStatement()
 
         lValue.take();
         rValue.take();
-        
+
         return st;
     }
     catch(Error const &)
@@ -570,12 +569,12 @@ Expression *Parser::parseConditionalCompound(Compound &compound, CompoundFlags c
 {
     // keyword [expr] ":" statement
     // keyword [expr] "\n" compound
-    
+
     TokenRange range = _statementRange;
-    
+
     // See if there is a colon on this line.
     dint colon = range.findBracketless(Token::COLON);
-    
+
     QScopedPointer<Expression> condition;
     if(flags.testFlag(HasCondition))
     {
@@ -595,7 +594,7 @@ Expression *Parser::parseConditionalCompound(Compound &compound, CompoundFlags c
         throw UnexpectedTokenError("Parser::parseConditionalCompound",
             range.token(1).asText() + " was unexpected");
     }
-    
+
     if(colon > 0)
     {
         if(colon == dint(range.size()) - 1)
@@ -643,13 +642,13 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla
 
     LOG_AS("parseExpression");
     LOGDEV_SCR_XVERBOSE_DEBUGONLY("%s (flags:%x)", range.asText() << flags);
-    
+
     if(!range.size())
     {
         // Empty expression yields a None value.
         return ConstantExpression::None();
     }
-    
+
     // We can ignore extra parenthesis around the range.
     while(range.firstToken().equals(Token::PARENTHESIS_OPEN) && range.closingBracket(0) == range.size() - 1)
     {
@@ -673,10 +672,10 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla
 
     TokenRange leftSide = range.between(0, 0);
     TokenRange rightSide = leftSide;
-    
+
     // Locate the lowest-ranking operator.
     Operator op = findLowestOperator(range, leftSide, rightSide);
-    
+
     if(op == NONE)
     {
         // This is a constant or a variable reference.
@@ -695,7 +694,7 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla
         return parseCallExpression(leftSide, rightSide);
     }
     else
-    {       
+    {
         // Left side is empty with unary operators.
         // The right side inherits the flags of the expression (e.g., name-by-reference).
         return parseOperatorExpression(op, leftSide, rightSide, flags);
@@ -708,9 +707,9 @@ ArrayExpression *Parser::parseArrayExpression(TokenRange const &range)
         range.closingBracket(0) != range.size() - 1)
     {
         throw MissingTokenError("Parser::parseArrayExpression",
-            "Expected brackets for the array expression beginning at " + 
+            "Expected brackets for the array expression beginning at " +
             range.firstToken().asText());
-    }    
+    }
     return parseList(range.shrink(1));
 }
 
@@ -720,12 +719,12 @@ DictionaryExpression *Parser::parseDictionaryExpression(TokenRange const &range)
         range.closingBracket(0) != range.size() - 1)
     {
         throw MissingTokenError("Parser::parseDictionaryExpression",
-            "Expected brackets for the dictionary expression beginning at " + 
+            "Expected brackets for the dictionary expression beginning at " +
             range.firstToken().asText());
     }
     TokenRange shrunk = range.shrink(1);
-    
-    auto_ptr<DictionaryExpression> exp(new DictionaryExpression);
+
+    std::unique_ptr<DictionaryExpression> exp(new DictionaryExpression);
     if(shrunk.size() > 0)
     {
         // The arguments are comma-separated.
@@ -739,7 +738,7 @@ DictionaryExpression *Parser::parseDictionaryExpression(TokenRange const &range)
                     "Colon is missing from '" + delim.asText() + "' at " +
                     delim.firstToken().asText());
             }
-            
+
             QScopedPointer<Expression> key(parseExpression(delim.endingTo(colonPos)));
             Expression *value = parseExpression(delim.startingFrom(colonPos + 1));
             exp->add(key.take(), value);
@@ -752,22 +751,22 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange
 {
     //std::cerr << "call name: " << nameRange.asText() << "\n";
     //std::cerr << "call args: " << argumentRange.asText() << "\n";
-    
+
     if(!argumentRange.firstToken().equals(Token::PARENTHESIS_OPEN) ||
          argumentRange.closingBracket(0) < argumentRange.size() - 1)
     {
         throw SyntaxError("Parser::parseCallExpression",
-            "Call arguments must be enclosed in parenthesis for " + 
+            "Call arguments must be enclosed in parenthesis for " +
             argumentRange.firstToken().asText());
     }
-    
+
     // Parse the arguments, with possible labels included.
     // The named arguments are evaluated by a dictionary which is always
     // included as the first expression in the array.
     QScopedPointer<ArrayExpression> args(new ArrayExpression);
     DictionaryExpression *namedArgs = new DictionaryExpression;
     args->add(namedArgs);
-    
+
     TokenRange argsRange = argumentRange.shrink(1);
     if(!argsRange.empty())
     {
@@ -778,7 +777,7 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange
             if(delim.has(ScriptLex::ASSIGN))
             {
                 // A label is included.
-                if(delim.size() < 3 || 
+                if(delim.size() < 3 ||
                     delim.firstToken().type() != Token::IDENTIFIER ||
                     !delim.token(1).equals(ScriptLex::ASSIGN))
                 {
@@ -796,7 +795,7 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange
             }
         }
     }
-    
+
     // Check for some built-in methods, which are usable everywhere.
     if(nameRange.size() == 1)
     {
@@ -810,11 +809,11 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange
     return new OperatorExpression(CALL, identifier.take(), args.take());
 }
 
-OperatorExpression *Parser::parseOperatorExpression(Operator op, TokenRange const &leftSide, 
+OperatorExpression *Parser::parseOperatorExpression(Operator op, TokenRange const &leftSide,
     TokenRange const &rightSide, Expression::Flags const &rightFlags)
 {
     //std::cerr << "left: " << leftSide.asText() << ", right: " << rightSide.asText() << "\n";
-    
+
     if(leftSide.empty())
     {
         // Must be unary.
@@ -909,7 +908,7 @@ Expression *Parser::parseTokenExpression(TokenRange const &range, Expression::Fl
         }
         else
         {
-            throw UnexpectedTokenError("Parser::parseTokenExpression", 
+            throw UnexpectedTokenError("Parser::parseTokenExpression",
                 "Unexpected token " + range.token(1).asText());
         }
 
@@ -922,7 +921,7 @@ Expression *Parser::parseTokenExpression(TokenRange const &range, Expression::Fl
     case Token::LITERAL_NUMBER:
         return new ConstantExpression(
             new NumberValue(ScriptLex::tokenToNumber(token)));
-        
+
     default:
         throw UnexpectedTokenError("Parser::parseTokenExpression",
             "Unexpected " + token.asText() + " which was identified as " +
@@ -955,20 +954,20 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
     for(duint i = 0, continueFrom = 0; i < range.size(); i = continueFrom)
     {
         continueFrom = i + 1;
-        
+
         int rank = MAX_RANK;
         Operator op = NONE;
         Direction direction = LEFT_TO_RIGHT;
-        
+
         Token const &token = range.token(i);
-        
+
         if(token.equals(Token::PARENTHESIS_OPEN))
         {
             continueFrom = range.closingBracket(i) + 1;
             if((previousOp == NONE || previousOp == INDEX || previousOp == SLICE ||
                 previousOp == PARENTHESIS || previousOp == CALL) && i > 0)
             {
-                // The previous token was not an operator, but there 
+                // The previous token was not an operator, but there
                 // was something before this one. It must be a function
                 // call.
                 op = CALL;
@@ -1040,8 +1039,8 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
                 { "%",      MODULO,             10,         LEFT_TO_RIGHT },
                 { ".",      DOT,                RANK_DOT,   LEFT_TO_RIGHT },
                 { 0,        NONE,               MAX_RANK,   LEFT_TO_RIGHT }
-            };            
-            
+            };
+
             // Operator precedence:
             // .
             // function call
@@ -1052,13 +1051,13 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
             // + -
             // & | ^
             // << >>
-            // < > <= >= 
+            // < > <= >=
             // == !=
             // in
             // not
             // and
             // or
-         
+
             // Check the rankings table.
             for(int k = 0; rankings[k].token; ++k)
             {
@@ -1067,7 +1066,7 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
                     op = rankings[k].op;
                     rank = rankings[k].rank;
                     direction = rankings[k].direction;
-                    
+
                     if(op == DOT) // && previousOp == NONE)
                     {
                         op = MEMBER;
@@ -1090,8 +1089,8 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
                 }
             }
         }
-        
-        if(op != NONE && 
+
+        if(op != NONE &&
             ((direction == LEFT_TO_RIGHT && rank <= lowestRank) ||
              (direction == RIGHT_TO_LEFT && rank < lowestRank)))
         {
@@ -1104,13 +1103,13 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid
             }
             else
             {
-                rightSide = range.startingFrom(op == CALL || op == ARRAY || 
+                rightSide = range.startingFrom(op == CALL || op == ARRAY ||
                     op == DICTIONARY? i : i + 1);
             }
         }
-        
-        previousOp = op;       
+
+        previousOp = op;
     }
-    
+
     return lowestOp;
 }
diff --git a/doomsday/libcore/src/scriptsys/process.cpp b/doomsday/libcore/src/scriptsys/process.cpp
index 45ad671..4baa8a8 100644
--- a/doomsday/libcore/src/scriptsys/process.cpp
+++ b/doomsday/libcore/src/scriptsys/process.cpp
@@ -28,8 +28,6 @@
 
 #include <sstream>
 
-using std::auto_ptr;
-
 namespace de {
 
 DENG2_PIMPL(Process)
@@ -327,7 +325,7 @@ void Process::finish(Value *returnValue)
     if(depth() > 1)
     {
         // Finish the topmost context.
-        std::auto_ptr<Context> topmost(popContext());
+        std::unique_ptr<Context> topmost(popContext());
         if(topmost->type() == Context::FunctionCall)
         {
             // Return value to the new topmost level.
diff --git a/doomsday/libcore/src/scriptsys/scriptsystem.cpp b/doomsday/libcore/src/scriptsys/scriptsystem.cpp
index 5238104..c850ded 100644
--- a/doomsday/libcore/src/scriptsys/scriptsystem.cpp
+++ b/doomsday/libcore/src/scriptsys/scriptsystem.cpp
@@ -292,7 +292,7 @@ namespace internal {
 File const *ScriptSystem::tryFindModuleSource(String const &name, String const &localPath)
 {
     // Fall back on the default if the config hasn't been imported yet.
-    std::auto_ptr<ArrayValue> defaultImportPath(new ArrayValue);
+    std::unique_ptr<ArrayValue> defaultImportPath(new ArrayValue);
     defaultImportPath->add("");
     defaultImportPath->add("*"); // Newest module with a matching name.
     ArrayValue const *importPath = defaultImportPath.get();
diff --git a/doomsday/libcore/src/scriptsys/statement.cpp b/doomsday/libcore/src/scriptsys/statement.cpp
index 4a24407..49c7449 100644
--- a/doomsday/libcore/src/scriptsys/statement.cpp
+++ b/doomsday/libcore/src/scriptsys/statement.cpp
@@ -14,7 +14,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/Statement"
@@ -46,14 +46,14 @@ Statement *Statement::constructFrom(Reader &reader)
     reader.mark();
     reader >> id;
     reader.rewind();
-    
-    std::auto_ptr<Statement> result;
+
+    std::unique_ptr<Statement> result;
     switch(id)
     {
     case ASSIGN:
         result.reset(new AssignStatement);
         break;
-        
+
     case CATCH:
         result.reset(new CatchStatement);
         break;
@@ -65,31 +65,31 @@ Statement *Statement::constructFrom(Reader &reader)
     case EXPRESSION:
         result.reset(new ExpressionStatement);
         break;
-        
+
     case FLOW:
         result.reset(new FlowStatement);
         break;
-        
+
     case FOR:
         result.reset(new ForStatement);
         break;
-        
+
     case FUNCTION:
         result.reset(new FunctionStatement);
         break;
-        
+
     case IF:
         result.reset(new IfStatement);
         break;
-        
+
     case PRINT:
         result.reset(new PrintStatement);
         break;
-        
+
     case TRY:
         result.reset(new TryStatement);
-        break;    
-        
+        break;
+
     case WHILE:
         result.reset(new WhileStatement);
         break;
@@ -97,14 +97,14 @@ Statement *Statement::constructFrom(Reader &reader)
     case SCOPE:
         result.reset(new ScopeStatement);
         break;
-                
+
     default:
-        /// @throw DeserializationError The identifier that species the type of the 
+        /// @throw DeserializationError The identifier that species the type of the
         /// serialized statement was invalid.
         throw DeserializationError("Statement::constructFrom", "Invalid statement identifier");
     }
 
     // Deserialize it.
     reader >> *result.get();
-    return result.release();    
+    return result.release();
 }
diff --git a/doomsday/libgui/gui.doxy b/doomsday/libgui/gui.doxy
index 173ec89..26e58c4 100644
--- a/doomsday/libgui/gui.doxy
+++ b/doomsday/libgui/gui.doxy
@@ -2,7 +2,7 @@
 @INCLUDE = ../doomsday.doxy
 
 PROJECT_NAME            = "libgui"
-PROJECT_NUMBER          = 1.15.5
+PROJECT_NUMBER          = 1.15.7
 PROJECT_BRIEF           = "Graphics, Audio and Input Library"
 OUTPUT_DIRECTORY        = ../apidoc/gui/
 
diff --git a/doomsday/libgui/net.dengine.stdlib.gui.pack/Info b/doomsday/libgui/net.dengine.stdlib.gui.pack/Info
index 9b1e3f8..93f79af 100644
--- a/doomsday/libgui/net.dengine.stdlib.gui.pack/Info
+++ b/doomsday/libgui/net.dengine.stdlib.gui.pack/Info
@@ -1,5 +1,5 @@
 title: Doomsday Script Standard Library: GUI
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core script gui
 
diff --git a/doomsday/libgui/src/graphics/atlas.cpp b/doomsday/libgui/src/graphics/atlas.cpp
index da6d2f7..a548ebc 100644
--- a/doomsday/libgui/src/graphics/atlas.cpp
+++ b/doomsday/libgui/src/graphics/atlas.cpp
@@ -31,7 +31,7 @@ DENG2_PIMPL(Atlas)
     Size totalSize;
     int margin;
     int border;
-    std::auto_ptr<IAllocator> allocator;
+    std::unique_ptr<IAllocator> allocator;
     Image backing;
     bool needCommit;
     bool needFullCommit;
diff --git a/doomsday/libshell/src/abstractlink.cpp b/doomsday/libshell/src/abstractlink.cpp
index 1bb987a..3020e62 100644
--- a/doomsday/libshell/src/abstractlink.cpp
+++ b/doomsday/libshell/src/abstractlink.cpp
@@ -13,7 +13,7 @@
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  * General Public License for more details. You should have received a copy of
  * the GNU Lesser General Public License along with this program; if not, see:
- * http://www.gnu.org/licenses</small> 
+ * http://www.gnu.org/licenses</small>
  */
 
 #include "de/shell/AbstractLink"
@@ -33,7 +33,7 @@ DENG2_PIMPL(AbstractLink)
     Time startedTryingAt;
     TimeDelta timeout;
     Address peerAddress;
-    std::auto_ptr<Socket> socket;
+    std::unique_ptr<Socket> socket;
     Status status;
     Time connectedAt;
 
@@ -150,7 +150,7 @@ Packet *AbstractLink::nextPacket()
 {
     if(!d->socket->hasIncoming()) return 0;
 
-    std::auto_ptr<Message> data(d->socket->receive());
+    std::unique_ptr<Message> data(d->socket->receive());
     Packet *packet = interpret(*data.get());
     if(packet) packet->setFrom(data->address());
     return packet;
diff --git a/doomsday/net.dengine.base.pack/Info b/doomsday/net.dengine.base.pack/Info
index a935a78..768d778 100644
--- a/doomsday/net.dengine.base.pack/Info
+++ b/doomsday/net.dengine.base.pack/Info
@@ -1,6 +1,6 @@
 # Shared resources for all Doomsday applications
 
 title: Doomsday Base
-version: 1.15.5
+version: 1.15.7
 license: GPL 3+
 tags: core
diff --git a/doomsday/plugins/common/include/dmu_archiveindex.h b/doomsday/plugins/common/include/dmu_archiveindex.h
index 2dbafd7..06ccfdb 100644
--- a/doomsday/plugins/common/include/dmu_archiveindex.h
+++ b/doomsday/plugins/common/include/dmu_archiveindex.h
@@ -41,7 +41,7 @@ public:
      *
      * @param elementType  DMU element type of the objects to be indexed.
      */
-    ArchiveIndex() : _indexBase(-1), _lut(0)
+    ArchiveIndex() : _indexBase(-1)
     {}
 
     /**
@@ -152,7 +152,7 @@ private:
     typedef std::vector<MapElementPtr> ElementLut;
 
     int _indexBase;
-    std::auto_ptr<ElementLut> _lut;
+    std::unique_ptr<ElementLut> _lut;
 };
 
 ///@{
diff --git a/doomsday/plugins/doom/data/doom2-freedm.mapinfo b/doomsday/plugins/doom/data/doom2-freedm.mapinfo
new file mode 100644
index 0000000..21946a8
--- /dev/null
+++ b/doomsday/plugins/doom/data/doom2-freedm.mapinfo
@@ -0,0 +1,262 @@
+; Episode 1 ------------------------------------------------------------
+
+episode MAP01
+name "Hell On Earth"
+key h
+
+map MAP01 lookup HUSTR_1
+next MAP02
+warptrans 1
+sky1 SKY1 0
+par 30
+music D_RUNNIN
+titlepatch CWILV00
+
+map MAP02 lookup HUSTR_2
+next MAP03
+warptrans 2
+sky1 SKY1 0
+par 90
+music D_STALKS
+titlepatch CWILV01
+
+map MAP03 lookup HUSTR_3
+next MAP04
+warptrans 3
+sky1 SKY1 0
+par 120
+music D_COUNTD
+titlepatch CWILV02
+
+map MAP04 lookup HUSTR_4
+next MAP05
+warptrans 4
+sky1 SKY1 0
+par 120
+music D_BETWEE
+titlepatch CWILV03
+
+map MAP05 lookup HUSTR_5
+next MAP06
+warptrans 5
+sky1 SKY1 0
+par 90
+music D_DOOM
+titlepatch CWILV04
+
+map MAP06 lookup HUSTR_6
+next MAP07
+warptrans 6
+sky1 SKY1 0
+par 150
+music D_THE_DA
+titlepatch CWILV05
+
+map MAP07 lookup HUSTR_7
+next MAP08
+warptrans 7
+sky1 SKY1 0
+par 120
+music D_SHAWN
+titlepatch CWILV06
+
+map MAP08 lookup HUSTR_8
+next MAP09
+warptrans 8
+sky1 SKY1 0
+par 120
+music D_DDTBLU
+titlepatch CWILV07
+
+map MAP09 lookup HUSTR_9
+next MAP10
+warptrans 9
+sky1 SKY1 0
+par 270
+music D_IN_CIT
+titlepatch CWILV08
+
+map MAP10 lookup HUSTR_10
+next MAP11
+warptrans 10
+sky1 SKY1 0
+par 90
+music D_DEAD
+titlepatch CWILV09
+
+map MAP11 lookup HUSTR_11
+next MAP12
+warptrans 11
+sky1 SKY1 0
+par 210
+music D_STLKS2
+titlepatch CWILV10
+
+map MAP12 lookup HUSTR_12
+next MAP13
+warptrans 12
+sky1 SKY2 0
+par 150
+music D_THEDA2
+titlepatch CWILV11
+
+map MAP13 lookup HUSTR_13
+next MAP14
+warptrans 13
+sky1 SKY2 0
+par 150
+music D_DOOM2
+titlepatch CWILV12
+
+map MAP14 lookup HUSTR_14
+next MAP15
+warptrans 14
+sky1 SKY2 0
+par 150
+music D_DDTBL2
+titlepatch CWILV13
+
+map MAP15 lookup HUSTR_15
+next MAP16
+secretnext MAP31
+warptrans 15
+sky1 SKY2 0
+par 210
+music D_RUNNI2
+titlepatch CWILV14
+
+map MAP16 lookup HUSTR_16
+next MAP17
+warptrans 16
+sky1 SKY2 0
+par 150
+music D_DEAD2
+titlepatch CWILV15
+
+map MAP17 lookup HUSTR_17
+next MAP18
+warptrans 17
+sky1 SKY2 0
+par 420
+music D_STLKS3
+titlepatch CWILV16
+
+map MAP18 lookup HUSTR_18
+next MAP19
+warptrans 18
+sky1 SKY2 0
+par 150
+music D_ROMERO
+titlepatch CWILV17
+
+map MAP19 lookup HUSTR_19
+next MAP20
+warptrans 19
+sky1 SKY2 0
+par 210
+music D_SHAWN2
+titlepatch CWILV18
+
+map MAP20 lookup HUSTR_20
+next MAP21
+warptrans 20
+sky1 SKY2 0
+par 150
+music D_MESSAG
+titlepatch CWILV19
+
+map MAP21 lookup HUSTR_21
+next MAP22
+warptrans 21
+sky1 SKY3 0
+par 240
+music D_COUNT2
+titlepatch CWILV20
+
+map MAP22 lookup HUSTR_22
+next MAP23
+warptrans 22
+sky1 SKY3 0
+par 150
+music D_DDTBL3
+titlepatch CWILV21
+
+map MAP23 lookup HUSTR_23
+next MAP24
+warptrans 23
+sky1 SKY3 0
+par 180
+music D_AMPIE
+titlepatch CWILV22
+
+map MAP24 lookup HUSTR_24
+next MAP25
+warptrans 24
+sky1 SKY3 0
+par 150
+music D_THEDA3
+titlepatch CWILV23
+
+map MAP25 lookup HUSTR_25
+next MAP26
+warptrans 25
+sky1 SKY3 0
+par 150
+music D_ADRIAN
+titlepatch CWILV24
+
+map MAP26 lookup HUSTR_26
+next MAP27
+warptrans 26
+sky1 SKY3 0
+par 300
+music D_MESSG2
+titlepatch CWILV25
+
+map MAP27 lookup HUSTR_27
+next MAP28
+warptrans 27
+sky1 SKY3 0
+par 330
+music D_ROMER2
+titlepatch CWILV26
+
+map MAP28 lookup HUSTR_28
+next MAP29
+warptrans 28
+sky1 SKY3 0
+par 420
+music D_TENSE
+titlepatch CWILV27
+
+map MAP29 lookup HUSTR_29
+next MAP30
+warptrans 29
+sky1 SKY3 0
+par 300
+music D_SHAWN3
+titlepatch CWILV28
+
+map MAP30 lookup HUSTR_30
+warptrans 30
+sky1 SKY3 0
+par 180
+music D_OPENIN
+titlepatch CWILV29
+
+map MAP31 lookup HUSTR_31
+next MAP16
+secretnext MAP32
+warptrans 31
+sky1 SKY3 0
+par 120
+music D_EVIL
+titlepatch CWILV30
+
+map MAP32 lookup HUSTR_32
+next MAP16
+warptrans 32
+sky1 SKY3 0
+par 30
+music D_ULTIMA
+titlepatch CWILV31
diff --git a/doomsday/plugins/doom/defs/doom2-freedm.ded b/doomsday/plugins/doom/defs/doom2-freedm.ded
new file mode 100644
index 0000000..6162093
--- /dev/null
+++ b/doomsday/plugins/doom/defs/doom2-freedm.ded
@@ -0,0 +1,28 @@
+#
+# FreeDM - Doomsday Engine definitions
+#
+# For information about DED syntax and semantics, see http://wiki.dengine.net/w/DED
+#
+
+# Common definitions
+Include "jdoom.ded";
+
+# MAPINFO interoperability patches
+Include "doom2/patchmapinfo.ded";
+
+Include "doom1/anim.ded";
+Include "doom2/anim.ded";
+Include "doom2/skies.ded";
+Include "doom2/finales.ded";
+Include "doom1/fonts.ded";
+Include "doom1/materials.ded";
+Include "doom1/materialenvironments.ded";
+Include "doom2/materialenvironments.ded";
+Include "doom1/particles.ded";
+Include "doom2/particles.ded";
+Include "doom1/lights.ded";
+Include "doom2/lights.ded";
+Include "doom2/music.ded";
+Include "doom1/menu.ded";
+Include "doom1/hud.ded";
+Include "doom1/inlude.ded";
diff --git a/doomsday/plugins/doom/include/doomdef.h b/doomsday/plugins/doom/include/doomdef.h
index 62e5d92..8868939 100644
--- a/doomsday/plugins/doom/include/doomdef.h
+++ b/doomsday/plugins/doom/include/doomdef.h
@@ -72,10 +72,11 @@ typedef enum {
     doom2_plut,
     doom2_tnt,
     doom2_hacx,
+    doom2_freedm,
     NUM_GAME_MODES
 } gamemode_t;
 
-// Game mode bits for the above.
+// Game mode bits for the above (must match the enum order).
 #define GM_DOOM_SHAREWARE   0x1
 #define GM_DOOM             0x2
 #define GM_DOOM_ULTIMATE    0x4
@@ -84,9 +85,10 @@ typedef enum {
 #define GM_DOOM2_PLUT       0x20
 #define GM_DOOM2_TNT        0x40
 #define GM_DOOM2_HACX       0x80
+#define GM_DOOM2_FREEDM     0x100
 
 #define GM_ANY_DOOM         (GM_DOOM|GM_DOOM_SHAREWARE|GM_DOOM_ULTIMATE|GM_DOOM_CHEX)
-#define GM_ANY_DOOM2        (GM_DOOM2|GM_DOOM2_PLUT|GM_DOOM2_TNT|GM_DOOM2_HACX)
+#define GM_ANY_DOOM2        (GM_DOOM2|GM_DOOM2_PLUT|GM_DOOM2_TNT|GM_DOOM2_HACX|GM_DOOM2_FREEDM)
 #define GM_ANY              (GM_ANY_DOOM|GM_ANY_DOOM2)
 
 #define SCREENWIDTH         320
diff --git a/doomsday/plugins/doom/src/d_api.c b/doomsday/plugins/doom/src/d_api.c
index 8704589..fa089a8 100644
--- a/doomsday/plugins/doom/src/d_api.c
+++ b/doomsday/plugins/doom/src/d_api.c
@@ -99,6 +99,12 @@ int G_RegisterGames(int hookType, int param, void *data)
         LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
         "$(App.DataPath)/$(GamePlugin.Name)/doom2.mapinfo"
     };
+    GameDef const freeDMDef = {
+        "doom2-freedm", "doom",
+        "FreeDM", "Freedoom Project",
+        LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER,
+        "$(App.DataPath)/$(GamePlugin.Name)/doom2-freedm.mapinfo"
+    };
     GameDef const doomUltimateDef = {
         "doom1-ultimate", "doom",
         "Ultimate DOOM", "id Software",
@@ -144,6 +150,12 @@ int G_RegisterGames(int hookType, int param, void *data)
     DD_AddGameResource(GID(doom2_plut), RC_PACKAGE, FF_STARTUP, "plutonia.wad", "_DEUTEX_;MAP01;MAP25;MC5;MC11;MC16;MC20");
     DD_AddGameResource(GID(doom2_plut), RC_DEFINITION, 0, "doom2-plut.ded", 0);
 
+    /* DOOM2 - FreeDM */
+    gameIds[doom2_freedm] = DD_DefineGame(&freeDMDef);
+    DD_AddGameResource(GID(doom2_freedm), RC_PACKAGE, FF_STARTUP, STARTUPPK3, 0);
+    DD_AddGameResource(GID(doom2_freedm), RC_PACKAGE, FF_STARTUP, "freedm.wad", "MAP01");
+    DD_AddGameResource(GID(doom2_freedm), RC_DEFINITION, 0, "doom2-freedm.ded", 0);
+
     /* DOOM2 */
     gameIds[doom2] = DD_DefineGame(&doom2Def);
     DD_AddGameResource(GID(doom2), RC_PACKAGE, FF_STARTUP, STARTUPPK3, 0);
@@ -186,6 +198,7 @@ void DP_Load(void)
     gameIds[doom2_tnt]      = DD_GameIdForKey("doom2-tnt");
     gameIds[doom2_plut]     = DD_GameIdForKey("doom2-plut");
     gameIds[doom2_hacx]     = DD_GameIdForKey("hacx");
+    gameIds[doom2_freedm]   = DD_GameIdForKey("doom2-freedm");
 
     Plug_AddHook(HOOK_VIEWPORT_RESHAPE, R_UpdateViewport);
 }
diff --git a/doomsday/sdk-qch.doxy b/doomsday/sdk-qch.doxy
index 8c3a9ba..77a42bb 100644
--- a/doomsday/sdk-qch.doxy
+++ b/doomsday/sdk-qch.doxy
@@ -5,8 +5,8 @@ OUTPUT_DIRECTORY        = apidoc-qch/
 # Also generate help files for Qt Creator
 GENERATE_QHP            = YES
 QCH_FILE                = "doomsday.qch"
-QHP_NAMESPACE           = "net.dengine.sdk.1155"
-QHP_VIRTUAL_FOLDER      = "doomsday-1.15.5"
+QHP_NAMESPACE           = "net.dengine.sdk.1157"
+QHP_VIRTUAL_FOLDER      = "doomsday-1.15.7"
 QHG_LOCATION            = "../build/scripts/qhelp.py"
 
 # Dynamic HTML doesn't work inside Qt Creator
diff --git a/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp b/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp
index dca5219..47fc917 100644
--- a/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp
+++ b/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp
@@ -21,6 +21,7 @@
 #include "guishellapp.h"
 #include <de/libcore.h>
 #include <de/Socket>
+#include <de/CommandLine>
 #include <de/shell/DoomsdayInfo>
 #include <QVBoxLayout>
 #include <QDialogButtonBox>
@@ -226,7 +227,15 @@ QStringList LocalServerDialog::additionalOptions() const
     QStringList opts;
     opts << "-cmd" << QString("server-password \"%1\"").arg(d->password->text());
     opts << "-cmd" << QString("server-public %1").arg(d->announce->isChecked()? 1 : 0);
-    opts << d->options->toPlainText().split(' ', QString::SkipEmptyParts);
+
+    // Parse the provided options using libcore so quotes and other special
+    // behavior matches Doomsday.
+    CommandLine cmdLine;
+    cmdLine.parse(d->options->toPlainText());
+    for(int i = 0; i < cmdLine.count(); ++i)
+    {
+        opts << cmdLine.at(i);
+    }
     return opts;
 }
 
@@ -241,7 +250,7 @@ void LocalServerDialog::portChanged()
 }
 
 void LocalServerDialog::configureGameOptions()
-{    
+{
 }
 
 void LocalServerDialog::saveState()

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



More information about the Pkg-games-commits mailing list