Yeah so, once again, a technical problem prevented us from posting our blog on Friday, namely barrels not exploding anymore and ragdoll heads separating from their bodies. We had to debug this instead of writing this blog. But no worries! I think it paid off because we have another animated GIF for you this week.
So yeah, while we were waiting for our bank to send us the legal documents that will allow us to run our Kickstarter, we have made significant progress on every single part of the game. Our milestone chart is now so long that the milestones at the top of the list are now older than the universe. We also hired 3 immigrants full-time to scroll to the bottom of the document for us every morning. Here’s what it looks like:
Here’s a few things we did more specifically:
Finished editing the interview video for the Kickstarter. This was a long and arduous process that consisted mainly of us listening to our stupid faces talking for hours and then selecting the scenes where we look the least like retards. I think the video will be OK, but honestly, I’m just glad this is over.
Started eliminating memory leaks, and worked on RAM management. Our biggest problem right now is the amount of geometry that our islands require. A very large island right now brings the game dangerously close to the 2Gbs limit that the engine can handle. So we will focus in the next weeks on creating additional Levels of detail so we can replace detail mesh with approximate meshes for faraway terrain.
Speaking of saving geometry, we have started working on mesh simplification for the bottom of the islands. The problem right now is that since the undersides of the islands are not smooth, we can save very little geometry when simplifying the mesh. One of the main methods of saving geometry is to combine redundant vertices. These duplicate vertices usually have the same position, but do not have the same UV coordinates or the same normals. These duplicates are necessary to make tiling textures and “hard” edges. However, at a distance, tiling and hard edges are not necessary, so combining them becomes a possibility. The problem with the current island underside is that every single face has hard edges, due to being voxels instead of smooth terrain. We are working toward a solution that will let us smooth the bottom of the islands at a distance.
Unified the damage dealing mechanism. Now, characters, explosions and physics impacts deal damage and several types of objects can receive it. For example, an explosion might kill a bad guy while also blowing up a door right beside it. The two entities will have received the same message and will react according to their own behaviors.
Added several new tools for the cinematic scripting engine. Having used it for 3 weeks now, I can safely say it’s becoming pretty powerful. It will be the subject of our blog post this week:
A cinematic scripting engine?
We realized a few months ago that we would eventually need to show specific parts of the game by video in the form of a trailer. The problem is that Castle Story is a slower game than the average and that setting up some of the scenes would be an enormous pain in the posterior. For example, say we have one army attacking a castle. The scene involves a player and an AI. Now unless we want to specifically capture gameplay footage, we would need to give orders to our units while recording the scene, which is quite hard to do for a single person when you think about it.
In my brief time in the video game industry, I was tasked with recording gameplay for trailers. We would be paired into teams of two, one had to play the game while another would control a camera to record the action. The thing is that we were playing a third person platformer, Castle Story is a real-time strategy game with complex player-driven actions.
We searched for a few solutions to this problem, and we came to the conclusion that we would eventually need to be able to procedurally send orders to the various characters and objects in the game. This meant that we would eventually need to write a script-based event sequencer.
What we have right now is a text parser that reads a text file. We’ve created a simple syntax that allows us to spawn characters, interact with objects and send orders to anyone in the scene. Additionally, we’ve created a large selection of camera movements that allows us to film the scene from any angle imaginable.
Here’s a little scene we created today in about twenty minutes:
This scene shows off many features of our engine:
Waypoint-based movement for units or groups of units. In this case, the archer and one of the knights have orders to move along a predefined path. The worker is sent through the door to the barrel and back at the door before running away.
Specific actions like picking up and dropping objects. In this case, the worker carries a barrel and places in in front of the door. These orders can be mixed with movement orders by putting delays.
Complex camera movements. You can see that in this case, the camera orbits around a position. But other subtle movements have been blended in, a slight translation of the camera and an upward rotation. Finally, a good old camera shake effect has been synced to the explosion to give the appropriate effect.
Trigger specific object behavior. The barrel in this scene had been given the order to blow up toward the end. In another scene, a catapult might be given the order to aim and shoot at a certain position.
The scene before being played looks like this:
Needless to say, the possibilities that this tool gives us is pretty exciting. Not only will this give us the ability to script in-game cinematics with ease, it also helps us record video for us to post on Youtube if need be. The option of also releasing a simplified version of this engine to the public combined with sandbox level editing creates immense potential for machinima, don’t you think?
Soundtrack of the week
I’m not much of a hip hop kinda guy. But Nujabes‘ music really has something special. Too bad he’s not around anymore to make more of this.
I had a hard time choosing which album I should include, but I think Modal Soul represents his work best. Also check out Luv(sic) on Youtube.
36 Comments for Dev diary number sixteen : Saturday night at the movies