Merge branch 'master' into fix_quickkey_segfalt

pull/456/head
Finbar Crago 7 years ago
commit cac6d59140

@ -1,26 +1,26 @@
# use the official gcc image, based on debian stages:
# can use verions as well, like gcc:5.2 - build
# see https://hub.docker.com/_/gcc/
image: gcc Debian:
tags:
cache: - docker
key: apt-cache - linux
paths: image: gcc
- apt-cache/ cache:
key: apt-cache
before_script: paths:
- export APT_CACHE_DIR=`pwd`/apt-cache && mkdir -pv $APT_CACHE_DIR - apt-cache/
- apt-get update -yq before_script:
- apt-get -o dir::cache::archives="$APT_CACHE_DIR" install -y cmake libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libsdl2-dev libqt4-dev libopenal-dev libopenscenegraph-3.4-dev libunshield-dev libtinyxml-dev - export APT_CACHE_DIR=`pwd`/apt-cache && mkdir -pv $APT_CACHE_DIR
# - apt-get install -y libmygui-dev libbullet-dev # to be updated to latest below because stretch is too old - apt-get update -yq
- curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet-dev_2.87+dfsg-2_amd64.deb -o libbullet-dev_2.87+dfsg-2_amd64.deb - apt-get -o dir::cache::archives="$APT_CACHE_DIR" install -y cmake libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libsdl2-dev libqt4-dev libopenal-dev libopenscenegraph-3.4-dev libunshield-dev libtinyxml-dev
- curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet2.87_2.87+dfsg-2_amd64.deb -o libbullet2.87_2.87+dfsg-2_amd64.deb # - apt-get install -y libmygui-dev libbullet-dev # to be updated to latest below because stretch is too old
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb -o libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb - curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet-dev_2.87+dfsg-2_amd64.deb -o libbullet-dev_2.87+dfsg-2_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb -o libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb - curl http://ftp.us.debian.org/debian/pool/main/b/bullet/libbullet2.87_2.87+dfsg-2_amd64.deb -o libbullet2.87_2.87+dfsg-2_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui-dev_3.2.2+dfsg-1_amd64.deb -o libmygui-dev_3.2.2+dfsg-1_amd64.deb - curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb -o libmygui.openglplatform0debian1v5_3.2.2+dfsg-1_amd64.deb
- dpkg --ignore-depends=libmygui.ogreplatform0debian1v5 -i *.deb - curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb -o libmyguiengine3debian1v5_3.2.2+dfsg-1_amd64.deb
- curl http://ftp.us.debian.org/debian/pool/main/m/mygui/libmygui-dev_3.2.2+dfsg-1_amd64.deb -o libmygui-dev_3.2.2+dfsg-1_amd64.deb
build: - dpkg --ignore-depends=libmygui.ogreplatform0debian1v5 -i *.deb
stage: build stage: build
script: script:
- cores_to_use=$((`nproc`-2)); if (( $cores_to_use < 1 )); then cores_to_use=1; fi - cores_to_use=$((`nproc`-2)); if (( $cores_to_use < 1 )); then cores_to_use=1; fi
@ -30,13 +30,17 @@ build:
artifacts: artifacts:
paths: paths:
- build/artifacts/ - build/artifacts/
# depending on your build setup it's most likely a good idea to cache outputs to reduce the build time MacOS:
cache: tags:
- macos
- xcode
stage: build
allow_failure: true
script:
- rm -fr build/* # remove anything in the build directory
- CI/before_install.osx.sh
- CI/before_script.osx.sh
- cd build; make -j2 package
artifacts:
paths: paths:
- "*.o" - build/OpenMW-*.dmg
# TODO: run tests using the binary built before
#test:
# stage: test
# script:
# - ls

@ -15,7 +15,6 @@ env:
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key # via the "travis encrypt" command using the project repo's public key
- secure: "jybGzAdUbqt9vWR/GEnRd96BgAi/7Zd1+2HK68j/i/8+/1YH2XxLOy4Jv/DUBhBlJIkxs/Xv8dRcUlFOclZDHX1d/9Qnsqd3oUVkD7k1y7cTOWy9TBQaE/v/kZo3LpzA3xPwwthrb0BvqIbOfIELi5fS5s8ba85WFRg3AX70wWE=" - secure: "jybGzAdUbqt9vWR/GEnRd96BgAi/7Zd1+2HK68j/i/8+/1YH2XxLOy4Jv/DUBhBlJIkxs/Xv8dRcUlFOclZDHX1d/9Qnsqd3oUVkD7k1y7cTOWy9TBQaE/v/kZo3LpzA3xPwwthrb0BvqIbOfIELi5fS5s8ba85WFRg3AX70wWE="
- macos_qt_formula=qt
addons: addons:
apt: apt:
sources: sources:

@ -22,7 +22,7 @@
Bug #4036: Weird behaviour of AI packages if package target has non-unique ID Bug #4036: Weird behaviour of AI packages if package target has non-unique ID
Bug #4047: OpenMW not reporting its version number in MacOS; OpenMW-CS not doing it fully Bug #4047: OpenMW not reporting its version number in MacOS; OpenMW-CS not doing it fully
Bug #4125: OpenMW logo cropped on bugtracker Bug #4125: OpenMW logo cropped on bugtracker
Bug #4215: OpenMW shows book text after last <BR> tag Bug #4215: OpenMW shows book text after last EOL tag
Bug #4221: Characters get stuck in V-shaped terrain Bug #4221: Characters get stuck in V-shaped terrain
Bug #4251: Stationary NPCs do not return to their position after combat Bug #4251: Stationary NPCs do not return to their position after combat
Bug #4286: Scripted animations can be interrupted Bug #4286: Scripted animations can be interrupted
@ -49,6 +49,7 @@
Bug #4461: "Open" spell from non-player caster isn't a crime Bug #4461: "Open" spell from non-player caster isn't a crime
Bug #4469: Abot Silt Striders Model turn 90 degrees on horizontal Bug #4469: Abot Silt Striders Model turn 90 degrees on horizontal
Bug #4471: Retrieve SDL window settings instead of using magic numbers Bug #4471: Retrieve SDL window settings instead of using magic numbers
Bug #4474: No fallback when getVampireHead fails
Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results
Feature #4222: 360° screenshots Feature #4222: 360° screenshots
Feature #4256: Implement ToggleBorders (TB) console command Feature #4256: Implement ToggleBorders (TB) console command

@ -4,7 +4,7 @@ brew update
brew outdated cmake || brew upgrade cmake brew outdated cmake || brew upgrade cmake
brew outdated pkgconfig || brew upgrade pkgconfig brew outdated pkgconfig || brew upgrade pkgconfig
brew install $macos_qt_formula brew install qt
curl https://downloads.openmw.org/osx/dependencies/openmw-deps-100d2e0.zip -o ~/openmw-deps.zip curl -fSL -R -J https://downloads.openmw.org/osx/dependencies/openmw-deps-100d2e0.zip -o ~/openmw-deps.zip
unzip ~/openmw-deps.zip -d /private/tmp/openmw-deps > /dev/null unzip -o ~/openmw-deps.zip -d /private/tmp/openmw-deps > /dev/null

@ -4,7 +4,7 @@ export CXX=clang++
export CC=clang export CC=clang
DEPENDENCIES_ROOT="/private/tmp/openmw-deps/openmw-deps" DEPENDENCIES_ROOT="/private/tmp/openmw-deps/openmw-deps"
QT_PATH=`brew --prefix $macos_qt_formula` QT_PATH=`brew --prefix qt`
mkdir build mkdir build
cd build cd build

@ -31,13 +31,16 @@ namespace MWGui
boost::algorithm::replace_all(mText, "\r", ""); boost::algorithm::replace_all(mText, "\r", "");
// vanilla game does not show any text after last <BR> tag. // vanilla game does not show any text after the last EOL tag.
const std::string lowerText = Misc::StringUtils::lowerCase(mText); const std::string lowerText = Misc::StringUtils::lowerCase(mText);
int index = lowerText.rfind("<br>"); int brIndex = lowerText.rfind("<br>");
if (index == -1) int pIndex = lowerText.rfind("<p>");
if (brIndex == pIndex)
mText = ""; mText = "";
else if (brIndex > pIndex)
mText = mText.substr(0, brIndex+4);
else else
mText = mText.substr(0, index+4); mText = mText.substr(0, pIndex+3);
registerTag("br", Event_BrTag); registerTag("br", Event_BrTag);
registerTag("p", Event_PTag); registerTag("p", Event_PTag);

@ -158,7 +158,9 @@ namespace MWGui
getWidget(mCrosshair, "Crosshair"); getWidget(mCrosshair, "Crosshair");
LocalMapBase::init(mMinimap, mCompass, Settings::Manager::getInt("local map hud widget size", "Map"), Settings::Manager::getInt("local map cell distance", "Map")); int mapSize = std::max(1, Settings::Manager::getInt("local map hud widget size", "Map"));
int cellDistance = std::max(1, Settings::Manager::getInt("local map cell distance", "Map"));
LocalMapBase::init(mMinimap, mCompass, mapSize, cellDistance);
mMainWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWorldClicked); mMainWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWorldClicked);
mMainWidget->eventMouseMove += MyGUI::newDelegate(this, &HUD::onWorldMouseOver); mMainWidget->eventMouseMove += MyGUI::newDelegate(this, &HUD::onWorldMouseOver);

@ -679,7 +679,9 @@ namespace MWGui
mEventBoxLocal->eventMouseButtonPressed += MyGUI::newDelegate(this, &MapWindow::onDragStart); mEventBoxLocal->eventMouseButtonPressed += MyGUI::newDelegate(this, &MapWindow::onDragStart);
mEventBoxLocal->eventMouseButtonDoubleClick += MyGUI::newDelegate(this, &MapWindow::onMapDoubleClicked); mEventBoxLocal->eventMouseButtonDoubleClick += MyGUI::newDelegate(this, &MapWindow::onMapDoubleClicked);
LocalMapBase::init(mLocalMap, mPlayerArrowLocal, Settings::Manager::getInt("local map widget size", "Map"), Settings::Manager::getInt("local map cell distance", "Map")); int mapSize = std::max(1, Settings::Manager::getInt("local map widget size", "Map"));
int cellDistance = std::max(1, Settings::Manager::getInt("local map cell distance", "Map"));
LocalMapBase::init(mLocalMap, mPlayerArrowLocal, mapSize, cellDistance);
mGlobalMap->setVisible(mGlobal); mGlobalMap->setVisible(mGlobal);
mLocalMap->setVisible(!mGlobal); mLocalMap->setVisible(!mGlobal);

@ -416,6 +416,7 @@ void NpcAnimation::updateNpcBase()
const ESM::Race *race = store.get<ESM::Race>().find(mNpc->mRace); const ESM::Race *race = store.get<ESM::Race>().find(mNpc->mRace);
bool isWerewolf = (mNpcType == Type_Werewolf); bool isWerewolf = (mNpcType == Type_Werewolf);
bool isVampire = (mNpcType == Type_Vampire); bool isVampire = (mNpcType == Type_Vampire);
bool isFemale = !mNpc->isMale();
if (isWerewolf) if (isWerewolf)
{ {
@ -425,8 +426,9 @@ void NpcAnimation::updateNpcBase()
else else
{ {
mHeadModel = ""; mHeadModel = "";
if (isVampire) // FIXME: fall back to regular head when getVampireHead fails? const std::string& vampireHead = getVampireHead(mNpc->mRace, isFemale);
mHeadModel = getVampireHead(mNpc->mRace, mNpc->mFlags & ESM::NPC::Female); if (isVampire && !vampireHead.empty())
mHeadModel = vampireHead;
else if (!mNpc->mHead.empty()) else if (!mNpc->mHead.empty())
{ {
const ESM::BodyPart* bp = store.get<ESM::BodyPart>().search(mNpc->mHead); const ESM::BodyPart* bp = store.get<ESM::BodyPart>().search(mNpc->mHead);
@ -448,7 +450,6 @@ void NpcAnimation::updateNpcBase()
} }
bool isBeast = (race->mData.mFlags & ESM::Race::Beast) != 0; bool isBeast = (race->mData.mFlags & ESM::Race::Beast) != 0;
bool isFemale = !mNpc->isMale();
std::string smodel; std::string smodel;
if (mViewMode != VM_FirstPerson) if (mViewMode != VM_FirstPerson)

@ -240,6 +240,10 @@ namespace MWScript
char type = declarations.getType (iter->first); char type = declarations.getType (iter->first);
int index2 = declarations.getIndex (iter->first); int index2 = declarations.getIndex (iter->first);
// silently ignore locals that don't exist anymore
if (type == ' ' || index2 == -1)
continue;
try try
{ {
switch (type) switch (type)
@ -247,8 +251,6 @@ namespace MWScript
case 's': mShorts.at (index2) = iter->second.getInteger(); break; case 's': mShorts.at (index2) = iter->second.getInteger(); break;
case 'l': mLongs.at (index2) = iter->second.getInteger(); break; case 'l': mLongs.at (index2) = iter->second.getInteger(); break;
case 'f': mFloats.at (index2) = iter->second.getFloat(); break; case 'f': mFloats.at (index2) = iter->second.getFloat(); break;
// silently ignore locals that don't exist anymore
} }
} }
catch (...) catch (...)

@ -387,7 +387,7 @@ private:
OpenAL_SoundStream::OpenAL_SoundStream(ALuint src, DecoderPtr decoder) OpenAL_SoundStream::OpenAL_SoundStream(ALuint src, DecoderPtr decoder)
: mSource(src), mCurrentBufIdx(0), mFormat(AL_NONE), mSampleRate(0) : mSource(src), mCurrentBufIdx(0), mFormat(AL_NONE), mSampleRate(0)
, mBufferSize(0), mFrameSize(0), mSilence(0), mDecoder(std::move(decoder)) , mBufferSize(0), mFrameSize(0), mSilence(0), mDecoder(std::move(decoder))
, mLoudnessAnalyzer(nullptr) , mLoudnessAnalyzer(nullptr), mIsFinished(true)
{ {
mBuffers.fill(0); mBuffers.fill(0);
} }

@ -1179,8 +1179,8 @@ namespace MWWorld
} }
else else
{ {
bool currCellActive = mWorldScene->isCellActive(*currCell); bool currCellActive = currCell && mWorldScene->isCellActive(*currCell);
bool newCellActive = mWorldScene->isCellActive(*newCell); bool newCellActive = newCell && mWorldScene->isCellActive(*newCell);
if (!currCellActive && newCellActive) if (!currCellActive && newCellActive)
{ {
newPtr = currCell->moveTo(ptr, newCell); newPtr = currCell->moveTo(ptr, newCell);

@ -83,7 +83,12 @@ struct Land
struct LandData struct LandData
{ {
LandData() LandData()
: mDataLoaded(0) : mHeightOffset(0)
, mMinHeight(0)
, mMaxHeight(0)
, mUnk1(0)
, mUnk2(0)
, mDataLoaded(0)
{ {
} }

@ -36,7 +36,10 @@ struct Pathgrid
Point& operator=(const float[3]); Point& operator=(const float[3]);
Point(const float[3]); Point(const float[3]);
Point(); Point();
Point(int x, int y, int z) : mX(x), mY(y), mZ(z) {} Point(int x, int y, int z)
: mX(x), mY(y), mZ(z)
, mAutogenerated(0), mConnectionNum(0), mUnknown(0)
{}
}; // 16 bytes }; // 16 bytes
struct Edge // path grid edge struct Edge // path grid edge

@ -34,7 +34,9 @@ namespace ESM
ESM::AnimationState mAnimationState; ESM::AnimationState mAnimationState;
ObjectState() : mHasCustomState(true), mVersion(0) ObjectState()
: mHasLocals(0), mEnabled(0), mCount(0)
, mFlags(0), mHasCustomState(true), mVersion(0)
{} {}
/// @note Does not load the CellRef ID, it should already be loaded before calling this method /// @note Does not load the CellRef ID, it should already be loaded before calling this method

@ -24,6 +24,8 @@ namespace ESMTerrain
}; };
LandObject::LandObject() LandObject::LandObject()
: mLand(nullptr)
, mLoadFlags(0)
{ {
} }

@ -61,6 +61,7 @@ QuadTreeNode::QuadTreeNode(QuadTreeNode* parent, ChildDirection direction, float
, mValidBounds(false) , mValidBounds(false)
, mSize(size) , mSize(size)
, mCenter(center) , mCenter(center)
, mViewDataMap(nullptr)
{ {
for (unsigned int i=0; i<4; ++i) for (unsigned int i=0; i<4; ++i)
mNeighbours[i] = 0; mNeighbours[i] = 0;

@ -8,6 +8,7 @@ namespace Gui
WindowCaption::WindowCaption() WindowCaption::WindowCaption()
: mLeft(NULL) : mLeft(NULL)
, mRight(NULL) , mRight(NULL)
, mClient(NULL)
{ {
} }

Loading…
Cancel
Save