June 2026 Devlog – The Boy Is Back in Town

Hi all, Duhop here! 

My July started off with a trip for a lovely family wedding, which of course just had to leave me sick for another whole week afterward -_-

In sharp contrast to that, however, I’m just now starting to realize that June might genuinely be the best month we’ve ever had in development of Alex’s Journey to the Grave.

So here’s what we got done:

I wrote almost the entirety of Act 3.

If you’re curious, the previous devlog was actually about my experience re-editing Act 2, and finally finding peace with it.

Coming into the start of June, I had just finished that, and I decided to delay the visual scripting work needed to polish it for release so I could continue writing while the iron was hot. 

At the time, Act 3 was a patchwork of a few disconnected scenes I’d sort of just plugged away at over the past couple years(!). There were huge gaps, and I needed to do a lot of writing to fill them in. 

Did I do that? Fuck no! Obviously, I just completely restructured and wrote/rewrote nearly the entire thing in one go instead.

How long have I been working on this game again…?

My trip interrupted me before I could finish the final two scenes, but I’m currently making short work of them. I’m finally at a point where I can tell just how much my writing practice has paid off, and I’m feeling great about it.

We worked on the most complicated CG in the game.

You might recognize this one from an extremely early sketch I used for a devlog in… *checks notes* oh god… May of 2025, when we first laid it out so our background artists could start working on the background for it.

After a whole lot of other character art in the mean time, we’ve finally gotten around to that part. Here’s how it’s looking now:

Yes, the boy is back in town! This is, in fact, the first time we’ve made proper art of male Alex since Fall of 2024 (😭). We’ll be seeing a whole lot more of him from now on though, since this means our art progress has reached the turning point in Act 3 where the player finally gets to see him from his counterpart’s perspective.

Finishing this CG has been an absolute grind, but it also makes us feel like we’re teetering on the edge of an avalanche of progress. 

The level of complexity… well, it’s hard to even describe it in the terms of a CG, because it’s essentially two fully-featured sprites baked into a background. Two sprites that are somehow even more complicated than most of our actual sprites o_o

Both characters have multiple poses and a full spread of expressions like any other sprite, but that wasn’t enough to make things feel natural. Of course;

  • When they talk to each other, they can’t just be looking forward the whole time. They need alternate pupil locations (for nearly every set of eyes, mind you), so that they can:
    • Look at each other
    • Look at the road
    • Look away from each other/outside the vehicle.
  • One of their destinations is very different to their place of origin, so there are two different versions of the exterior background. You also need alternate versions of those, and alternate versions of the alternate versions of those, so you can show in all planned scenes that they are:
    • In the city and parked during the day
    • In the city and parked at night
    • In the city and moving during the day
    • In the city and moving at night
    • In a rural area and parked during the day
    • In a rural area and moving during the day
  • There are similar masked lighting overlays to the ones I’ve talked about before for the character art, to match the day and night versions of the background lighting.
  • We use the same CG for a solo scene with male Alex in Act 2, where he needs:
    • Yet another pose, so he can look down at his phone
    • A whole spread of additional expressions to match the very different emotions of the scene
  • And at some point, Flora is holding the cat inside the car, so we need:
    • An alternate pose of her holding the cat
    • Poses, and expressions for the cat herself

And even that list is heavily simplified…

The light at the end of the tunnel? This is as hard as it gets. 

None of the other CGs we need come even close to this level of complexity, so it should be far smoother sailing from here. (We hope)

I also do believe that the extra effort here is justified. We’re gonna be using this CG throughout Act 2, 3, 4, 5, 6, and hell, maybe even 1 if we decide to update it after release. Pretty much whenever they leave the house, we can find a way to make good use of it.

We started working on the OST for Act 2.

Resuming work on the OST was something that I put off for a very long time after what happened last year. The team member that passed away was one of the two working on the soundtrack, and they were not only my friend, but a very close friend of the other producer as well. 

I think the time away from it was well-needed and justified, but probably went on for too long. I can’t speak for Ula, but personally, my return to it this month felt long overdue.

It’s a little hard for me to share audio here in this devlog, but we’ve now planned all the remaining tracks needed for Act 2, and made significant progress on several of them.

Of course, a lot of the OST from Act 1 will be reused throughout the game, and that goes for tracks from later Acts as well. The number of unique tracks needed for Act 2 is half of what we needed for Act 1, and that number will continue to dwindle for each act as we make more!

We continued good progress on background art.

Now this, this is something I can just show you. There are actually a lot of new backgrounds that we’ve finished in the past few months, but here are the two that we happened to finish up in June:

And here are some other recent ones that I’m excited about as well 😀

(HE KNOWS WHAT YOU DID)

I did some serious UI programming.

I spent most of June writing, but for some reason, there was one week where I just felt like doing some programming instead. Of course, inane battles were fought with Ren’Py as usual, but for some reason, it was actually fun…

First, I made a prototype for a “Scene Select” screen, something I’ve seen in several visual novels before and absolutely fell in love with the convenience of.

Any scene the player has seen is unlocked automatically, and they can easily navigate back to at any time. I imagine this is probably going to cause some serious problems with story variables later on, so I’m not entirely sure I’ll be able to implement it without at least some caveats… but I hope I can, because it’s absolutely fantastic for the player’s quality of life.

Here’s what my prototype looks like:

I made sure it could be navigated and panned with both the mouse cursor and arrow keys/controller sticks, which caused an infuriating issue where different levels of zoom would prevent the viewport from centering properly. Forcing me to implement… eugh… math into my code 🤢

As you can see though, I got it all working properly 😀

My second programming task was a crusade to eliminate all remaining text displayed with images.

This included the main menu buttons, the menu headers, and the buttons in the help screen.

(these things)

There were two main reasons that these were not already displayed as text to begin with:

  1. The stars on the main menu buttons.
  2. The gradient on the menu headers and help buttons.

I easily found a workaround for the main menu buttons; all I had to do was add the stars to a font. In the end, it was easier to add them as their own font altogether, and use text tags to switch to that font just for those specific characters. The stroke and shadow were easily added as two separate text outlines (not exactly the same as the original image, but close enough and arguably even better looking). Here’s how the start button looked after, compared to the original images below it:

But of fucking course, that was never going to be easy enough for Ren’Py. These characters only appear when you hover over the button, and for some fucking reason when using actual text, the spacing between letters changes if the string changes in length whatsoever, even when the entirety of the actual word in the middle stays centered in the exact same position.

So I had to display the stars in both the idle and the hover state, and use text tags to make them invisible in the idle state. In the same font, and including their outlines as well, of course:

imagebutton:
                idle Text("{outlinecolor=#00000000}{alpha=0}{font=TildeStar.ttf}`{/font}{/alpha}{/outlinecolor} Start {outlinecolor=#00000000}{alpha=0}{font=TildeStar.ttf}`{/font}{/alpha}{/outlinecolor}",style="main_menu_button_text")
                hover Text("{font=TildeStar.ttf}`{/font} Start {font=TildeStar.ttf}`{/font}",style="main_menu_button_text")
                alt "Start"
                action Start(label='act1')

Well, that is just absolutely revolting. Surely the gradient text couldn’t be any worse, right?

WRONG.

Gradients aren’t supported by Ren’Py natively, but thankfully, the Gradients for Ren’Py addon by Feniks is here to save the day!

You just… you can’t have both a gradient and an outline of a different colour on the same displayable. No, that would be far too convenient for Ren’Py.

What you have to do is display the text twice over top of itself; one layer with the gradient, and one transparent layer with the outline. BECAUSE OF FUCKING COURSE YOU DO.

And also, the text renders slightly differently if ANYTHING is different between the two layers. For some reason, INCLUDING if you don’t apply a gradient to one of them, and INCLUDING if you don’t apply an outline to one of them. 

WHY?????????

PIJSDVNUPESDHFVFOUSRDHFEIRUNGHEIUFHGDWFAIOGJEA[RTPweoi,krc[pwoajpgwoietghvquevrhtweiuof

I… I did it, though:

style help_button_text1:
    xalign 0.5
    yalign 0.5
    size 40
    font "Gabriela.ttf"
    outlines [ (2, "#1A1520", 0, 0) ]
    alt ""

style help_button_text2:
    xalign 0.5
    yalign 0.5
    size 40
    font "Gabriela.ttf"
    outlines [ (2, "#00000000", 0, 0) ]

imagebutton: # Mouse
                    idle Fixed(
                        At(Text("Mouse", style="help_button_text1"), linear_gradient(["#1A1520", "#1A1520"], angle=90)),
                        At(Text("Mouse", style="help_button_text2"), linear_gradient(["#fff", "#C7C5C5"], angle=90)),
                        xsize=162,
                        ysize=64)
                    hover Fixed(
                        At(Text("Mouse", style="help_button_text1"), linear_gradient(["#1A1520", "#1A1520"], angle=90)),
                        At(Text("Mouse", style="help_button_text2"), linear_gradient(["#fff", "#C7C5C5"], angle=90)),
                        xsize=162,
                        ysize=64)
                    idle_background Frame("gui/button/help_button_frame_idle.png", 10, 10)
                    hover_background Frame("gui/button/help_button_frame_hover.png", 10, 10)
                    selected_background Frame("gui/button/help_button_frame_selected.png", 10, 10)
                    alt "Mouse"
                    action SetScreenVariable("device", "mouse")

And now the gradient text looks exactly the same as it did before 

🙂

I attended an accounting workshop.

Graciously hosted for free by New Media Manitoba, this was an entire 9-5 day of learning about the most fun topic in game development.

I now know how business taxes work where I live, so that’s cool.

In conclusion…

Development has massively picked up pace, and despite some of the theatrics in this devlog, I’m genuinely having fun with it!

Fingers crossed, things should continue to pick up a little more before they level out again. 

As my writing maintains its momentum.

As the soundtrack work ramps up again.

As background art continues to stay well ahead of everything.

And as we cross the largest hurdle of all the character art we need.

Fingers crossed. 

Toes crossed. Tongue crossed. Knock on wood… etcetera.

Thanks to everyone keeping up with Violet Horizons. I’ll be back next month to check in with you again!

-Duhop

Leave a Reply

Your email address will not be published. Required fields are marked *