OpenMW 0.41.0

Anything related to PR, release planning and any other non-technical idea how to move the project forward should be discussed here.
Locked
Allofich
Posts: 104
Joined: 28 May 2016, 12:50

Re: OpenMW 0.41.0

Post 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.
User avatar
Atahualpa
Posts: 1176
Joined: 09 Feb 2016, 20:03

Re: OpenMW 0.41.0

Post by Atahualpa »

Strange... :?
Anyway, I will adjust my wording. The final versions should be available tonight.
User avatar
MiroslavR
Posts: 156
Joined: 12 Feb 2014, 17:45

Re: OpenMW 0.41.0

Post 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
User avatar
Atahualpa
Posts: 1176
Joined: 09 Feb 2016, 20:03

Re: OpenMW 0.41.0

Post by Atahualpa »

Just for your information:

The final videos have been uploaded -- the review process is limited to the team forums though.
User avatar
raevol
Posts: 3093
Joined: 07 Aug 2011, 01:12
Location: Caldera

Re: OpenMW 0.41.0

Post 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!
User avatar
psi29a
Posts: 5355
Joined: 29 Sep 2011, 10:13
Location: Belgium
Gitlab profile: https://gitlab.com/psi29a/
Contact:

Re: OpenMW 0.41.0

Post 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))
User avatar
raevol
Posts: 3093
Joined: 07 Aug 2011, 01:12
Location: Caldera

Re: OpenMW 0.41.0

Post 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.
User avatar
Jyby
Posts: 408
Joined: 10 Dec 2013, 04:16

Re: OpenMW 0.41.0

Post 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
User avatar
Ace (SWE)
Posts: 887
Joined: 15 Aug 2011, 14:56

Re: OpenMW 0.41.0

Post 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
User avatar
psi29a
Posts: 5355
Joined: 29 Sep 2011, 10:13
Location: Belgium
Gitlab profile: https://gitlab.com/psi29a/
Contact:

Re: OpenMW 0.41.0

Post 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.
Locked