DEVELOPMENT
755
Dreamons - Anima... tions!
1 year ago2,224 words
Here's some rambling about the technicalities of how I create game animations that you probably don't understand or care about!! Also, I have a protagonist and story mostly sorted out now.
I've been really productive this week! Lots of focused work on this project consistently every day. I'm eager and excited to do it, too.
(Though I know there's a ton of other stuff I
should be focusing on...)
I've roughly decided on the story I want the game to tell. I wrote about it in more (but hopefully not spoiler-filled) detail on
∞ my Patreon ∞ (where it got almost no feedback, so hopefully that doesn't mean EVERYONE HATES IT), but here's the gist:
The mental world in which the game is set is ruled over by a diminutive being called
Anima, who represents the dreamer's 'inner child' or true self. During the intro, Anima would be overthrown by the elemental dreamons, representing childhood innocence being kicked out by worries about the wider world and negative thoughts in general.
You'd then take control of Anima in a quest to earn your throne back.
Being a representation of pure imagination and creativity, Anima can freely change forms, as I described in previous posts. So you're not stuck playing as something child-like. Mostly it was a decision born of being uncomfortable about giving Anima a default sex and not wanting to add some androgynous adult form.
I still have a lot of story stuff to sort out, but I spent most of the week working on something else I've been wanting to add for ages: a custom simplified animation system which I can use to create animations within Unity.
I've been animating in 3D for several years now, and I've learned a lot about what I like and don't like. I greatly dislike animating in Blender - which I otherwise like a lot for 3D modelling - because it's designed to support far more complex animations than I'd ever need, and as such has many details, features, etc that are more of a nuisance than a value to me. I tend to dread whenever I have use it to make animations for my games. (Plus I'm mostly self-taught, so my approach probably isn't conventional.)
This game's characters have code-generated textures, and their various body parts are loaded in by code too. None of that can carry over to Blender, though, so I have to animate models that look like this:
Clothing pieces are body parts are separate models, all sharing the same space and rig and exported together to be loaded in as needed. I either need to animate the model with all of them showing and ugly-ly overlapping, or manually hide them and hope I don't forget to un-hide them when exporting later.
As you may or may not know, 3D models have a rig made up of 'bones', and to animate them, you have to assign
keyframes that store the position, rotation, and scale of bones at certain points. Between keyframes, the position (and rotation and scale) of the bones are determined procedurally (tweened), usually according to an
easing curve.
I used to use Flash a lifetime ago, and that - from what I can hazily recall - didn't have much in the way of options with easing curves for tweening. I think it allowed you to ease in or out and that's about it? By contrast, Blender uses this mess:
That is, you can tweak the Bezier easing curves precisely for each axis for every keyframe, and that includes the unintuitive four axes of Quaternion rotations that I think I once read our brains aren't even equipped to make sense of or something. All the curves are overlapped in this viewer and I think you have to manually hide or focus on them or something if you want to make any sense of it, though I've never been able to figure it out and prefer to avoid fiddling with curves as much as possible.
Is this depth of control something that proper professional animators use a lot, mastery of which is crucial for making the sorts of magic Pixar-level master animators stun us plebs with? I don't know! But what I do know is that I have no use for it myself, and I've never been able to find consistent ways to make it as simple and accessible as Flash's easing options were.
I particularly dislike how the tween curves generated by default are ease-in-out, and it gives looping animations a clear seam between loops which... is difficult to explain and I don't have any examples on hand so... whatever, I'm just venting anyway!
I occasionally make private personal projects where I experiment with new ideas and techniques that I could potentially work into my 'main' game projects, if I find them to have value. The facial animation system I incorporated into Memody: Sindrel Song is an example of something I took from one of them. I recently made one where I wanted to use simple full body animations for what were essentially minimalist, written-dialogue-driven cutscenes, but hated having to constantly tweak and export them in Blender because of aforementioned frustrations with its more-complicated-than-I-need animation system.
I experimented with an alternate animation system from the Unity Asset store which allowed me to create and edit animations directly in Unity, but it had its own issues since it too was designed to be as versatile as possible.
So I created my own custom animation system! As you do. It's extremely minimal, but perfectly suited to the kinds of models I'm using and nothing more. No fluff or frills to distract and frustrate me.
I spent a couple of days borrowing code from my other project for this Dreamons one. Now, I can create animations for the models while they actually look as they would in-game, and can specify easing curves with the click of a button instead of editing any graphs.
I can still manipulate the bones by grabbing and rotating effectors like what I'm used to in Blender, thanks to Unity's Animation Rigging package, just without a bunch of distracting fluff. I remember when I was first learning Rigging, watching various tutorials where people suggested using things like Blender's Rigify plugin to generate what to me were needlesly complicated rigs full of controls which maybe some Proper Animator might appreciate and make use of, but I wanted something as absolutely bare bones (HA HA HA BECAUSE THEY ARE CALLED BONES) as possible. Which this is!
None of this technical stuff is relevant to the player at all - this only works in the editor, and while I thought about modifying it for player use, it'd very likely be more frustrating than fun - but I had a lot of fun figuring it all out (especially things like blending between animations), and it's very satisfying for me to use this self-made tool to generate animations as tiny 3kb XML files.
Here's one:
And another:
I was able to make each of those in maybe five minutes or less. AND I enjoyed the process, unlike with animations I've made in Blender previously. They're not going to win any awards or anything, but efficiency is my priority here, and they work very well in that regard.
Currently, I have just three essential character rigs in the game: female, male, and (as of earlier this week) the diminutive child-like one (which doesn't necessarily need to be for children, as you can see with that cutesy animal-like thing there). It'd get quite boring though if all users of a certain rig shared the same animations (all females having the same idle pose, for example). I've wanted to address that for a while, but the thought of creating a ton of different Blender animations really put me off.
Now, I can easily use this tool to create 'animation sets', so I could for example give Babes a sultry one while Normies have a basic one, with both sharing the same rig. The player could choose their animation set ('vibe'?) too. All of the dreamons would have their own unique animation sets, while others might be shared between a few different archetypes.
But which animations would need to be included in an animation set,
exactly? Is a thing I'm still in the process of working out. Since the game's skills are social- rather than violence-based, it'd get a bit dull if they all used some generic 'cast' animation, but giving each skill its own animation - which I'd have to make for all of the animation sets for each of the three rigs - would be absolute madness. I'll need to decide on a small list of 'use skill' animations which is both practical to make and amusing enough to play with.
(In Atonal Dreams, characters had both Walk and Run animations, which they blended between based on how hard you held a controller's analogue stick in a direction, as is the norm is most 3D games. In this, I'm just going to have Run animations, no Walks, because I doubt players will notice or care and it saves me a ton of work.)
I spent some time refining the list of skills in the game, which - as mentioned in a previous post - I'm planning to keep minimal for practicality reasons. They all
work, currently, but share animations. I'll likely refine their effects and animations as I - and testers - play around with them. It'd be pointless to make particle effects and animations for skills I might end up replacing.
Some other miscellaneous screenshots:
I added these cutesy animal things just this morning because I wanted some opponents to test against, and wondered what I might be able to use in the first, Levitality-elemental area of the game. I was also curious to see how versatile the new diminutive model is. Spryad's skin colour blends in with the grass, though this isn't exactly the final tileset so that'd change in time. The UI bits in the top corners are a relic of a now-scrapped concept!
I used the Transmogrifier to change into one, but altered my colours. The whole process took seconds.
A few more seconds, and now I look really rather different yet again!
Here's a woman in a bikini berating an apparent child for their less-than-beautiful buttocks. Surely that's not weird or concerning. It only occurred to me days after adding that model that one of the moods (status effects) is (sexual) Arousal, which you could potentially inflict on child characters. HMMMM. Probably need to change something somewhere! (I probably should name the mood 'Desire' or something regardless.)
I don't know how interesting all this technical work-in-progress stuff is to whoever even bothers to read this thing, but maybe there's some value in seeing behind the scenes a bit!
I had a counselling session today... which I cancelled! The third week in a row where I've not been! After so long trying to get counselling at all...
A couple of weeks ago, it was because I had a brain scan instead. I finally got the results of that back just yesterday; the tumour's not growing back. A relief.
Then last week, the counsellor cancelled (literally just before I was about to get on the bus...) because she was 'ill'. I've been ill myself this week - I probably caught something at the hospital which took a while to incubate? - and I used that as an excuse, though after sending the "I can't come" email, I felt bad about it, like I really could and should have pushed through it and gone, but... ehhh.
I just hate the bus trips. 40 minutes, stuck with smelly strangers with no way to easily ABORT should I need to. It's the anxiety issue I most need to push through, but... I suppose while I wasn't so ill that I couldn't do game dev work, the thought of
enduring the bus while ill felt like too much. Rather pathetically.
I should look into learning how to drive, finally, though that comes with a lot of anxiety too.
I suppose I've been working so hard and so much on Dreamons as a way of avoiding all the other stuff I need to do to fix my life situation. At the very least, my avoidance is productive? Maybe? I
could just be sitting around browsing Reddit and YouTube every day, and I'm not.
I'm just happy to be making some game dev progress after neglecting it for ages to unsuccessfully attempt to focus on life change stuff. Hopefully I'll be able to do both next week.
I'm still working through Tomb Raider III! I gave up on stubbornly trying to play it as it was intended - finishing hour-long levels without save points, apparently - and it changed from frustrating to fun by using emulator save states. Still have no idea how I endured it as a child.
5