|||

02 - An Adventure From Ren’Py to Naninovel

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.

A silly character sprite.A silly character sprite.

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.

Showing off the Animator with different poses and expressions.Showing off the Animator with different poses and expressions.

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.

A rough sketch of the main character.A rough sketch of the main character.

Up next 01 - Engine Woes 03 - Learning to Move
Latest posts The Undead 6 The Undead 5 The Undead 4 The Undead 3 The Undead 2 The Undead 1 The Undead (fan translation) 06 - back to Ren'Py & Concept Art 05 - Changing Engines & Changing Projects 04 - Huzzah for Naninovel Urasawa Naoki - The Lies Mangaka Tell Xian Xie Fate Is... Fate Is 3 Fate Is 2 Masahiro Sakurai - Broad Input, Broad Output A Collection of Inkle Wisdom Inkle and UX 03 - Learning to Move 02 - An Adventure From Ren'Py to Naninovel 01 - Engine Woes Head In The Stars