The purpose of tools, by definition, is to perform or at least help with some kind of work. When it comes to development tools, as with all software, one can quickly lose focus of the work the tool was to be purposed for! Especially after a few months of development, or even a few years!
That is one advantage quick 'n dirty "hack job" tools actually have - they strike right at the purpose and help you get your work done. They may be crude, and you wouldn't want someone who doesn't know all the "don't do that"s to get all click-happy, but without question they will help you get your game finished much faster.
On the other hand, it limits their re-usability, and even re-purposing them can actually be more time consuming and inefficient than starting (mostly) from scratch on a new tool.
So, if we go back 8 months from today, here I am, quite satisfied with a 2d skeletal animation tool I have been working on. I've been working on it for about a year and a half at this point, and I'm finally ready to make a little game with it!! WHOO! And then I actually used it.
Don't blind yourself because it's easier - it's NOT
Okay so this software works, and it works quite well, and IK is working well, and animations are being created, and then I put it in the game, and ... oh. The game? Yeah. The game. The tool was not meant to make animations (only). Plenty of software makes animations. Toon boom anime 3000 and all that stuff. And they do a pretty good job at it. This tool was meant to make animations... for games. Sprite animations, 2d skeletal animations, fully animated levels a la Rayman, you name it. ... for games!!!!
I had lost sight of that. I put the animation in the game, and would ya know it, I couldn't do collision detection. I could hack around that though. But then I couldn't trigger events in the animation. How do we know when the jump animation is on the ground? How to know when the punch animation is capable of causing damage? Should I hard code it? Eek! What happened to my tool?
I was ready to release it to the world, ready for other people to be able to animate their characters, their games, their worlds. And for free, at that! Similar software, Spriter, came out eventually, and it looked (and still looks) promising, but has fallen to the wayside, for now. But I had to take a step back and remember what I was making a tool for. It was then I realized if I didn't make internal changes now, every feature it needed would be hacked on to a (now obvious) defective base and would inevitably one day explode. *sigh*
The Hard Road
So over the last very many months it has undergone a massive internal transformation. I just finished re-factoring the entire action system into the undo/redo command system I spoke of before, as well as a number of other time consuming internal improvements for program structure to prepare it to do useful things. 8 months later, Basis could do less than it could before, was more buggy, and had nothing new to show for it besides a window that says "history" with unlimited undo/redo.
But it was fantastic.
6 weeks later... yes, 6 weeks later, today, it has gone from "will this ever get done or at least back to where it was before?" to "wow this is awesome!". So I will show some screenshots (or it didn't happen right), but just remember, when you're making something general purpose that is supposed to be useful and intuitive for everyone, you will be challenged. Your engineering skills, psychological analysis skills, deduction skills, design skills, coding skills, and more skills will all be put to the test. It will tax your brain. And you might even find you got it wrong after all that! But through it all, try not to lose focus of what your purpose is. Always build towards that!
Evidence of Hard Work!
"Attach" bones - these do not work as actual bones, as they are more of a static extension. But they do more than simple "parenting". They solve a whole list of problems, actually. (attach hats/items, connect skins while limiting rotation/scaling, mark positions, simple parenting, etc)
Document notes and image - a simple thing but useful none the less in the content creation stage
Animated OBB Collision - define multiple states for the collision shapes too, so you know what is "hot", "normal", or whatever else you can imagine
Also events! Define any arbitrary events with variables, trigger-able per frame.
Animated AABB Collision - If OBB is for skeletal animations, this is purposed for simple sprite animations. Tools for both workflows are similar so why not be in the same software package?
I showed texture auto-detection and texture packing in my last entry. The gif animations weren't that great (sorry), but I think they got the point across.
Animated Z Order - It's subtle but notice the tail go behind and in front of the head as it swings (don't be harsh, it is a still WIP animation)
More coming soon! Yay!