So much has happened since the last installment of our diaries that I suggest we give the intro a pass and get right down to brass tacks. We’ve pretty much finished the main storyline, so now it’s possible to play the rough draft of the game from the beginning to the penultimate episode. Writing the finale without Lo Pheng was a tough nut to crack and our scriptwriter is twitching around like an angry eel on a hot frying pan, that’s how badly we want to hold onto the fever-pitch of emotion and the density of events that would have been unleashed if the protagonists had collided at the end of the game the way we planned them to. Above all, we wanted to avoid writing anything stupid and just bring things to….
Early in the month I streamed the first episodes of the game online and we received a lot of comments from our Russian readers about the “staleness” of some of the characters’ dialogs, so now we’re frantically trying to fix this without causing downtime for our translators.
I love walking. A part of the route from my house to the office passes along the Moskva River embankment at Maryino Park. Now I’ve got something to fill that time other than enjoying the silence and the scent of the water. Like any normal human zombie I can now stare at my phone while I’m walking.
That’s because we finally managed to compile our battle “sandbox” to run on Android this week. It contains 36 finished characters (we still need to animate and integrаte seven more) and is indispensable for testing the AI and balancing the skills. It also provides me with the opportunity to watch how the AI plays itself and how deterministic its behavior is. A good AI should be able to lose in an interesting way, and that’s the main thing we’re trying to teach it at this stage.
That’s Thorn and company on their way to a get-together to find out what’s taking us so long. It’s tough to admit, but since the end of May we’ve practically had to rewrite the code for the combat system and the toolkit for creating combat characters. The first implementation required too much individual scripting by hand of the different skills.
In its new incarnation it consists of a couple of simple YAML files, and now you can describe all the animation, commands, skills, special effects and audio files of the characters with a basic text editor. A small script file does all the remaining dirty work for you. I don’t know how true Unity disciples manage to pull it off, but to my modest taste creating 2D animation “the Unity way” is a bag of hurt and a cup of unadulterated, over-the-top agony. It’s as if you’ve fallen straight into the Sixth Circle of Hell, and a simple piece of work that should take around 5-10 minutes turns into hours of clicking on the editor’s “convenient” tools and inspectors.
Battling the AI in one of the first game scenes. But right now Unity isn’t our main headache. The biggest pain of the combat system is the UI and controls. They’re terribly inconvenient. We’re going to have to redo the card panel. In all probability we’ll have to hide them under the clock so we can save some vertical space. If you saw any of the screenshots or videos from the previous version, you’ll notice that we also took away the side panels with the portraits. We did that for the same reason. They were taking up too much space.
The UI and art
Here are a couple of thoughts on the skills selection menu during combat. And below you can see the character profile interface. As we speak our awesome busy bee, Julia, has practically finished all the remaining UI elements for the single-mode game. All that’s left is the main menu and the interface that handles winning or losing in combat. After that we can roll up our sleeves and rework the combat UI and map navigation. Right now it’s really hard to select a specific road with your cursor.
The last couple of months I’ve earned myself a deserved spot in the “Additional Programming” spot of the credits. That spot is usually reserved for the young guys who can’t not be mentioned, but who spend all their time on all sorts of crap (and by that I really mean crap, not just all the loose ends). And that can be anything from assembling the texture atlases, preparing the automation toolkit, creating the builds or doing what I mentioned earlier in this instalment, namely putting together the Android version of the game. Some may think I’m already in the “acceptance” phase, but I prefer to think (probably unreasonably) that I’m still in denial.
We’ve also started working on the skills and upgrade icons for the game, and we’ve drawn the first set of objects and the first 62 portraits of our Kickstarter backers.
While our art director was on vacation, we started applying some spit and polish. Andrei is working on the color correction to better convey the atmosphere of the game and make the picture sweeter on the eye. Below you can see the “before” (left) and “after” (right).
The scenes are getting a bit murkier, with more contrast, and there’s a slight coldness to some of the hues. All in all we’ve practically drawn everything that had to be drawn. There are just a couple of scenes left that we’ll leave for last, namely the intro and a couple of cinematic animation scenes at the beginning and end of the game.
Now that we’re able to play the first build, it’s becoming apparent that we’re going to have to shorten a couple of the scenes, as well as add some fights linked to the plot, both new ones and ones we’d previously cut out. For instance, that includes an extra fight scene when Thorn and Gleda run home after their fight with the Reaper, and the game intro, where Hopper Rouley meets up with Amma.
A bit about the plot and the Photon Server
It just so happens that I began writing this instalment of the developer’s diary in the beginning of May, and here I am, finishing it in August. Most of what I’d wanted to tell you about the plot has already happened. On the whole, we’ve finished the story. We’re still making a couple of changes to the two final episodes and writing the promised quests, so although there are still bugs and glitches, it’s already possible to play the game from start to finish.
At the beginning of spring Nevigo (the developers of Articy Draft) announced Articy 3, and with it a native plugin for Unity. There was no time to try it out or experiment with it, so we just postponed this job for after the upgrade.
These cute little skeletons are showing their joy at the fact that we ported everything we’d already written on the Articy Access API to the new Unity plugin, while silent tears rolled down our bearded faces. This hurt, because we’d pretty much created our own equivalent of their plugin from scratch, meaning we’d wasted almost one and a half months. But I’m glad to say this time wasn’t entirely wasted, because we now know our new tool from the inside out and have a near perfect understanding of how to use it.
We already started working on the online version of the combat section in mid-March. This was important, because we wanted to show live gameplay to Square Enux Collection (SEC) as well as record some scenes for our Steam Greenlight and Kickstarter campaigns.
Of course, SEC told us to go to hell, so to an extent the rush and change of priorities had been all for nothing. PhotonServer really helped us a lot to get a working build of the online game up and running. There isn’t much I can say about PUB and PhotonCloud, because we’re creating the multiplayer version with a bunch of server-side checks and balances. That’s why we’re using PhotonServer. That being said, we chucked out almost 90% of its loadbalancing. Data transporting in PhotonServer is really cool and convenient. Just a couple of lines of code and you’re already creating business logic. Searching for matches, scaling, expanding the list of network commands, organizing lobbies and rooms—all of this is first and foremost peer-to-peer stuff and a matter of how you configure it on the authorizing server, which does all the calculations for you.
Both Loadbalancing and Hive make it very easy to change the relationships between a group of players, provided those relationships can be expressed with a simple dictionary of keys and values. But it’s really painful to implement your business rules on top of them. You can do this by means of plugins, but it’s not a very convenient process. I experimented with Netty and its port, DotNetty, and if I’d had just a bit of extra time I would have thrown Photon out and used it instead. The only thing Netty lacks out of the box is the ability to compile for HTML5 platforms with support for websockets.
The last time I’m writing about the music…
You probably know by now that we were able to get a bit of extra money on Kickstarter. That allowed us to record a couple of extra music tracks, and Adam and his team are finishing the last of them. That makes me both happy and sad. On the one hand, that means one of the pages of our development history has almost been turned. On the other hand, it also means we’re finished and there won’t be any new compositions.
On the photograph above you can see Aleksander Grochocki (mandolin and drum), Michał Cielecki (keyboard) and Magdalena Przychodzka (vocals) busy recording the music for the outro video.
Adam, guys… Thank you for your magical work and your incredible music. I’m very glad I had the opportunity to work with you. Adam is a really amazing composer and a great guy. If you’re looking for cool music, he’s your man!
The game has one very special piece of music called the “general mood”. We didn’t create it as a single six-minute composition, but as a set of fragments that can be assembled into different tracks or just one longer track.
Here’s an example of it. It’s the working version of one of our final compositions, a track for “darker” scenes such as dialogs with blatantly evil characters or grisly situations.
I don’t want to spend too much time on our experience. Yes, the preparations took up a terrible amount of time and nerves. I think we’ll relive that experience all over again when the time comes to ship the physical prizes. I should probably write a separate post on the topic of everything we did 100% wrong, what we got right and what we got wrong.
Right now I’d like to say a big thanks to everybody who helped us. Thank you very much, guys! And yes, if you want to launch your project on Kickstarter, you should think ten times whether you want to mess around with physical prizes.
We need to put together the final UI, finish the character upgrade code and transfer all the workings of that part of the game from the design documents to the game itself. We need to fix the style of the text based on the results of the first play-tests and finish the AI. I really want us to finish the multiplayer version before the end of the month so we can share it with the backers and with their help conduct another round of balancing the classes and their skills.