We present a column by the game author of Mayak, Nikita Nikiforov. In it, he shares his experience working on the graphics of the project — a visual novel about space and love.

Nikita Nikiforov

Hello! I’m Nikita, the solo developer of the game Mayak from Moscow.

Mayak is a small story-driven sci-fi game, a hybrid of adventure and visual novel. It features a young astronomer, his girlfriend Nina, their cat Isaac, a signal from another star, and quite a few things that I can't talk about yet without spoilers.

But today, I want to talk about something other than the plot.

I want to show how a simple static drawing gradually turns into this:

And yes, it's all genuine 2D.

This isn't 2D sprites placed in a 3D space with a 3D camera.

Just plain 2D.

For someone with experience in game development, there might be nothing new here at all.

But Mayak is my first game. I embarked on it without any programming experience and spent about the first year just experimenting with everything:

  • 3D;
  • 2.5D;
  • different engines;
  • various lighting methods;
  • different art styles.

Many times I assembled something, looked at it, and thought: noooo.

Then, at some point, flat drawings began to move, there was light, sound, parallax — and suddenly everything clicked.

One day I looked at the scene and thought: yesss!

First, just draw

Almost every scene starts as a regular illustration.

I draw it by hand. I like oil, rough strokes, impressionism, manga, noir, dark colors, and very bright spots of light. For a while, I tried to make the drawing more "correct" and neat. I worried a lot about my imperfections. I read manga, experimented with paints, pen, ink, and different digital brushes. And then… I thought, and decided that my flawed style is my unique style.

Let it be!

And after coming to terms with this, drawing somehow became much easier.

The problem is that a finished illustration in itself isn't suitable for the game — it's static.

So, even while drawing, I always think about what will need to be moved separately later:

  • the hand in the foreground;
  • the face in the midground;
  • the pupils;
  • the light source;
  • the shadow source;
  • some absolutely unnecessary bush in the distance that I somehow spent two hours drawing.

As a result, one drawing turns into a bunch of separate layers.

Then I put it all back together in Godot.

But now as a game scene.

Parallax: the cheapest way to suddenly achieve depth

The first thing that dramatically changes the feel of an image is parallax.

The layers begin to move slightly relative to each other: the ones in front more, the ones in the back less.

Sometimes the movement is barely noticeable, but the brain stops perceiving the scene as one flat image.

I like it when this effect works not like a showstopper "LOOK, WE HAVE PARALLAX," but almost subconsciously.

With a slight camera movement, you feel that there's some distance between the foreground, character, and background.

Even though there's no actual distance.

It's all several PNGs moving at different speeds.

A very convenient way to trick the brain.

Next comes my favorite stage — lighting

Lighting is already drawn in the original image.

There are shadows, highlights, illuminated surfaces.

But on top of this, I add real 2D light sources and dynamic shadows.

And it turned out to be incredibly fun.

For example, the character walks in the dark with a chemical light stick.

When he passes by a tree, the light begins to slide along the trunk, branches cast shadows, lighting changes with the character's position.

Moreover, there is a layer on the tree that reacts to light especially sensitively.

Seems insignificant. But these are the kind of details that I inexplicably enjoy.

For me, this creates a very pleasing conflict between painting and IT gadgets.

A touch of distortion

Next are the shaders.

I don't want them to become a separate visual effect.

The ideal scenario for me is when the player just barely senses that something is happening.

I use slight surface deformation, barely noticeable trembling, overlaying and moving translucent textures over the original drawing.

The shaders I use are technically quite simple. No black magic.

Just a few small effects that come together: random pixel displacement, slight color mixing around each pixel, slight pixel brightness flicker. And all this at 3-4 frames per second.

And there you have it: the brain starts to perceive a still drawing as something alive.

One effect does almost nothing

This is probably the main thing I've learned while working on the visuals.

There's no single technology that suddenly transforms static art into a game scene.

Parallax on its own is just parallax. Light on its own is just light.

Slight texture movements give nothing.

Animating a few details is also nothing special.

But when it all works simultaneously, the effect suddenly becomes much stronger than the sum of the parts.

And then sound is added to this.

Too bad GIFs can't display it.

We add room noise, wind, or the hum of equipment. Plus footsteps.

Some quiet mechanical sounds. And on top of that, music! Mmm...

By the way, I wrote music for about 15 years before getting into game dev, so the sound part is a distinct pleasure for me. By the way, listen to Nicephorus!

And when the drawing moves, light reacts, ventilation hums in the background, and music starts playing over it — for me, it’s real magic.

A few days ago, you drew a PNG.

And now it feels like a real place or a living character.

Why Godot

The entire game is currently being developed in Godot.

I didn’t come to it immediately. Initially, I tried simpler engines, which seemed more user-friendly for someone who had never made games before.

But quite quickly, I started to hit limitations.

I wanted lots of parallax. And dynamic dialog bubbles. And dynamic lighting. And complex scene transitions too. And to write my shaders. And to have smooth cameras. And not to have to rewrite the engine to create a save system.

In Godot, I have almost complete freedom in this regard.

It's lightweight, starts up quickly, and allows me to test ideas very promptly.

This is especially important when you're working alone.

You can come up with a silly idea in the evening, put it together in a couple of hours, realize it truly is silly, delete everything, and calmly move on.

That’s progress too.

Gradually, I've developed quite a few of my little systems: scene management, parallax, transitions, working with light, images, and shaders.

For dialogues, I use Dialogue Manager by Nathan Hoad — a wonderful plugin that saved me a huge amount of time.

But there’s no unique engineering magic under Mayak's hood.

Almost everything was invented before me.

I just take familiar elements and assemble them in a way that I like.

And now the downside

There is one quite obvious drawback to this approach.

You need to draw. A lot.

Almost every scene in Mayak is unique. I don’t build levels out of repeating tiles or rearrange the same set of objects. A new episode often means a new complete illustration, which then needs to be split into layers and brought to life.

Sometimes in a week, I can create two or three scenes.

Who am I kidding?

More like one or two...

And some I can tinker with for much longer.

At some point, I realized that the romantic idea of "let's have each scene drawn separately" — is a trap I built for myself.

Now it’s too late. I'll have to draw.

Not recommended for everyone.

But so far, this part of development is my favorite. You take a completely still image. Start adding layer by layer: parallax, light, shadows, shaders, sound.

And at some point, it starts to breathe.

Probably the reason I started all this.

A bit about Mayak itself

If after all the PNGs you're still interested in what the game is about: Mayak is a linear story-driven sci-fi narrative roughly four hours long.

At its center is a young astronomer, Nina, the cat Isaac, and a signal from another star:

  • 3571
  • 3559
  • 3557

... (people started receiving numbers from space!)

All the numbers are prime.

And they are decreasing.

Further is spoilers, so I'll stop here.

There is already a free demo on Steam, roughly 30–40 minutes long.

And I'm continuing to work on the full game.

The script is already finished.

The smallest part remains.

To make everything else.

Join me on my Telegram channel.

Tags:

×