A Very Important Date is an otome visual novel game inspired by Lewis Caroll’s Alice stories. I was brought onto the Naive Sprites team to develop a custom visual novel system in Unity, implement various features, and help them release the game on PC, Linux, MacOS, Android, and iOS.
I initially found Naive Sprites on Tumblr back in 2016. At the time, I was looking to get more direct game development experience and went looking for projects that caught my eye. Being a visual novel fan myself, I asked them if they were looking for any programming help. They took me in and it’s been a really great experience working with them.
This was the first project where I’ve had to collaborate directly with artists and writers for a game, and I’ve learned a ton from it. We’re able to bounce ideas and problem solutions off of each other.
They would design the user interface elements and a mock-up and I would import them into Unity and make it all functional. A process which seemed easy until we introduced multiple resolutions into the equations. I had to learn about Canvas scaling, Aspect Ratio Fitters, and proper anchoring in order to provide a good experience on all our supported screen sizes.
Probably the most important work I did for this went into the visual novel system. This was not only a way for the game to handle updating the visual novel itself as the player progressed, but also allowed the writers to have an interactive way to write the story in the Unity editor. It kind of looked clunky, but it made it so that writers could just work on the scenes pretty easily without having to worry about programming. I initially wanted to implement a whole system similar to Ren’Py, a very popular, easy to script, visual novel engine, but it turned out that would be a whole huge project in itself.
Creating a saving and loading system was also very challenging at first. Making a save file and loading it in Unity isn’t that challenging by itself, but this game being a visual novel makes it tricky. I had to make the system save the game at a specific line of dialog and load from that same exact line. It had to also remember which graphics were currently on screen and where, which music or sounds were currently playing, all the past text logs, whether or not we’re currently on a choice, the character story we’re on, and if we’re in a specific choice dialog branch. All of which added up to a headache of problems, but eventually they were all worked out.
I also had to integrate certain special settings into the game. Resolutions and volumes are one thing, but we also had settings for player names and whether or not the player’s eyes could be seen in the CGs of the game.
The player names settings seemed straight forward, the solution I used was to just tell the writers to leave the character default name (Alison) the same everywhere and then I could just script the game to replace the default name with the set player name. Thankfully this meant I didn’t have to do a lot of changing for the saving system, which was what I was the most worries about.
The optional setting for player eyes during CGs was one the team wanted for fans that preferred not to see them either for preference or cultural reasons. This was kind of tricky to implement and mainly required having all future CGs have two versions, with the special version having “noeyes” put into it’s filename. A lot of the problems related to this had to do with saving/loading and the gallery system.
Speaking of, I also created a gallery for the game which let players view past unlocked CGs and toggle the “no eyes” setting separately on there. To set this up, I needed to also program the ability to actually unlock a CG fully once it’s seen. That means if they see the CG once they unlock it in the gallery completely, even if they delete all their save files or never save after they see it. Naturally that means tracking them through the stored player preferences, similar to what’s used to save the game’s settings.
After that was in place, I had to work some magic on the gallery so that the multiple pages of CGs were accessed entirely via code rather than a bunch of duplicate buttons and panels tweaked slightly. It also had to properly show the CGs locked and unlocked in their correct orders. The unlocked CG thumbnails had to match the player’s “no eyes” setting while the enlarged gallery CG viewer had to initially match the “no eyes” setting but also have a button that would toggle it temporarily while in the gallery viewer. And all of this also had to work for each character with their own sets of multiple CGs. With most of the UI for this needing to be handled programmatically, a lot of future file naming requirement were made so that it would work.
Later, I implemented standard visual novel dialog autotyping, logging, and skipping mechanics. Those were pretty simple to implement, but a visual novel mechanic that was difficult to integrate was player choices. It had to give players optional routes, more points around towards different endings or trigger certain flags, it had to account for the saving/loading system, and it had to support choices within choices. The first iteration of our visual novel system just wouldn’t work with this and we ended up having to rework a lot of the core system to get choices running properly.
A Very Important Date is still in development and I’m still working with them to get it ready for release. Initially it was a part of Steam Greenlight and later had a Kickstarter campaign where it raised around $5,000 in funds. It also has demos out, which I built and helped release, on itch.io, Google Play, and the App Store (although currently the demo there is two years old and we hope to finally have an updated demo ready soon).