Devlog #2: Beginning the journey of not sucking at (pixel) art


1 Progress

Apart from somehow catching the flu in the hottest days of this year in the UK, this fortnight's progress has been pretty good: I've gotten the rest of Act 1 annotated according to the markdown style links described in the previous devlog so that the entire script is strung together (sans actual mini-games)

I added one more feature for Pendant's instant messaging app (picture attachments), and also one final label type to my screenplay 'format'.


Figure 1: Yay, now the citizens of Skara-Hinton can send memes.

I've also moved onto tinkering with art, trying both hand-drawing and 3D modelling with Blender.

1.1 Markdown labelling

I finished getting the remaining lines of Act 1 annotated with labels; the parsing of the script thankfully didn't get as gnarly as it could have potentially gotten (zero regexes were written!).

There was one final feature I needed to get the embedded short story out of the markdown file and into the game as a storybook: I added a capture label that dumps the unprocessed text between that label and the next endcapture label; scenes can then access all captured content in a Dictionary and do their own processing on it:

[capture](dash-against-the-rocks)
---
One day, a young whelk who had been meandering in the Pacific ocean was caught in a moderate storm. Storms as big as this were infrequent but not unprecedented so it was not unduly scared. Retreating into its shell, it allowed itself to be swept up by the waves and thrown across the sea. While waiting for the storm to die down, it reminisced on how it had enjoyed the last two seasons there; the sunshine had been plenty and there were plenty of transient brethren to converse with.
---
...
[endcapture]()

Listing 1: Excerpt from the embedded short story: Dash Against the Rocks

The scene takes this and then gives it off to another node which renders the content as a storybook:


Figure 2: Coming up soon: a lot of whelk art

Overall, this approach of kicking off custom functions from the markdown file seemed to work out well and I got into a nice development flow with it.

For quick testing, I also added in a 'pre-condition' function that would run whenever I fast-forwarded to a certain label - this function would set up the scene, move characters etc. to the point of where I wanted to test next.

I had ended up spending a bit of time getting the NavigationAgent working with mixed results; it would have been nice if I could have gotten characters to move by just by telling them where they needed to go, but they still sometimes got stuck in a busy scene.

In the end, I decided to play it on the safe side and resorted to placing 'cue' sprites in the scene and getting the characters to move to those. Although more fiddly, it was a visually interactive process and didn't run the risk of a cutscene never ending due to a stuck character.


Figure 3: You may not like it, but this is what peak cue usage looks like (so far).

2 Craft

2.1 Getting together a pixel art workflow

Ever since reading about how Dead Cells (a pixel art Medroidvania) used 3D software in their art pipeline, I wanted to explore how to do the same - the ability to iterate on perspectives without completely redrawing whole components is a game changer.

There are a lot of pixel art guides on how to achieve this in Blender and I'm still in the process of experimenting; the core technique seems to be toon shading in conjunction with freestyle ; some guides also suggest using the pixelate node in the compositor to downsample.

The idea will be to generate a first pass of any tricky visual components this way before pasting them into Krita to do touch-ups.

It'll be another few days before I settle on a workflow (right now, I'm leaning towards using a plugin by Lucas Rodel) but in the meantime, I've also just been hand-drawing the art too (the cars were bashed in using the aforementioned plugin):


Figure 4: Skara-Daphne: One of the newly redone Babelverse settings

The goal at the moment is to just the art to a 'not-placeholder' level instead of polishing it all the way; I'll do another pass on it later on in development.

3 Tooling

I was recommended PureRef, which has turned out to be a great way of managing clumps of reference photos.

By keeping PureRef always on top, it is also possible to eyedrop colours using PowerToys Color Picker, and then paste them into Krita's specific colour selector docker.


Figure 5: Colour-picking off PureRef

3.1 Custom Actions

In the process of linking the action label on the markdown document to a function in the scene, I found myself writing the same function name three times. Sounds like the job for a snippet! I cobbled this together from VsCode's docs:

{
  "Create a custom action": {
    "prefix": "ca",
    "body": [
      "\"$1\" = _${1/-/_/g},",
      "# func _${1/-/_/g}(ff: bool) -> void:",
      "#     pass"
    ],
    "description": "Create a custom action"
  }
}


As you can see, it's still a little fiddly but did save some keystrokes in the end:


Figure 6: Using the custom action snippet

4 Coming Up

Although I'll be on holiday for a week next week, I'm looking to finish doing a first pass on the art and start on the music - I'd like to incorporate snippets of melodies and chord progressions into the game so that they annoy me enough to start fleshing them out.

Now that the screenplay for Act 1 is fully annotated, I'd also like to go over it one last time with fresh eyes to make sure there's no other scenes I'd like to add.

Leave a comment

Log in with itch.io to leave a comment.