Programming the Next Bestseller

Writing 181

Programming has always been a window for me; it’s a frequent medium for self-expression, reflection, and message-spreading. While only a subset of the human race can really understand it, my code is as accessible as ever with documentation, comments, and industry-best practices. In some cases, programming languages have become a second language (or more); it’s just a matter of putting that code in a way that makes sense to consumers and developers scouring my endless repositories on GitHub. At the same time, programming has also been a tool for expressing my ideas in the English language, especially with development of visual novels. Though I hadn’t really found interest in the genre of video games when I started exploring the Ren’Py visual novel game engine, I knew that I could take some of the stories that I have been conjuring up and really apply them in the programming space that feels natural to me. In recent years, I’ve become more “visual novel literate” in both reading and writing; now, I’m working on a visual novel of my own for security professionals, hackers, and developers, alike.

In my junior year, I wrote a novel with a classmate and friend for that year’s National Novel Writing Month challenge (NaNoWriMo), Sans. Sans was a romance novel set in the medieval times around the time of the creation of the printing press. Originally, we had planned to keep it, more of less, a novel; at the same time, in November, I discovered the Ren’Py engine. For the uninitiated, Ren’Py is a visual novel game engine written in Python 2*. Ren’Py provides an easy approach to creating visual novels quickly and efficiently; most people should be able to create their own visual novel with little-to-no experience in computer programming. Though recent visual novels like Doki Doki Literature Club! hadn’t existed at the time I was discovering Ren’Py, I came to discover that I stumbled onto something of interest. I tried my hand at creating a visual novel using what I had written for NaNoWriMo. I learned the basics of the language and created a working demo. However, I didn’t have proper assets such as images of the characters to use in the visual novel, so the demo didn’t contain a lot other than the graphical user interface and the story itself. I never finished the project, but I always refer to it as my introduction to the mystical world of Ren’Py and visual novel development.

I didn’t touch visual novels again until the first half of my senior year. Dan Salvato and his teammates released Doki Doki Literature Club! (DDLC) to the world in September of that year, scaring everyone and really opening eyes to what Ren’Py can do. DDLC had gained a lot of attraction over the coming months, and I happened to discover it during the winter break through a few episodes on Game Theory. Though I never really played the game myself, I learned of DDLC’s rich, deep lore that even English teachers would come to appreciate. In a way, DDLC presents a story that, when analyzed in English classes, are comparable to titles with literary significance like Frankenstein or Othello. Furthermore, I recognized a few elements in DDLC that identified it as a Ren’Py project, if not just a video game written in Python. I was hooked; a cute-looking game had gotten me back into the world of visual novel development and Ren’Py. Of course, my brain filled with ideas for continuations to the DDLC story over the next few months of my senior year. While I imagined the typical stories found in most modifications to DDLC, something really stuck to me when I wrote a poem for my English class in the fourth quarter titled “The Gal”, referring to Alice Angel from Bendy and the Ink Machine:

She takes a look in the mirror
Revealing the face that she didn’t see.
The axe that rests nearby
Sends the ink into a dark puddle.
The tears of disbelief from her face
join the puddle in regret and ignorance.

While the project was meant as practice for allusions and tall-tale writing, this sparked an idea for me: putting Alice Angel into the universe of DDLC. Thus, I had found my hook back into Ren’Py development. I grabbed a copy of the version of Ren’Py used to make DDLC (6.99.12) and went straight to work, inspecting Dan Salvato’s code over and over again to understand what was going on. Sooner or later, in June, I released the demo version of that mod, Doki Doki: The Angel Returns. The modding community for DDLC noticed this mod that took two of their favorite games and mashed them together and have been excited for the full release ever since. Even now, I’ve been working on The Angel Returns with a bigger team, including Capuccino Desu, continuing to expand the story in an open-source way.

Working on The Angel Returns has given me extra insight on visual novel development with Ren’Py. Besides knowing the basics, I learned a lot just from looking at what Dan had done. Sprites could be dynamically created by creating a CompositeImage, a method where several images of the same size are layered over each other. Getting and setting the player’s name is as easy as using some Python code to store the name inside of the persistent file, a file used to store data that should be retained whenever you start up the game. Creating custom screens offer extended capabilities and can offer another level of interactivity. This list continues to grow as I learn more of the tricks used to create special effects and scenes.

However, working on The Angel Returns has given me some insight into fields of thinking when it comes to writing and software development. For instance, I learned how to navigate the engine’s documentation to find out what functions are available to developers and what certain things do. A habit of working in a standard open-source, continuous integration/continuous delivery method such as using pull requests, making branches, and getting code to automatically build and deploy was instilled. I learned and practiced how to write in a particular style or with certain restraints to keep continuity with the original story or asset. My focus when developing has shifted based upon principles rather than searching for something exact. In a way, Ren’Py has helped me mature as a software developer.

Working on projects with Ren’Py has been and will continue to be an interesting experience for me. It prompts me to learn more and constantly try new things to make a game that’s both entertaining as a story and functional. For now, anyway, Ren’Py will continue to be my game engine of choice. I may someday finish The Angel Returns, but I will always have a new project in mind, such as the upcoming aforementioned capture-the-flag visual novel I am working on, updateMoondust().

*As Python 2 will be phased out of support in 2020, the Ren’Py team and open-source community are working on migrating to Python 3.