Functionality


This week, I made the game nearly fully functional. It is finally playable and ready for playtesting!

I originally planned on doing all of the coding myself, which I now realize would have taken weeks to achieve even the most basic version of what I wanted. I had been trying to teach myself how to code a branching dialogue system in Unity with C#. I got it to work in Twine for my game on the Italian Renaissance, and I was looking for a plug in to let me transition a twine file into Unity. But! I was only doing that because I didn't have any funding to pay for a dialogue tool (or some poor Computer Science student) to help me. It takes a huge amount of time and coding knowledge to make a really good dialogue system, and many Indie games seem to purchase tools to help them. Now can afford to do the same! 

I applied for two scholarships about a month ago to help me develop my thesis project, which is another 2D game designed to teach students about the 15th century Italian Renaissance. I am very fortunate to have gotten both of the scholarships I applied for. That means I now have enough funds to pay for tools to help make coding my thesis easier. I get to use these tools for my thesis, but it's not like they get taken away after I graduate or anything, so I get to keep them to use on all my game projects. There is so much overlap in the structure of this Russia project and my thesis, that any tool I purchase for my main project will have useful overlap here.


--- DIALOGUE ---

The only tool I have purchased so far is PixelCrusher's "Dialogue System for Unity." It is a tool designed to make complex dialogue super easy to implement in games, partly through visual scripting.




For this project, I need to be able to click on each NPC and have a conversation with them. Just as I laid out in my dialogue spreadsheet, each conversation would have the same structure. You could ask each NPC the same questions in nearly any order and they would have a unique response. 

To make this work in Unity, I started by making a dialogue component using my new Dialogue Systems tool. The fact that I can visually plan out the dialogue rather than hard code it is a HUGE time saver! It makes everything so much easier and more intuitive. I started with the Solovyov character as a template, making a flow chart in Unity to visually script how I wanted the conversation to go. 



I made a new speech node in the conversation flow chart for every line of dialogue. The orange node represents the beginning of the conversation. The blue nodes are the player's dialogue choices, and the grey ones are the NPC's response. Each new dialogue path leads you to new options, but I designed it so you always have the choice to go back to previous options. 

After you ask the NPC's name to begin the conversation, there are roughly 12 questions you can ask them, which I have grouped into 4 sections to reduce the choice paralysis for the player. They will see the first 3 questions upon asking the character's name. These are all small talk about the NPC's job and friends, and the literary salon. If the player doesn't ask about any of those things, they can "ask [their] opinion on something" to reveal 3 new categories: "something specific," "something general," and "about the factions." Each of these groups has three related questions. This way, players will be able to ask about a wide variety of topics without having to choose from a giant list every time. 





Once I got the flow chart logic right for Solovyov, I copied his conversation to make a new one for each other NPC using the same structure. I copied and pasted the correct dialogue for each NPC from my spreadsheet into their new conversation component. This process was very long and tedious, but now I will be able to edit the text directly in Unity instead of using the spreadsheet. 

Once I finished that, I hooked up the correct conversation to each corresponding NPC and made it so that their conversation starts when you click on them. I used one of PixelCrusher's pre-made UI templates for the interactable dialogue box, but I had to tweak the font size and layout a little bit. I will continue to update it -- maybe even replace it entirely -- as I continue developing. 


--- BARKS ---

I also went ahead and wrote a series of "barks" for the NPCs to say periodically throughout the scene. A bark is a line of dialogue that an NPC says outside of a direct conversation. Think about any game you've played where you walk by an NPC and they say something briefly to you without you having to interact with them. That's a bark. A great example is the guards in the Elder Scrolls series: 

"You never should have come here!" 

"Need anything?" 

"...but then I took an arrow to the knee." 

These aren't necessarily good barks -- they are so repetitive they've become popular memes. But that just makes them very recognizable examples. 

Since my game is set in a literary salon where people are sitting around and chatting, I wanted each NPC to say a short line every once in a while to indicate they are involved in a conversation with other characters in the room. To start, I wrote a series of generic lines that sound like polite interjections to an academic discussion:

"Certainly!"

"How interesting."

"Have you considered..?"

"Is that so?"

"I'm afraid I must disagree."

"What do you make of..."

etc.

Then I hooked up the "Barks" conversation where the dialogue is stored to each character object. All of the NPCs can draw from the same bank of lines. I added a "Bark on Idle" script to each NPC and set it so that each character would say one random line of dialogue from "Barks" every 5 to 45 seconds. That way, the NPCs stagger when they are speaking and the barks appear random, as if going along with the flow of conversation in the room. 

My goal is to have the bark appear above the corresponding NPC's head, stay for a few seconds, then disappear. I haven't gotten that to work yet. For now, the barks appear at the top of the screen and stay there forever. It's on my to do list to fix.




--- BASIC NAVIGATION MENU ---

In order to begin playtesting, I needed a way for players to switch between scenes without downloading multiple build and switching between game windows. The easiest solution was to make a bare-bones menu that I can replace with something better later. Players can select which scene they want to enter. They simply click on the button and it will take them to the corresponding scene. The buttons provide very basic user feedback by changing colors when the player hovers over it with the mouse or clicks on it. I also have a button to return to the main menu from inside each faction scene. That way players won't get stuck in one scene with no way to navigate between them.




Obviously, this UI is pretty terrible. I just needed it to be functional at this point so I could have students playtest the four scenes in my game without having them download four separate builds. This awkward menu is like the duct tape of UI, and I will be replacing it as soon as I can make better art. The code, thankfully, can stay the same.


--- SOUND ---

A few weeks ago, I began looking for background music. The goal of my search was to find .mp3, .mp4, or .wav audio files that I could upload directly into my game project and have play quietly in the background. Fortunately, I was able to find modern recordings of Pyotr Tchaikovsky's work, available to download and use for free on Wikimedia Commons. Tchaikovsky is a very famous 19th and 20th century Russian musician. He is best known for The Nutcracker, but "Dance of the Sugarplum Fairies" didn't seem appropriate for a literary salon. 

I sampled a variety of his music on Wikimedia Commons and selected several songs that seemed quiet, mostly calm, and long enough to avoid repetition. Of these, I picked one song for each of my four scenes. I created an empty game object to hold the audio file, then set it to "play on awake" so that the music would start as soon as the scene loaded. I made sure to loop it so that it would start over if a student stayed in one scene long enough to hear the entire 8-12 minute song. 

Some of the sound is a little loud, and I'm not sure if it entirely fits the mood, but I can keep tweaking it. I also need to source and add sound effects. I'm considering enlisting my boyfriend to help me record short voice clips. Maybe we'll just do different variants of "hmm?". I definitely want to stay away from Russian accents and voice acting. 


--- FINAL THOUGHTS ---

I am thrilled with the game's progress. I went from feeling pretty behind on both my projects to feeling like I'm in a really solid place with the Russia game's development. I'm so grateful that I was able to receive funding to make the process easier. Now I can focus more on making the game polished and user-friendly in the final stages of development rather than scramble just to make it functional with spaghetti code at the last minute. 

This week, I plan to begin playtesting. I will reach out to both of my mentors, MJ and Linda, to see if they can recruit students to test the game and fill out a short feedback survey. I will also advertise to my peers from the two times I took the Reacting to the Past class, as well as other friends who have taken it before. I'd prefer to have a mix of play testers, but previous Reacting to the Past students will likely have the most useful feedback.

Get Reacting to Revolutionary Russia: An Educational Video Game

Leave a comment

Log in with itch.io to leave a comment.