We’re delighted to announce we’ll be available worldwide on the App Store on the 17th October. That’s THIS THURSDAY! We’ve also got a trailer which is now public on YouTube. We’d really apreciate it if you’d tell all your friends. Thanks to Alex Bowden (http://www.emotioneffect.com/) for helping us put the trailer together.

We’re busy finishing up Pocket Titans at the moment, so sorry for not much in the way of updates. In the next few days we should be able to put up our announcement trailer and some more screenshots. That’ll be exciting!

Some people aren’t very interested in programming, and that’s fine. You might want to skip this post if you’re one of them.

I wanted to detail some of the technology I’ve used to make Pocket Titans. There’s nothing dramatic here or anything, it’s all pretty standard stuff but might be interesting to someone thinking of getting in to game programming.

Firstly, if you’re going to write a game like Pocket Titans, don’t do what I did, instead get yourself a Unity license. It’ll easily handle all the requirements here and do a great job. Why didn’t I? Because I like writing my own tech and this project was started mostly for fun so I did the bits I find fun, and that meant no engine.

I decided I wanted to write the majority of the gameplay code in Lua. Lua is a great programming language with a slightly ugly syntax, its easy to integrate with an engine and executes pretty speedily. Lua is a dynamic language perfect for the gameplay domain (in my opinion), and this has the handy side-benefit of enforcing a split between “game” and “engine”, where the “engine” is C++ and the “game” is Lua. There are no game-specific C++ lines in the whole game beyond a single start-up function which tells the engine where everything is.

Underneath Lua I use a C++ component / entity model for all game objects. All components (except a specific script one detailed below) know nothing about the Lua integration which is important to ensure modularity.

Communication between components (and between entities) is through a messaging system. The Lua integration also hooks in here by registering for particular messages and calling a named Lua function using the message’s arguments.

Here’s a short code example:

local e = Entity.New( "ENT_TEST" )
e.widget = Widget.New( e )

The first line above creates an empty entity called ENT_TEST. It has nothing but a name (hashed) and an empty list of components.

The Lua Entity.New function causes the entity to be put on the Lua stack. This is done by adding a “hidden” (ie not explicity handled by the Lua integration) component called ComponentLua to it. That component creates an empty Lua table, associates it with the entity and pushes it on the stack. That table is then stored in the “e” Lua variable. There’s a slight cheat here, which is that operations in Lua which look like they’re operating on the entity are in fact operating on the ComponentLua.

The second line calls a function called Widget.New using the Lua table e as an argument. Since the function is told to expect an entity the Lua integration checks that e is associated with one (via a ComponentLua) and calls the Widget.New C++ function with the entity as the argument. That causes a “Widget” component to be created and returned to Lua. A generic component is pushed on the Lua stack as user data linked to the component’s address.

So apparently dogs in games is very next-gen (see Call of Duty: Ghost). Well, Pocket Titans has one too, and this one belongs to Hunter, our penultimate character.

As you can probably guess from the picture, Hunter’s main attack uses his gun to do a ranged attack (which does feel a bit like cheating in a fantasy RPG). His bonus attack traps units in place and opens up Dog’s massive damage Maul attack. Its a hard feat to pull off but well worth it if you can get everything lined up right. Oh – trapped units can’t move too, which isn’t such a hardship when you can move any row or column you want in Pocket Titans.

Character Info

In the beginning Pocket Titans started out as a series of battles one after the other, after that I tried a world map on which all the quests were placed but it felt a bit weird and random. Where we’ve ended up is at least a million times better thanks to some wonderful artwork from Pesty. The game story is told through a series of location maps, starting out at the human town in the picture above and ending up somewhere much more dangerous. Each location has a path through it, opened up by doing standard quests and (generally harder) optional quests.

This week I’ll post the first couple of locations, and there’s still three player characters left to go!

The Warlock is at least 80% more evil than any other character in Pocket Titans, he’s also got easily the most fun ability as his bonus. “Insanity” makes people confused about what side they’re playing for. Cast it on an enemy healer and they’ll happily heal up your own units, cast it on a Mage and he’ll Fireball away at his companions without a care in the world.

(Top tip: Once the Warlock is unlocked, you’re generally better off using him instead of the Mage, his damage is about the same and Insanity is much more useful than the Mage’s AOE)

When we first meet the Rogue she’s in a very sticky situation. Fortunately our heroes get her out of that and she joins the party. Rogues like nothing better than stealing treasure and are particularly useful for opening up treasure chests which are occasionally found between quest rounds.

The Rogue was the first character outside of the original 4 developed, and the first one that gets unlocked. Her damage type “Blood” is paired up against “Animal” damage (Earth/Air and Fire/Water are the original pairs) and she uses a “Poison” debuff which continues to cause damage for a few rounds after you’ve applied it. Poison from Rogues is tuned to not be massively overpowered, but one of the boss characters has a particularly nasty strain of it which can quickly overpower characters if they’re not healed up quickly. She’s mostly a melee fighter, like the Warrior, but a bit quicker and with a bit less stamina so she won’t survive as long under attack.

Character Info

The Ranger is my absolute favourite character in Pocket Titans. Although not as powerful in attack as the Mage she’s ALWAYS the quickest unit in any battle (so attacks first) and has a secret weapon that makes her hard to hit. While most units can attack on rows and columns (Mage) or in melee range (Warrior), the Ranger can attack diagonally as well as on rows and columns. Quite often this means she can get in to positions where she can fire off an arrow without the enemy being able to hit her back.

Character Info

And so to the Warrior… Originally a dwarf, at one point a grizzled veteran of countless wars. Now he’s quite cute if a little bit more complex to play than some of the other characters.

The Warrior is a melee damage class, which means you have to spend your movement points getting him right next to someone to get his maximum damage. He does have a ranged attack, which throws his sword across the screen but its not really useful for much except finishing off a nearly dead enemy.

He also has an interesting bonus ability which was the first “debuff” implemented. Bonus abilities are learned at level 3 and only trigger after a certain amount of damage has been done with the standard abilities. In the Warriors case the bonus ability is Stun, which puts an enemy out of the battle for a few turns. Very useful in a fight against lots of enemies but probably less useful against a single target than the major damage explosions of some of the other characters.

Here’s the stats:

Character Info

Today and yesterday audio superstar James Stant has been recording bits of dialogue for the game. There are about 250 lines of speech in the game – some of which isn’t polished yet, spoken by a combination of about 20 characters sometimes swapping lines depending on who is in the party at any one time. Additionally I’m hoping to translate to about 8 languages. That’s a lot of work when this project isn’t a full time job for anyone so we’ve cheated a bit.

What we’ve done is record a few “mutter” sounds for each of the character types (the 8 player characters, the 3 main enemy races, the bosses, etc) along with reactions to hits, heals and dying sounds. Then during a conversation I randomly combine the mutter lines to give an impression of talking and a “voice” to the characters but without having to have actual dialogue recorded.

Hopefully it’ll work well and in the next few days when the recording is cut up and processed we’ll find out.