Demo

A Righteous Knight

“Be a good man.”

Twine Harlowe C++ FreeType HarfBuzz
Open in a new tab ↗

Read each passage, then click or tap a highlighted choice to continue. You can also use Tab to focus a choice and Enter to follow it. Scroll inside the story to read longer passages, and use its back arrow to revisit a choice. Want to try another path? Restart the story above.

Have you ever dreamt of being a knight? A knight who fights for the people. The realm is suffering under a cruel king, and now it is your chance to do something about it. Be careful with what you choose. Different paths lie ahead. Draw your sword, knight!

The native C++ version of A Righteous Knight, with the opening passage and its first choice

The native C++ version.

I wrote the story in Twine and connected the passages with choices. This demo runs the original Twine HTML export. For the native game, a Python asset pipeline compiles the same story into a binary passage graph. C++ follows those choices, HarfBuzz shapes the text, FreeType rasterizes the glyphs, and OpenGL draws them from a shared texture atlas.

Source code on GitHub.

Story written in Twine, using the Harlowe story format.

Native game built with NEST.