One of the main reasons why I was thinking of changing from Ren’py to Naninovel/Unity is flexibility. I have very specific ideas about how I want to tell this story visually and specific requirements of my sprites to do it.
So, what have I actually done since the last update?
Well, I spent a whole day converting over all my Ren’Py scripts to Naninovel scripts and it was less painful than I was expecting. Just lots of carefully considered ‘CTRL+F’ and ‘Find and Replace’.
I’ve only just started drawing placeholder artwork, but I have been messing around a lot with with awkward doodles to see what I can accomplish. So far, it’s been rather fruitful.
I initially wanted to use the Layered Character template from Naninovel but I kept running into issues when trying to get animations to play. I had ‘animated’ ticked, as indicated by the documentation, but no dice. So I switched to trying to use Generic Characters. In retrospect, with what I want to do, Generic Characters are probably the way to go.
The way Generic Characters work is that character commands from the script (such as Geralt.grumpy) can be routed to an Animator component where a Trigger of the same name is triggered.
The Animator component is a component of Unity. It uses a node based system to basically organise and manage all the different animations for the character or object it’s attached to. To transition from Animation Node (and thus Animation Clip) to another one, there needs to be some kind of Parameter Condition met. In this case, Naninovel uses Triggers.
So, if the current node has a transition with this Trigger on it as a condition, or if this Trigger is on the Any State node, then the Animator will move to the relevant node and play whatever animation is at that node.
The reason I like this system more than Ren’Py’s, even though it’s a lot more work to get set up, is because since it’s a node based system, I can use Finite State Machine logic to double up on expressions across multiple poses. So Geralt (I’m in a bit of a Witcher mood at the moment) can have a pose where he’s standing neutrally and a pose where he has his sword raised, ready for battle, and they can both have a smiling expression that I can simply call ‘smile’ - I don’t need to have a NeutralSmile and a BattleSmile, just smile. To do this, I just make sure I’m in the cluster of nodes of the right pose I want, then I can call Smile.
Now, this doesn’t mean the set-up for a character is simple, far from it, but I think this is the right direction, or at least, the direction that I should be going in.
To be honest, I still have qualms from just how complicated I’m making all of this. Is there any tangible benefit to trying to make a visual novel so cinematic? Surely, if it was such an ‘improvement’ on the usual formula, many more people would be making it like that. I don’t know, but I do intend to do a little test once I have some placeholder assets made up.