Demo
A Righteous Knight
“Be a good man.”
Restart the story? Your current progress will be lost.
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.
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.