Hello visual novel fans and vampire lovers! It’s been a while since I last wrote a postmortem, so I hope I’ll be able to write this concisely (and coherently).

Dahlia was a short visual novel I created in under 36 hours for Velox Formido, a shortform visual novel game jam ran by robobarbie and Allie Vera. It’s inspired by Ludum Dare, one of the longest running game jams in the world where devs are tasked to make a game in 1 weekend based around a theme. I got my start making visual novels by entering Ludum Dare…which was 10 years ago, as of 2024!

I had my eye on this game jam for a while now, as this isn’t its first incarnation. I’ve been a bit burnt out the past year or so, not completely where I can’t make progress but to where I feel like my work has slowed down a lot more than my peers and feel I can’t make anything quickly. When I saw the jam was happening this weekend, I hopped on board once the themes were announced.

the themes

While Ludum Dare has a rigorous process of eliminating themes until it gets down to the final one, Velox Formido has it where there are 5 themes that win and participants have to use at least 2 of them in their entries. The final themes were…

  • Enemies with Benefits
  • Flower Symbolism
  • Doomed by the Narrative
  • Trapped with Someone
  • Forbidden Romance

I started crafting ideas as soon as the themes were announced, which was what the jam started- meaning the clock was ticking!

My first idea was a shounen rivals-esque sapphic story about two rivals meeting up for alone time. I started writing it immediately but moved on to another idea- being trapped with a vampire. I doubt I’ll ever use the first idea, so I’ll share the snippet I was able to write for it. Every new line is the other woman talking, so think of it as a quick back and forth.

"Do you believe in love at first sight?"

I look up to meet her eyes. The light from the sun radiates off of her face, emboldening her strong gaze.

"No, can't say I do."

"What a boring answer."

"What, do you?"

"Nope."

"Hypocrite."

"What, I just wanted a fun answer. You might as well lie to me if you're going to be like that."

"Ask something with more grit than that, then."

"Okay... Do you believe first impressions matter?"

"Of course. Next!"

"You've got to give me more to work with than that..."

"First impressions determine your relationship with someone going forward. You can't redo it."

"Ah, but not...your entire relationship."

Her hand traces along the grass, letting the blades flutter through her fingers. A breeze from the north catches me off guard.

"The winds are changing."

"A change in the tide. It doesn't bode well for it to be so early in the season."

"Are you worried about it?"

"Not overly so. Are you?"

"I'll face any storm my way."

"What sickly sweet optimism."

Even though I had started on this idea, I wanted to write something more… mysterious. Frilly. Girls in cute dresses, to be exact. So I began potting an idea where a girl wakes up to find a vampire in her room, unsure if she’s had her fill yet or toying with her next meal.

the story

The “flower symbolism” theme was definitely my first pick, as I love the concept of it and played around with it in my last visual novel, Asphodelium. I named the characters Dahlia (beauty, change) and Camellia (admiration, longing). Dahlia represents a change in Camellia’s life, a sudden burst of newness. Camellia longs for something different, some way for things to change.

The other theme I picked was “trapped with someone”, as the premise is a girl stuck with a vampire in her room. I didn’t want it to be outright horror, but still a little creepy and tense.

Dahlia "I've had enough pitchforks stuck in my face for today."

Camellia "And why is that?"

Dahlia "Because your kind isn't too welcoming to my kind."

Camellia "I was asking why you were here in the first place."

Dahlia "Obvious questions get obvious responses. I needed a snack, of course."

Camellia "And you chose my residence."

Dahlia "Didn't you say this was your fathers?"

Her words curl around the last word, like ivy growing against a trellis. She's clearly already had a "snack", but was it enough to satisfy her?

Or am I the main course?

Both of them are somewhat young, but there is still the element of the unknown. This creature clearly already had a meal, but does she want dessert? Is she just toying with her food? Or is she truly delighted to find someone her age to talk to?

With the time constraints I wasn’t able to flesh out much of their dynamic, but I hope it was still an enjoyable taste! The story ended up being about 2.3k words long with 3 endings.

the art

I started doing the art about….12 hours before the jam ended. I love working with fullbody sprites as they offer me a lot more versatility with posing, but I knew I didn’t have time for that here. This time I went for 3/4ths bodies, namely just so I could cut it off at the end of their dresses. I spent about an hour on each of these.

With the time crunch I didn’t have time to do concepts for them- I just winged it! I knew I wanted Dahlia to have pigtails, though she was originally going to have a purple theme. Camellia was supposed to have proper curls in her hair, but because the game starts with her being rudely awoken, I went with messy waves instead. Think of it as bedhead rather than her actual hairstyle.

I also quickly did a main menu artwork towards the end of my crunch in about half an hour. It was originally going to be the cover art on itchio but Dahlia’s >:D sprite looks more striking.

For the backgrounds I went with free photos from Unsplash and edited them. Personally, I like the look of filtered photos as backgrounds depending on the aesthetics of the game.

I didn’t have time to edit the GUI aside from the textbox, which was NVL mode.

the presentation

Dahlia is stylized fully in NVL mode, with the textbox to one side of the screen. I love NVL mode for scenes focused on narration and setting the right mood.

I was considering making the game a different resolution, but because the NVL mode is to the side rather than the entire screen I wanted to make use of the widescreen resolution.

The game is set late at night, so each of the backgrounds had to be nighttime. To match with this, I tinted the sprites to match each of them. For example, the above tint looks like this:

transform nightcolor:
    matrixcolor TintMatrix("#8594d6") * BrightnessMatrix(0.03)

image dahlia night = LayeredImageProxy("dahlia",nightcolor)

I wanted to try something more complex like a tint + another light source overlayed onto the sprite, but ran out of time.

Another part of the presentation I did was to have a variety of shots. I had a very limited amout of art to work with (only changing mouths and eyebrows, no arm poses or eye positions) so I knew I had to be smart about how I composited the scenes.

One thing I’ve done in other visual novels was to have one character further away and have another closer to the camera but their sprite turned black. This allows me to give the illusion of depth without having a sprite of the back of each character’s head.

for instance, this is that technique in Canvas Menagerie

Doing this in Dahlia was a quick and easy way to make the visuals much more interesting rather than swapping between two mostly static sprites the entire game.

The way I do it in other games is on a per-sprite basis, meaning I set brightness and position each time. It’s hectic, really! But because of the time limit for this jam, I was able to come up with a much quicker way to set it up.

transform lefttt:
    zoom 0.5 xalign 0.3 yalign 0.05

transform leftttb:
    zoom 0.8 xalign -1.6 yalign 0.1 matrixcolor(BrightnessMatrix(-1)) xzoom -1

The lefttt transform is for the character in the back- in this example, that’s Camellia. The leftttb transform (b standing for “black”) is for the character in the foreground who’s shrouded- in this example, that’s Dahlia.

Basically, the leftttb transform sets the sprite to a bigger size than the farther away sprite, sets the position, and then makes the color completely black before flipping the sprite (because this should be us seeing them from behind).

I also did quite a few small animations in the game, such as Dahlia dancing around or bouncing up and down. You define it once as a transform and can reuse it again and again.

transform dance:
    ease 0.7 xoffset -59
    linear 0.25
    ease 0.6 xoffset 74
    linear 0.19
    ease 0.76 xoffset -70
    linear 0.3    
    ease 0.7 xoffset 102
    linear 0.2
    ease 0.8 xoffset 0

If you’d like to see the code in action, then guess what- I’ve released the entire source code for the game on GitHub! Feel free to sift through it to see the components in action and copy some of the code for your own projects. All I ask is that you do not redistribute the game (i.e. download the code, make a build in Ren’Py, and redistribute that as your own game).

wrapping up

I’m pretty happy with how Dahlia came out. It’s short and visually distinct and helped “prove” to myself that I’m capable of making visual novels in a weekend still. I tried to avoid spoilers here, so if you haven’t played it already then give it a try!

— Arimia

Here's more posts like this...

Leave a Reply

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