summaryrefslogtreecommitdiff
path: root/games
diff options
context:
space:
mode:
authorDmitry Marakasov <amdmi3@FreeBSD.org>2015-12-02 13:52:22 +0000
committerDmitry Marakasov <amdmi3@FreeBSD.org>2015-12-02 13:52:22 +0000
commit75ccd921cb5730ab299a3004136e9db7814f1edd (patch)
treed3d2290072c275013886fe9b360d83f59928613b /games
parentAdd two dependencies forgotten in the previous commit. (diff)
OpenMW is a recreation of the engine for the popular role-playing game
Morrowind by Bethesda Softworks. You need to own and install the original game for OpenMW to work. WWW: https://openmw.org/ PR: 204948 Submitted by: t@tobik.me
Notes
Notes: svn path=/head/; revision=402826
Diffstat (limited to 'games')
-rw-r--r--games/Makefile1
-rw-r--r--games/openmw/Makefile53
-rw-r--r--games/openmw/distinfo2
-rw-r--r--games/openmw/files/patch-CMakeLists.txt11
-rw-r--r--games/openmw/files/patch-apps_essimporter_converter.hpp11
-rw-r--r--games/openmw/files/patch-apps_openmw_crashcatcher.cpp11
-rw-r--r--games/openmw/files/patch-apps_openmw_engine.cpp14
-rw-r--r--games/openmw/files/patch-apps_openmw_mwinput_inputmanagerimp.cpp27
-rw-r--r--games/openmw/files/patch-apps_openmw_mwmechanics_spells.cpp11
-rw-r--r--games/openmw/files/patch-apps_openmw_mwmechanics_spells.hpp11
-rw-r--r--games/openmw/files/patch-apps_openmw_mwworld_refdata.hpp10
-rw-r--r--games/openmw/files/patch-apps_openmw_mwworld_weather.cpp21
-rw-r--r--games/openmw/files/patch-apps_openmw_mwworld_worldimp.cpp11
-rw-r--r--games/openmw/files/patch-apps_wizard_CMakeLists.txt11
-rw-r--r--games/openmw/files/patch-components_esm_spellstate.cpp22
-rw-r--r--games/openmw/files/patch-components_esm_spellstate.hpp11
-rw-r--r--games/openmw/files/patch-components_files_configurationmanager.hpp14
-rw-r--r--games/openmw/files/patch-components_sceneutil_lightcontroller.cpp10
-rw-r--r--games/openmw/files/patch-files_gamecontrollerdb.txt10
-rw-r--r--games/openmw/pkg-descr5
-rw-r--r--games/openmw/pkg-message10
-rw-r--r--games/openmw/pkg-plist105
22 files changed, 392 insertions, 0 deletions
diff --git a/games/Makefile b/games/Makefile
index 05c5234c987a..15a3e293f2d6 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -683,6 +683,7 @@
SUBDIR += openlierox
SUBDIR += openmortal
SUBDIR += openmsx
+ SUBDIR += openmw
SUBDIR += openpref
SUBDIR += openra
SUBDIR += opensfx
diff --git a/games/openmw/Makefile b/games/openmw/Makefile
new file mode 100644
index 000000000000..53aa9ae07a9a
--- /dev/null
+++ b/games/openmw/Makefile
@@ -0,0 +1,53 @@
+# Created by: Tobias Kortkamp <t@tobik.me>
+# $FreeBSD$
+
+PORTNAME= openmw
+PORTVERSION= 0.37.0
+DISTVERSIONPREFIX= openmw-
+CATEGORIES= games
+
+MAINTAINER= t@tobik.me
+COMMENT= Unofficial open source engine reimplementation of the game Morrowind
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/docs/license/GPL3.txt
+
+LIB_DEPENDS= libavcodec.so:${PORTSDIR}/multimedia/ffmpeg \
+ libBulletCollision.so:${PORTSDIR}/devel/bullet \
+ libboost_thread.so:${PORTSDIR}/devel/boost-libs \
+ libMyGUIEngine.so:${PORTSDIR}/x11-toolkits/mygui \
+ libosg.so:${PORTSDIR}/graphics/osg \
+ libunshield.so:${PORTSDIR}/archivers/unshield
+
+BROKEN_FreeBSD_9= does not build
+
+USE_GITHUB= yes
+GH_ACCOUNT= OpenMW
+
+USES= cmake:outsource compiler:c++11-lib ninja openal pkgconfig
+USE_GL= gl
+USE_QT5= qmake_build buildtools_build core widgets network opengl
+USE_SDL= sdl2
+
+CMAKE_ARGS= -DCMAKE_BUILD_TYPE=Release \
+ -DDESIRED_QT_VERSION=5 \
+ -DBUILD_OPENMW=ON \
+ -DBUILD_BSATOOL=ON \
+ -DBUILD_ESMTOOL=ON \
+ -DBUILD_LAUNCHER=ON \
+ -DBUILD_MWINIIMPORTER=ON \
+ -DBUILD_ESSIMPORTER=ON \
+ -DBUILD_OPENCS=OFF \
+ -DBUILD_WIZARD=ON \
+ -DBUILD_WITH_CODE_COVERAGE=OFF \
+ -DBUILD_UNITTEST=OFF \
+ -DBUILD_NIFTEST=OFF \
+ -DBUILD_MYGUI_PLUGIN=OFF \
+ -DMORROWIND_DATA_FILES="${DATADIR}/data" \
+ -DOPENMW_RESOURCE_FILES="${DATADIR}/resources" \
+ -DGLOBAL_DATA_PATH="${PREFIX}/share"
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+
+.include <bsd.port.mk>
diff --git a/games/openmw/distinfo b/games/openmw/distinfo
new file mode 100644
index 000000000000..d9ec8c561cc4
--- /dev/null
+++ b/games/openmw/distinfo
@@ -0,0 +1,2 @@
+SHA256 (OpenMW-openmw-openmw-0.37.0_GH0.tar.gz) = a2c4dd7926cf156d993e20a3914c1708c9c43d3fb8aae4c17ccf03d50beffc27
+SIZE (OpenMW-openmw-openmw-0.37.0_GH0.tar.gz) = 4118094
diff --git a/games/openmw/files/patch-CMakeLists.txt b/games/openmw/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..fd48e93f97bc
--- /dev/null
+++ b/games/openmw/files/patch-CMakeLists.txt
@@ -0,0 +1,11 @@
+--- CMakeLists.txt.orig 2015-11-22 18:54:17 UTC
++++ CMakeLists.txt
+@@ -191,7 +191,7 @@ IF(BOOST_STATIC)
+ set(Boost_USE_STATIC_LIBS ON)
+ endif()
+
+-find_package(OpenSceneGraph 3.2.0 REQUIRED osgDB osgViewer osgText osgGA osgAnimation osgParticle osgQt osgUtil osgFX)
++find_package(OpenSceneGraph 3.2.0 REQUIRED osgDB osgViewer osgText osgGA osgAnimation osgParticle osgUtil osgFX)
+ include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS})
+
+ if(OSG_STATIC)
diff --git a/games/openmw/files/patch-apps_essimporter_converter.hpp b/games/openmw/files/patch-apps_essimporter_converter.hpp
new file mode 100644
index 000000000000..31dadbf13b86
--- /dev/null
+++ b/games/openmw/files/patch-apps_essimporter_converter.hpp
@@ -0,0 +1,11 @@
+--- apps/essimporter/converter.hpp.orig 2015-11-22 18:54:17 UTC
++++ apps/essimporter/converter.hpp
+@@ -118,7 +118,7 @@ public:
+ {
+ mContext->mPlayer.mObject.mCreatureStats.mLevel = npc.mNpdt52.mLevel;
+ mContext->mPlayerBase = npc;
+- std::map<const int, float> empty;
++ std::map<int, float> empty;
+ // FIXME: player start spells and birthsign spells aren't listed here,
+ // need to fix openmw to account for this
+ for (std::vector<std::string>::const_iterator it = npc.mSpells.mList.begin(); it != npc.mSpells.mList.end(); ++it)
diff --git a/games/openmw/files/patch-apps_openmw_crashcatcher.cpp b/games/openmw/files/patch-apps_openmw_crashcatcher.cpp
new file mode 100644
index 000000000000..e8fdf610f6c9
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_crashcatcher.cpp
@@ -0,0 +1,11 @@
+--- apps/openmw/crashcatcher.cpp.orig 2015-11-24 02:42:35 UTC
++++ apps/openmw/crashcatcher.cpp
+@@ -24,7 +24,7 @@
+ #ifndef PR_SET_PTRACER
+ #define PR_SET_PTRACER 0x59616d61
+ #endif
+-#elif defined (__APPLE__)
++#elif defined (__APPLE__) || defined (__FreeBSD__)
+ #include <signal.h>
+ #endif
+
diff --git a/games/openmw/files/patch-apps_openmw_engine.cpp b/games/openmw/files/patch-apps_openmw_engine.cpp
new file mode 100644
index 000000000000..303a015e5849
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_engine.cpp
@@ -0,0 +1,14 @@
+--- apps/openmw/engine.cpp.orig 2015-11-24 02:42:35 UTC
++++ apps/openmw/engine.cpp
+@@ -473,8 +473,9 @@ void OMW::Engine::prepareEngine (Setting
+ }
+
+ // find correct path to the game controller bindings
+- const std::string localdefault = mCfgMgr.getLocalPath().string() + "/gamecontrollerdb.cfg";
+- const std::string globaldefault = mCfgMgr.getGlobalPath().string() + "/gamecontrollerdb.cfg";
++ const std::string localdefault = mCfgMgr.getLocalPath().string() + "/gamecontrollerdb.txt";
++ const std::string globaldefault = mCfgMgr.getGlobalPath().string() + "/gamecontrollerdb.txt";
++
+ std::string gameControllerdb;
+ if (boost::filesystem::exists(localdefault))
+ gameControllerdb = localdefault;
diff --git a/games/openmw/files/patch-apps_openmw_mwinput_inputmanagerimp.cpp b/games/openmw/files/patch-apps_openmw_mwinput_inputmanagerimp.cpp
new file mode 100644
index 000000000000..c223edf0cc98
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwinput_inputmanagerimp.cpp
@@ -0,0 +1,27 @@
+--- apps/openmw/mwinput/inputmanagerimp.cpp.orig 2015-11-22 18:54:17 UTC
++++ apps/openmw/mwinput/inputmanagerimp.cpp
+@@ -374,6 +374,8 @@ namespace MWInput
+ {
+ float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue()*2.0f-1.0f;
+ float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue()*2.0f-1.0f;
++ if (mInvertY)
++ yAxis *= -1;
+ float zAxis = mInputBinder->getChannel(A_LookUpDown)->getValue()*2.0f-1.0f;
+ const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
+
+@@ -441,13 +443,13 @@ namespace MWInput
+ {
+ triedToMove = true;
+ mPlayer->setAutoMove (false);
+- mPlayer->setForwardBackward (1);
++ mPlayer->setForwardBackward (mInvertY ? -1 : 1);
+ }
+ else if (yAxis > .5)
+ {
+ triedToMove = true;
+ mPlayer->setAutoMove (false);
+- mPlayer->setForwardBackward (-1);
++ mPlayer->setForwardBackward (mInvertY ? 1 : -1);
+ }
+
+ else if(mPlayer->getAutoMove())
diff --git a/games/openmw/files/patch-apps_openmw_mwmechanics_spells.cpp b/games/openmw/files/patch-apps_openmw_mwmechanics_spells.cpp
new file mode 100644
index 000000000000..5af0a04f8c54
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwmechanics_spells.cpp
@@ -0,0 +1,11 @@
+--- apps/openmw/mwmechanics/spells.cpp.orig 2015-11-24 02:42:35 UTC
++++ apps/openmw/mwmechanics/spells.cpp
+@@ -29,7 +29,7 @@ namespace MWMechanics
+ {
+ if (mSpells.find (spell->mId)==mSpells.end())
+ {
+- std::map<const int, float> random;
++ std::map<int, float> random;
+
+ // Determine the random magnitudes (unless this is a castable spell, in which case
+ // they will be determined when the spell is cast)
diff --git a/games/openmw/files/patch-apps_openmw_mwmechanics_spells.hpp b/games/openmw/files/patch-apps_openmw_mwmechanics_spells.hpp
new file mode 100644
index 000000000000..9fa5879d2fd4
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwmechanics_spells.hpp
@@ -0,0 +1,11 @@
+--- apps/openmw/mwmechanics/spells.hpp.orig 2015-11-24 02:42:35 UTC
++++ apps/openmw/mwmechanics/spells.hpp
+@@ -31,7 +31,7 @@ namespace MWMechanics
+ {
+ public:
+
+- typedef std::map<std::string, std::map<const int, float> > TContainer; // ID, <effect index, normalised random magnitude>
++ typedef std::map<std::string, std::map<int, float> > TContainer; // ID, <effect index, normalised random magnitude>
+ typedef TContainer::const_iterator TIterator;
+
+ struct CorprusStats
diff --git a/games/openmw/files/patch-apps_openmw_mwworld_refdata.hpp b/games/openmw/files/patch-apps_openmw_mwworld_refdata.hpp
new file mode 100644
index 000000000000..8ead93fbb0c2
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwworld_refdata.hpp
@@ -0,0 +1,10 @@
+--- apps/openmw/mwworld/refdata.hpp.orig 2015-11-22 18:54:17 UTC
++++ apps/openmw/mwworld/refdata.hpp
+@@ -5,6 +5,7 @@
+
+ #include "../mwscript/locals.hpp"
+
++#include <string>
+ #include <osg/Vec3f>
+
+ namespace osg
diff --git a/games/openmw/files/patch-apps_openmw_mwworld_weather.cpp b/games/openmw/files/patch-apps_openmw_mwworld_weather.cpp
new file mode 100644
index 000000000000..a17d28d8db7e
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwworld_weather.cpp
@@ -0,0 +1,21 @@
+--- apps/openmw/mwworld/weather.cpp.orig 2015-11-22 18:54:17 UTC
++++ apps/openmw/mwworld/weather.cpp
+@@ -95,9 +95,10 @@ T TimeOfDayInterpolator<T>::getValue(con
+ }
+
+
+-
+-template class TimeOfDayInterpolator<float>;
+-template class TimeOfDayInterpolator<osg::Vec4f>;
++namespace MWWorld {
++ template class TimeOfDayInterpolator<float>;
++ template class TimeOfDayInterpolator<osg::Vec4f>;
++};
+
+ Weather::Weather(const std::string& name,
+ const MWWorld::Fallback& fallback,
+@@ -1133,4 +1134,3 @@ inline void WeatherManager::calculateTra
+ mResult.mAmbientLoopSoundID = other.mAmbientLoopSoundID;
+ }
+ }
+-
diff --git a/games/openmw/files/patch-apps_openmw_mwworld_worldimp.cpp b/games/openmw/files/patch-apps_openmw_mwworld_worldimp.cpp
new file mode 100644
index 000000000000..b356f473c862
--- /dev/null
+++ b/games/openmw/files/patch-apps_openmw_mwworld_worldimp.cpp
@@ -0,0 +1,11 @@
+--- apps/openmw/mwworld/worldimp.cpp.orig 2015-11-22 18:54:17 UTC
++++ apps/openmw/mwworld/worldimp.cpp
+@@ -108,7 +108,7 @@ namespace MWWorld
+ }
+
+ private:
+- typedef std::tr1::unordered_map<std::string, ContentLoader*> LoadersContainer;
++ typedef std::unordered_map<std::string, ContentLoader*> LoadersContainer;
+ LoadersContainer mLoaders;
+ };
+
diff --git a/games/openmw/files/patch-apps_wizard_CMakeLists.txt b/games/openmw/files/patch-apps_wizard_CMakeLists.txt
new file mode 100644
index 000000000000..42b4c28dabed
--- /dev/null
+++ b/games/openmw/files/patch-apps_wizard_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- apps/wizard/CMakeLists.txt.orig 2015-11-24 02:42:35 UTC
++++ apps/wizard/CMakeLists.txt
+@@ -150,6 +150,7 @@ endif()
+
+ # Workaround for binutil => 2.23 problem when linking, should be fixed eventually upstream
+ if (UNIX AND NOT APPLE)
+-target_link_libraries(openmw-wizard dl Xt)
++target_link_libraries(openmw-wizard Xt)
+ endif()
+
++target_link_libraries(openmw-wizard boost_program_options)
diff --git a/games/openmw/files/patch-components_esm_spellstate.cpp b/games/openmw/files/patch-components_esm_spellstate.cpp
new file mode 100644
index 000000000000..4bcc2278752c
--- /dev/null
+++ b/games/openmw/files/patch-components_esm_spellstate.cpp
@@ -0,0 +1,22 @@
+--- components/esm/spellstate.cpp.orig 2015-11-24 02:42:35 UTC
++++ components/esm/spellstate.cpp
+@@ -12,7 +12,7 @@ namespace ESM
+ {
+ std::string id = esm.getHString();
+
+- std::map<const int, float> random;
++ std::map<int, float> random;
+ while (esm.isNextSub("INDX"))
+ {
+ int index;
+@@ -73,8 +73,8 @@ namespace ESM
+ {
+ esm.writeHNString("SPEL", it->first);
+
+- const std::map<const int, float>& random = it->second;
+- for (std::map<const int, float>::const_iterator rIt = random.begin(); rIt != random.end(); ++rIt)
++ const std::map<int, float>& random = it->second;
++ for (std::map<int, float>::const_iterator rIt = random.begin(); rIt != random.end(); ++rIt)
+ {
+ esm.writeHNT("INDX", rIt->first);
+ esm.writeHNT("RAND", rIt->second);
diff --git a/games/openmw/files/patch-components_esm_spellstate.hpp b/games/openmw/files/patch-components_esm_spellstate.hpp
new file mode 100644
index 000000000000..39bff1d13025
--- /dev/null
+++ b/games/openmw/files/patch-components_esm_spellstate.hpp
@@ -0,0 +1,11 @@
+--- components/esm/spellstate.hpp.orig 2015-11-24 02:42:35 UTC
++++ components/esm/spellstate.hpp
+@@ -28,7 +28,7 @@ namespace ESM
+ float mMagnitude;
+ };
+
+- typedef std::map<std::string, std::map<const int, float> > TContainer;
++ typedef std::map<std::string, std::map<int, float> > TContainer;
+ TContainer mSpells;
+
+ std::map<std::string, std::vector<PermanentSpellEffectInfo> > mPermanentSpellEffects;
diff --git a/games/openmw/files/patch-components_files_configurationmanager.hpp b/games/openmw/files/patch-components_files_configurationmanager.hpp
new file mode 100644
index 000000000000..962c42f68f7c
--- /dev/null
+++ b/games/openmw/files/patch-components_files_configurationmanager.hpp
@@ -0,0 +1,14 @@
+--- components/files/configurationmanager.hpp.orig 2015-11-24 02:42:35 UTC
++++ components/files/configurationmanager.hpp
+@@ -52,11 +52,7 @@ struct ConfigurationManager
+ typedef Files::FixedPath<> FixedPathType;
+
+ typedef const boost::filesystem::path& (FixedPathType::*path_type_f)() const;
+- #if defined HAVE_UNORDERED_MAP
+ typedef std::unordered_map<std::string, path_type_f> TokensMappingContainer;
+- #else
+- typedef std::tr1::unordered_map<std::string, path_type_f> TokensMappingContainer;
+- #endif
+
+ void loadConfig(const boost::filesystem::path& path,
+ boost::program_options::variables_map& variables,
diff --git a/games/openmw/files/patch-components_sceneutil_lightcontroller.cpp b/games/openmw/files/patch-components_sceneutil_lightcontroller.cpp
new file mode 100644
index 000000000000..8a40135bcd4c
--- /dev/null
+++ b/games/openmw/files/patch-components_sceneutil_lightcontroller.cpp
@@ -0,0 +1,10 @@
+--- components/sceneutil/lightcontroller.cpp.orig 2015-11-24 02:42:35 UTC
++++ components/sceneutil/lightcontroller.cpp
+@@ -2,6 +2,7 @@
+
+ #include <cmath>
+
++#include <osg/observer_ptr>
+ #include <osg/NodeVisitor>
+
+ #include <components/sceneutil/lightmanager.hpp>
diff --git a/games/openmw/files/patch-files_gamecontrollerdb.txt b/games/openmw/files/patch-files_gamecontrollerdb.txt
new file mode 100644
index 000000000000..f0e36446eb0c
--- /dev/null
+++ b/games/openmw/files/patch-files_gamecontrollerdb.txt
@@ -0,0 +1,10 @@
+--- files/gamecontrollerdb.txt.orig 2015-11-24 02:42:35 UTC
++++ files/gamecontrollerdb.txt
+@@ -99,3 +99,7 @@ ff113133000000000000504944564944,SVEN X-
+ 05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
+ 05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
+ 030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8tart:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
++
++# FreeBSD
++30783030303520283229000000000000,X360 Controller,platform:FreeBSD,x:b13,a:b11,b:b12,y:b14,back:b5,guide:b4,guide:b10,start:b4,dpleft:b2,dpdown:b1,dpright:b3,dpup:b0,leftshoulder:b8,lefttrigger:b9,lefttrigger:a2,rightshoulder:b9,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
++30783030303520283029000000000000,X360 Controller,platform:FreeBSD,x:b13,a:b11,b:b12,y:b14,back:b5,guide:b4,guide:b10,start:b4,dpleft:b2,dpdown:b1,dpright:b3,dpup:b0,leftshoulder:b8,lefttrigger:b9,lefttrigger:a2,rightshoulder:b9,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
diff --git a/games/openmw/pkg-descr b/games/openmw/pkg-descr
new file mode 100644
index 000000000000..d721291c3173
--- /dev/null
+++ b/games/openmw/pkg-descr
@@ -0,0 +1,5 @@
+OpenMW is a recreation of the engine for the popular role-playing game
+Morrowind by Bethesda Softworks. You need to own and install the
+original game for OpenMW to work.
+
+WWW: https://openmw.org/
diff --git a/games/openmw/pkg-message b/games/openmw/pkg-message
new file mode 100644
index 000000000000..f0cded09e292
--- /dev/null
+++ b/games/openmw/pkg-message
@@ -0,0 +1,10 @@
+OpenMW requires a set of Morrowind data files. If you don't own a
+copy of Morrowind, you can buy and download one on e.g. Steam or GOG.
+Steam can be installed on FreeBSD/amd64 via emulators/i386-wine or on
+FreeBSD/i386 via emulators/wine. GOG is completely accessible via your
+web browser and you can simply download your purchase (making this the
+easiest of the two options).
+
+Once you have a set of Morrowind data files run openmw-launcher next.
+Answer YES to the question if you want to run the installation wizard.
+Follow the wizard's instruction to select your Morrowind data files.
diff --git a/games/openmw/pkg-plist b/games/openmw/pkg-plist
new file mode 100644
index 000000000000..a1eeb3886d57
--- /dev/null
+++ b/games/openmw/pkg-plist
@@ -0,0 +1,105 @@
+bin/bsatool
+bin/esmtool
+bin/openmw
+bin/openmw-essimporter
+bin/openmw-iniimporter
+bin/openmw-launcher
+bin/openmw-wizard
+%%ETCDIR%%/gamecontrollerdb.txt
+%%ETCDIR%%/openmw.cfg
+%%ETCDIR%%/settings-default.cfg
+%%ETCDIR%%/version
+share/appdata/openmw.appdata.xml
+share/applications/openmw.desktop
+%%DATADIR%%/resources/defaultfilters
+%%DATADIR%%/resources/mygui/DejaVuLGCSansMono.ttf
+%%DATADIR%%/resources/mygui/OpenMWResourcePlugin.xml
+%%DATADIR%%/resources/mygui/core.skin
+%%DATADIR%%/resources/mygui/core.xml
+%%DATADIR%%/resources/mygui/core_layouteditor.xml
+%%DATADIR%%/resources/mygui/openmw.png
+%%DATADIR%%/resources/mygui/openmw_alchemy_window.layout
+%%DATADIR%%/resources/mygui/openmw_book.layout
+%%DATADIR%%/resources/mygui/openmw_box.skin.xml
+%%DATADIR%%/resources/mygui/openmw_button.skin.xml
+%%DATADIR%%/resources/mygui/openmw_chargen_birth.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_class.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_class_description.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_create_class.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_generate_class_result.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_race.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_review.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_select_attribute.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_select_skill.layout
+%%DATADIR%%/resources/mygui/openmw_chargen_select_specialization.layout
+%%DATADIR%%/resources/mygui/openmw_companion_window.layout
+%%DATADIR%%/resources/mygui/openmw_confirmation_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_console.layout
+%%DATADIR%%/resources/mygui/openmw_console.skin.xml
+%%DATADIR%%/resources/mygui/openmw_container_window.layout
+%%DATADIR%%/resources/mygui/openmw_count_window.layout
+%%DATADIR%%/resources/mygui/openmw_debug_window.layout
+%%DATADIR%%/resources/mygui/openmw_debug_window.skin.xml
+%%DATADIR%%/resources/mygui/openmw_dialogue_window.layout
+%%DATADIR%%/resources/mygui/openmw_dialogue_window.skin.xml
+%%DATADIR%%/resources/mygui/openmw_edit.skin.xml
+%%DATADIR%%/resources/mygui/openmw_edit_effect.layout
+%%DATADIR%%/resources/mygui/openmw_edit_note.layout
+%%DATADIR%%/resources/mygui/openmw_enchanting_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_font.xml
+%%DATADIR%%/resources/mygui/openmw_hud.layout
+%%DATADIR%%/resources/mygui/openmw_hud_box.skin.xml
+%%DATADIR%%/resources/mygui/openmw_hud_energybar.skin.xml
+%%DATADIR%%/resources/mygui/openmw_infobox.layout
+%%DATADIR%%/resources/mygui/openmw_interactive_messagebox.layout
+%%DATADIR%%/resources/mygui/openmw_inventory_window.layout
+%%DATADIR%%/resources/mygui/openmw_itemselection_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_jail_screen.layout
+%%DATADIR%%/resources/mygui/openmw_journal.layout
+%%DATADIR%%/resources/mygui/openmw_journal.skin.xml
+%%DATADIR%%/resources/mygui/openmw_layers.xml
+%%DATADIR%%/resources/mygui/openmw_levelup_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_list.skin.xml
+%%DATADIR%%/resources/mygui/openmw_loading_screen.layout
+%%DATADIR%%/resources/mygui/openmw_magicselection_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_mainmenu.layout
+%%DATADIR%%/resources/mygui/openmw_mainmenu.skin.xml
+%%DATADIR%%/resources/mygui/openmw_map_window.layout
+%%DATADIR%%/resources/mygui/openmw_map_window.skin.xml
+%%DATADIR%%/resources/mygui/openmw_merchantrepair.layout
+%%DATADIR%%/resources/mygui/openmw_messagebox.layout
+%%DATADIR%%/resources/mygui/openmw_persuasion_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_pointer.xml
+%%DATADIR%%/resources/mygui/openmw_progress.skin.xml
+%%DATADIR%%/resources/mygui/openmw_quickkeys_menu.layout
+%%DATADIR%%/resources/mygui/openmw_quickkeys_menu_assign.layout
+%%DATADIR%%/resources/mygui/openmw_recharge_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_repair.layout
+%%DATADIR%%/resources/mygui/openmw_resources.xml
+%%DATADIR%%/resources/mygui/openmw_savegame_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_screen_fader.layout
+%%DATADIR%%/resources/mygui/openmw_screen_fader_hit.layout
+%%DATADIR%%/resources/mygui/openmw_scroll.layout
+%%DATADIR%%/resources/mygui/openmw_scroll.skin.xml
+%%DATADIR%%/resources/mygui/openmw_settings.xml
+%%DATADIR%%/resources/mygui/openmw_settings_window.layout
+%%DATADIR%%/resources/mygui/openmw_spell_buying_window.layout
+%%DATADIR%%/resources/mygui/openmw_spell_window.layout
+%%DATADIR%%/resources/mygui/openmw_spellcreation_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_stats_window.layout
+%%DATADIR%%/resources/mygui/openmw_text.skin.xml
+%%DATADIR%%/resources/mygui/openmw_text_input.layout
+%%DATADIR%%/resources/mygui/openmw_tooltips.layout
+%%DATADIR%%/resources/mygui/openmw_trade_window.layout
+%%DATADIR%%/resources/mygui/openmw_trainingwindow.layout
+%%DATADIR%%/resources/mygui/openmw_travel_window.layout
+%%DATADIR%%/resources/mygui/openmw_wait_dialog.layout
+%%DATADIR%%/resources/mygui/openmw_wait_dialog_progressbar.layout
+%%DATADIR%%/resources/mygui/openmw_windows.skin.xml
+%%DATADIR%%/resources/mygui/skins.xml
+%%DATADIR%%/resources/shaders/water_fragment.glsl
+%%DATADIR%%/resources/shaders/water_nm.png
+%%DATADIR%%/resources/shaders/water_vertex.glsl
+%%DATADIR%%/resources/version
+share/pixmaps/openmw.png
+@dir %%DATADIR%%/data