This post is a status update, which is how I track progress specific to my game. Check out my timeline to see what I've recently accomplished.
I’ve done quite a lot over the past two weeks. Work has started on melee combat. I’ve hired a composer! But most of all, I’ve been consumed with cutscenes. When I started this process, I didn’t realize that the decision to add a story to my game would end up costing me ~30% of my budget and an equal amount of programming time. Now that I’m actually implementing the story, I’m starting to understand all of the implications.
As always, I cover all of this in the video update, so follow along there if you prefer.
Let’s break down each of the tasks I took on over the past two weeks.
I left off last update working on ranged combat, so I carried that into the first week by working on melee combat. The good news is that the code to process combat works just fine, so no refactoring was needed. The bad news is that combat doesn’t look perfect just yet. See for yourself.
I have to play around with making combat look more natural. For example, have soldiers feet moved when they are pushed. Or, when processing allows, have a soldier walk around someone rather than through them. Finally, if it’s 4 on 1, have the 4 properly surround the target. Right now, they just walk in a straight line directly to the closest target.
I would have continued working on this, but I received an unexpected email.
Hired a Composer
I’ve received a few emails about music needs for my game, and I’ve told everyone that I’m not ready to think about that yet. The other day, I was contacted by Tony Manfredonia and felt the urge to do a trial with him. Something about the tone of his email showed me he cared about his work, and was genuinely interested in my project.
So, I ran through a trial with him (samples in the video above), and everything checked out. At first, he gave me a sample title song. Then, followed up with a battle song. I plan to write more about this in depth, but we went through 8 revisions on the battle song. He was cool with the entire process, and open to feedback. That’s the kind of person I like to work with, so I’m excited to start with him in May.
Because a composer needs a story to compose, I immediately switched gears to cutscenes. As far as timing goes, I should be finished with them by the end of February, so that they are ready for voice overs. Then, with voice added, send them off to the composer.
Cutscenes are hard. Here’s why:
- Dialogue is hard. I keep iterating to try to stay away from the cheese.
- Timing is hard without sound and music. Sometimes, a pause is just too long. Other times, with the right music, it is the perfect touch.
- They have to be skippable / skimmable, which requires a lot of flexibility in the code.
- Effects and animations are time consuming, and will stand out if they aren’t polished enough.
- Camera work / placement is a skill in itself. Basically, I find myself having to research basic director skills.
Given all of that, I’m both excited and nervous about the end product. But, I’m committed. For now, I’ve got a basic, skippable engine in place and roughly 1⁄4 of the content in there. I’ll keep working towards a finished product over the next month.
While working on cutscenes, I received quite the education in scene management. There are both technical and logical challenges.
On the technical side, scenes have to transition into one another gracefully. This is easier said than done when working with large assets. So, to implement transitions, I have had to start a preloading system. Each scene has a tree of next scenes, and based on the state of the game will being a background thread that preloads the upcoming scene. This system allows for graceful transitions like this:
On the logic side, there are a bunch of edge cases with players quitting the game or turning off their device. Some scenes, like story dialogue, can be marked as complete if they get shown. Other scenes, like player decisions, must have a decision made in order to not be shown again. That decision must be stored somewhere. I’ve started the process of implementing that. Another example would be the world map. If revealing a new level, zoom in and show it. Otherwise, show the entire map in its normal state.
Next week, I plan to really flesh out the two scene management concepts I talked about above. Once that foundation is solid, I can go on an implement the next 1⁄4 or so of the story.