Problem statement
My team and I are moving from Cocos2d-x to the Axmol fork for our most popular game, due to Cocos2d-x dropping support and maintenance back in 2019. Several kind folks have forked Cocos2d-x and continue to support it with bug fixes, updates, and improvements.
Now to get to the point, Axmol is using the Spine 4.1 runtimes, but all of our old spine files were exported with 3.8.75. So we've had to begin re-exporting all of our old json files with Spine to update them to version 4.1.24. This was going smoothly until we got to a specific character who uses a transform constraint...
When we attempt to load this character's .json file, we load up the atlas, and first several animations without issue, but then we attempt to load an animation called "recover" which then causes a failed assertion at line #162 of Vector.h in the Spine C++ runtime files.
We removed any transform constraints from this animation, and re-exported the file again after using Cleanup Animation for the "recover" animation. Looking in the .json file I can't see any transform constraints set to this animation at all, but the failed assertion continues to be hit, which then causes the game to crash.
Any help solving this would be greatly appreciated. We're at a loss as to what's happening here at this point, especially since there doesn't seem to be anything pointing to any transform constraint curves in this animation.
I can provide the spine files upon request if you think it will help us to solve this issue.
Thank you for your time.
Runtime information
Cocos2d-x & C++ v4.1
Stack Trace
#4 0x0000000103cb5da0 in spine::Vector<float>::operator[](unsigned long) at [...]/spine/Vector.h:162
#5 0x0000000103cca02c in spine::CurveTimeline::setBezier(unsigned long, unsigned long, float, float, float, float, float, float, float, float, float) at [...]/spine/CurveTimeline.cpp:65
#6 0x0000000103c97e94 in spine::SkeletonJson::setBezier(spine::CurveTimeline*, int, int, int, float, float, float, float, float, float, float, float) at [...]/spine/SkeletonJson.cpp:798
#7 0x0000000103c97fe0 in spine::SkeletonJson::readCurve(spine::Json*, spine::CurveTimeline*, int, int, int, float, float, float, float, float) at [...]/spine/SkeletonJson.cpp:816
#8 0x0000000103c9587c in spine::SkeletonJson::readAnimation(spine::Json*, spine::SkeletonData*) at [...]spine/SkeletonJson.cpp:1178
#9 0x0000000103c90d1c in spine::SkeletonJson::readSkeletonData(char const*) at [...]/spine/SkeletonJson.cpp:771
#10 0x0000000103c8c19c in spine::SkeletonJson::readSkeletonDataFile(spine::String const&) at [...]/spine/SkeletonJson.cpp:125
#11 0x0000000103c9a140 in spine::SkeletonRenderer::initWithJsonFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, float) at [...]/spine/SkeletonRenderer.cpp:186
#12 0x0000000103cdcc94 in spine::SkeletonAnimation::createWithJsonFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, float) at [...]/spine/SkeletonAnimation.cpp:91