Thornveil

Thornveil Devlog #7: The Frozen North

The sixth post closed with the desert finished. With this post the fourth chapter is playable too: eight maps, a mini-boss, a chapter boss, and the game's first choice. That brings the total to 32 maps.

Karlı bir yamaç

The sixth post closed with the desert finished. With this post the fourth chapter is playable too: eight maps, a mini-boss, a chapter boss, and the game's first choice. That brings the total to 32 maps.

Two jobs were done at once in this chapter. One is the snow itself; the other is the two changes the owner asked for while playing the game on his phone — half-heart damage and more frequent spawn points. Both of them touch all 32 maps at once.


41 · The threshold of the north

A snowy slope: snowdrifts and a bare tree on the left, a snow-covered rock outcrop and a tree with orange leaves on the right, blue mountain ranges behind, snow falling from the sky
A snowy slope

The snow pack's rock is really the forest's rock repainted — the same tile layout, with snow caps and icicles on top. That is why the snow theme uses exactly the same structure as the forest's; only the sheets change. The sky is the forest's own clouds too, with the mountain ranges in blue.

Snowfall is one of the theme's numbers (between 0 and 1). Nearby flakes are bigger and faster, distant ones smaller; the breeze blows them sideways. Where the flakes stop is worked out: the first row of rock coming down from the top of the map is the snow line, which means it doesn't snow inside caves. The back wall isn't counted in this, because the space under a back-wall cluster standing out in the open is still sky.

A different decision from the desert: in the snow, the back wall is allowed out in the open too. The pack's own promo image uses it that way, and the cold blue back rock reads as distant rock, not as a hole in the sky.

42 · The Cursed Villager

Two wolves on the snowy road: one has leapt onto Arin, on the right stands a villager who hasn't transformed yet; blue mountains behind
Two wolves on the snowy road

The chapter's main enemy isn't a werewolf, it is a cursed villager. While he walks the road he doesn't touch anyone, and he takes no damage when he is hit — a blow only wakes the curse. When Arin gets close, or hits him, the transformation animation starts; nothing can cut him during it.

In wolf form he has three moves, all with a "!": claw, double claw, and a leap. The leap carries the longest warning and lands where Arin is heading, but it never lands in a pit or on thorns. The shield stops the claws, which means a parry opens him up.

When he is beaten he doesn't die: he turns back, the Veil leaves him as purple motes, the man drops to the ground and fades. Nobody is killed on screen. The story of chapters 4-6 is built on forgiveness, and this enemy had to fit it.

There are two more enemies alongside him: the albino bat (its dive chills you; a 1-pixel outline was added because the white-grey body disappeared against the snowy sky) and the blue slime (its ice spit chills you).

Chill works differently from poison: Arin slows down (0.65), glows ice blue, and the hearts on the HUD change color — but it never bites. The cold slows you; the wolves are the ones that bite. Chill and poison don't stack on each other; the slower one wins.

43 · The blizzard

A snowy plain under a blizzard: white-blue streaks of snow driving horizontally, the air hazy, Arin walking against the wind
A snowy plain under a blizzard

The blizzard is the desert's sandstorm itself. The same clock, the same gusts, the same push, the same checks — only the look changes: white-blue streaks, a cold haze, and tumbling clumps of snow.

That is the good side of using a system in a second biome: every problem solved in the sandstorm (seams showing, it being drawn inside caves, a jump against the wind not carrying far enough) was already solved in the blizzard by itself.

The snow's own trap is thin ice: a piece of ice sitting on the water that cracks when you step on it, then slowly sinks, and the water takes it. Since water drowns you, standing on it is a real risk.

44 · The Frost King

An ice cave: a crowned blue slime king in the air, a "FROST KING" health bar above him, icicles hanging from the ceiling
An ice cave

The seventh map's mini-boss. The Slime King's cold cousin: the same skeleton, different moves, and icicles falling from the ceiling.

The icicles are on the maps as this chapter's own trap as well: first they warn you by swaying, then they drop and take a heart, the shield meets what comes from above, you get past underneath with a dash, and after a while they grow back again.

45 · Master Brontes

A snowy cave hall: a big grey wolf standing across from Arin, a "MASTER BRONTES" health bar above him, a smith's workbench and a sword on the left
A snowy cave hall

The chapter's boss is Faber's master. There was a surprise here in the story plan: in the first draft the boss was Faber himself, and then it was changed to his master Brontes — if the smith himself became the enemy, the relationship built up over the chapter would go to waste.

After Brontes is beaten, the game's first choice arrives: spare him or finish him. Option support was added to the dialogue system for this — a line can carry at most three buttons, the buttons appear once the text finishes, presses don't count for 0.45 seconds (so nothing gets picked by accident), and the back button can't skip a choice: backing out of a decision isn't one of the answers.

The choice is saved as a story flag, and it is the first link in the chain that decides which of the sixth chapter's two endings you reach.


Half heart

While playing on his phone, the owner said "we still can't get past the first chapter." The problem wasn't the number of enemies — at his own request the enemy count on every map had been nearly doubled — but when every hit takes a full heart, four hearts add up to four mistakes.

Now an ordinary enemy's hit takes half of what it says. Four hearts hold up to eight ordinary blows. Bosses, traps, hazards, fire, and instant deaths stayed the same.

The rule that makes the distinction is simple: anything in the enemies group without a defeated signal is an ordinary enemy. All of the bosses have that signal. Projectiles carry whoever fired them too, so the Bandit Chief's arrow lands full and an ordinary archer's arrow lands half.

This had one side effect: armor's lower bound was already half a heart, which means armor can't be felt at all on an ordinary blow any more. It is still felt on two-heart moves, on bosses, and on traps.

Road torches

The second request was more frequent checkpoints. But the "two campfires per map" rule was the owner's own rule, and it had a reason: with more than that, health keeps filling up and the action slips away.

The solution was to split the two apart. A road torch lights when you touch it and carries only the spawn point: it doesn't refill health, it doesn't save, and it doesn't change the "continue where you left off" option. The two fires are still the only place health fills up.

287 torches were placed across the 32 maps — 76 in the forest, 65 in the jungle, 75 in the desert, 71 in the snow. The placement isn't done by hand: a script looks for solid ground in a way that keeps the longest distance between two spawn points under 70 tiles, and it doesn't put one between an arena's gates or next to a placed enemy. Two exceptions were left because of the terrain: a 91-tile rope bridge in forest_02, and a treetop path made up entirely of branches in jungle_04.

Above diamond

The hero's dress-up system carries all eleven of the pack's materials, but the forge stopped at diamond. Five more tiers were opened up for the remaining chapters: amethyst, emerald, aquamarine, obsidian, and ruby. Each chapter's ore belongs to that chapter, and a chapter's ~1000 gems cover 92-95% of that chapter's set.

Angelical is never forged. No map scatters it and the forge stops at ruby; the sixth chapter's last map hands over the whole set at once.

One detail is in the ingot icons again: the pack's atlas draws a real ingot only for copper, iron, gold, and obsidian; the rest are cut stones. The ingots for the five new materials were derived by mapping the gold ingot's ramp onto that material's armor palette. So that the rule stays verifiable, every time the script runs it checks that it can reproduce the pack's own iron and obsidian ingots exactly.

The trailer

The owner's request was clear: gameplay up front, action, hard music, and the picture has to stay sharp. No frame is scaled in the trailer captures — each format is captured at its own resolution, at exactly 5x. For now only the vertical Reels version has been produced.

Numbers

  • All 70 test suites pass.
  • 32 maps, four chapters, eight bosses.
  • 287 road torches.
  • New sound events: wolf howl/growl/claw/leap, frost bat, ice spit, chill.

What's next?

The fifth chapter, the Silent Graveyard, and the sixth chapter, the Masmorra Dungeon, are planned but not built. The phone side comes first: the owner plays the game on his phone, and the list coming from there has grown long.


Credits

Same as the list in the fifth post. The snow chapter didn't add any new packs. The full list: docs/CREDITS.md and, in the game, Settings → Credits.

Back to devlogs

See what's new.

All updates