[strikethru]Thanks Lucid, unfortunately that didn't work.[/strikethru]
I know that characterinfo is being used on the "root" bone for sure - a debugging sessions showed that all the other bones have the -1.0 scaley propagated.
I think it has to be a problem in the bone transformation stage but I'm not sure if it's a problem with my code or the psuedocode.
This is some Forth code. I know it's unlikely, but see if you can make some sense of it. (mini cheatsheet: keywords and symbols are executed from left to right with no exception, ( ) just means a comment, ! means =, @ means "fetch value", and p is short for fixed-point)
: unmapFromParent ( struct = spacialinfo ; parentinfo destinfo -- ) locals| dest parent | angle @ scale 2@ p* 0< if 360.0 swap - then parent >angle @ + dest >angle ! scale 2@ parent >scale 2@ 2p* dest >scale 2! ( a @ parent >a @ p* dest >a ! ) parent >px 2@ px 2@ or if px 2@ parent >scale 2@ 2p* parent >angle @ 2rotate 2+ then dest >px 2! pivot 2@ dest >pivot 2! ;
I'd show you the bone transform code but it bears pretty much no resemblance to the pseudocode.
edit: oh, oops! I was supposed to check the parent scale wasn't I. standby.
edit2: OK this is what happened when i fixed that. ScaleY=1: https://www.dropbox.com/s/mmvutqlf1xbwi ... .13.04.png ScaleY=-1: https://www.dropbox.com/s/zjrq9zhuiat06 ... .13.06.png
I'm starting to wonder if I'm supposed to be using ScaleY ... shouldn't ScaleX be the one? I only did that because the source animations are "rotated" and I can't even remember what my logic was there.
edit3: Success. https://www.dropbox.com/s/3506il73pt613 ... .18.24.png
Indeed I was supposed to be using ScaleX all along and your fix seems to have worked.