Page 18 of 22

Re: OpenMW 0.41.0

Posted: 21 Dec 2016, 16:08
by Allofich
The fix is that those spells are now played over a duration of 1, rather than being instant. This is the same as in vanilla. For example, with Cure Common Disease, you will be constantly applied with the cure effect for 1 second. Even if a common disease was inflicted on you during that second, it would be cured since there is a duration now. Since it lasts a second now, the icon also persists for a second, rather than disappearing instantly as it did when the spell was instant.

I don't know why the potion showed with 1 second in OpenMW 0.40.0, but I guess it was just showing that but it wasn't really what was happening.

Re: OpenMW 0.41.0

Posted: 21 Dec 2016, 16:24
by Atahualpa
Strange... :?
Anyway, I will adjust my wording. The final versions should be available tonight.

Re: OpenMW 0.41.0

Posted: 21 Dec 2016, 20:35
by MiroslavR
What you see is the placeholder duration that comes from content files (TES Construction Set sets it to 1 sec). This duration is not respected for instant effects. Also, the reason why the effect wasn't applied and removed immediately was because of the game being in a paused state.

Cure X effects are a Morrowind oddity. They are internally flagged as "having no duration" (instant), yet for some reason vanilla MW respects the placeholder duration and treats them as non-instant.

On the other hand, TES Construction Set considers them instant, disallowing the user from editing their duration:
cure.png

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 01:05
by Atahualpa
Just for your information:

The final videos have been uploaded -- the review process is limited to the team forums though.

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 04:36
by raevol
Double checking my github attempt before I call for release packages... please stand by.

Edit: scrawl says I did ok! Please build release packages!

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 09:20
by psi29a
Looks like when you tagged for release, it triggered coverty to run a scan, can someone validate if these are false positives, actual issues and how serious?

Code: Select all

** CID 155091:  Control flow issues  (UNREACHABLE)
/apps/openmw/mwworld/inventorystore.cpp: 406 in MWWorld::InventoryStore::autoEquip(const MWWorld::Ptr &)()


________________________________________________________________________________________________________
*** CID 155091:  Control flow issues  (UNREACHABLE)
/apps/openmw/mwworld/inventorystore.cpp: 406 in MWWorld::InventoryStore::autoEquip(const MWWorld::Ptr &)()
400             if (weapon != end() && weapon->getClass().canBeEquipped(*weapon, actor).first)
401             {
402                 std::pair<std::vector<int>, bool> itemsSlots =
403                     weapon->getClass().getEquipmentSlots (*weapon);
404
405                 for (std::vector<int>::const_iterator slot (itemsSlots.first.begin());
>>>     CID 155091:  Control flow issues  (UNREACHABLE)
>>>     Since the loop increment "++slot;" is unreachable, the loop body will never execute more than once.
406                     slot!=itemsSlots.first.end(); ++slot)
407                 {
408                     if (!itemsSlots.second)
409                     {
410                         if (weapon->getRefData().getCount() > 1)
411                         {

** CID 155090:  API usage errors  (SWAPPED_ARGUMENTS)


________________________________________________________________________________________________________
*** CID 155090:  API usage errors  (SWAPPED_ARGUMENTS)
/apps/openmw/mwmechanics/pathfinding.cpp: 87 in MWMechanics::getZAngleToDir(const osg::Vec3f &)()
81             float z = static_cast<float>(a.mZ - b.mZ);
82             return sqrt(x * x + y * y + z * z);
83         }
84
85         float getZAngleToDir(const osg::Vec3f& dir)
86         {
>>>     CID 155090:  API usage errors  (SWAPPED_ARGUMENTS)
>>>     The positions of arguments in the call to "atan2" do not match the ordering of the parameters:
* "dir->x()" is passed to "__y"
* "dir->y()" is passed to "__x"
87             return std::atan2(dir.x(), dir.y());
88         }
89
90         float getXAngleToDir(const osg::Vec3f& dir)
91         {
92             float dirLen = dir.length();

** CID 155089:  Null pointer dereferences  (NULL_RETURNS)
/apps/openmw/mwphysics/physicssystem.cpp: 998 in MWPhysics::PhysicsSystem::canMoveToWaterSurface(const MWWorld::ConstPtr &, float)()


________________________________________________________________________________________________________
*** CID 155089:  Null pointer dereferences  (NULL_RETURNS)
/apps/openmw/mwphysics/physicssystem.cpp: 998 in MWPhysics::PhysicsSystem::canMoveToWaterSurface(const MWWorld::ConstPtr &, float)()
992                     return false;
993             }
994         }
995
996         bool PhysicsSystem::canMoveToWaterSurface(const MWWorld::ConstPtr &actor, const float waterlevel)
997         {
>>>     CID 155089:  Null pointer dereferences  (NULL_RETURNS)
>>>     Assigning: "physicActor" = null return value from "getActor".
998             const Actor* physicActor = getActor(actor);
999             const float halfZ = physicActor->getHalfExtents().z();
1000             const osg::Vec3f actorPosition = physicActor->getPosition();
1001             const osg::Vec3f startingPosition(actorPosition.x(), actorPosition.y(), actorPosition.z() + halfZ);
1002             const osg::Vec3f destinationPosition(actorPosition.x(), actorPosition.y(), waterlevel + halfZ);
1003             ActorTracer tracer;

** CID 155088:  Integer handling issues  (DIVIDE_BY_ZERO)
/apps/openmw/mwgui/formatting.cpp: 431 in MWGui::Formatting::TextElement::pageSplit()()


________________________________________________________________________________________________________
*** CID 155088:  Integer handling issues  (DIVIDE_BY_ZERO)
/apps/openmw/mwgui/formatting.cpp: 431 in MWGui::Formatting::TextElement::pageSplit()()
425             }
426
427             int TextElement::pageSplit()
428             {
429                 // split lines
430                 const int lineHeight = currentFontHeight();
>>>     CID 155088:  Integer handling issues  (DIVIDE_BY_ZERO)
>>>     In expression "(this->mPaginator->getStartTop() + this->mPaginator->getPageHeight() - this->mPaginator->getCurrentTop()) / lineHeight", division by expression "lineHeight" which may be zero has undefined behavior.
431                 unsigned int lastLine = (mPaginator.getStartTop() + mPaginator.getPageHeight() - mPaginator.getCurrentTop()) / lineHeight;
432                 int ret = mPaginator.getCurrentTop() + lastLine * lineHeight;
433
434                 // first empty lines that would go to the next page should be ignored
435                 // unfortunately, getLineInfo method won't be available until 3.2.2
436     #if (MYGUI_VERSION >= MYGUI_DEFINE_VERSION(3, 2, 2))

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 10:38
by raevol
:shock: :? :cry:

I don't know how you guys do this on the regular, messing with the repo causes me so much anxiety haha.

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 12:30
by Jyby
CID 155091 - Never reach `++slot` because slot!=itemsSlots.first.end() is true according to coverty. Essentially coverty thinks the loop just executes for one iteration. Is this correct? Perhaps it was done to check if itemsSlots.first() exists at all. Weird use of iterator here.

CID 155090 - This one appears to be a coders misuse of atan2, which expects double y, double x, not double x, double y. I haven't visually inspected its current usage though. http://www.cplusplus.com/reference/cmath/atan2/

CID 155089 - Missing null ptr check on getActor(), line 1 of canMoveToWaterSurface()

CID 155088 - Missing zero integer check/run-time initialization of integer, causing coverty to be concerned about divide by zero

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 13:28
by Ace (SWE)
For my own five cents; The release has already been tagged, which means it's free for the various distros to prepare release packages.
None of the coverity issues sound important enough to start messing with the release process either. Though I'm curious how the atan2 issue slunk through, considering the output it should be quite noticeable, but people haven't complained about the pathfinding?

Either way, here's a pair of release packages for Windows, from the tag;
32-bit
64-bit

Re: OpenMW 0.41.0

Posted: 22 Dec 2016, 14:06
by psi29a
Well, when I have time I can take care of some of those but it should be validated first that the atan wasn't expressly done.