Just very very very busy with day to day things. Legends 2 is ticking along but as always I got obsessed with a smaller game that I might have a chance of implementing with my spare time at the moment.
So I guess it’s official, I’m starting to work on Legends of Yore 2 – which I’m subtitling Rise of the Darklings. I’ll post some concept shots etc in a minute but I’d like to talk about the process I’ve been taking during the interim for a minute.
As you’ve seen if you read my blog or follow on twitter I’ve been knocking out lots of little game demos, this is how I work. I try stuff, lots of stuff, over and over again until I feel comfortable I’ve got everything down. In this case the projects were:
Voxel Based Engine – Experimenting with different graphical styles
Carubloc – Looking at LibGDX across platforms
Matchnik – To look a procedural puzzle generation
Turn Based Platformer – To look at turn based mechanics with a bit more action
Mega Melon Adventure – To play with gamepads and the OUYA
Sub-pixel Sprite Animation – Obviously more tailored towards Legends, just needed to find a way to generate enough graphics.
There’s actually been a few others that never saw the light of day, including a very random bouncing game. This is I’ve come to understand my process. I experiment a lot before I actually go anywhere. It’s not intentional but I can see the pattern looking back. I’m hoping this is going to make Legends of Yore 2 a better game.
So, enough waffle, Legends of Yore 2 – so far I’m coding and spriting like crazy. Here’s the concept art that I’m currently working for. This time it’s all my own art – I intend to license some music/sounds but everything else should be from me:
The plan for the game is do something similar to last time while fixing as many of the things that I learnt along the way. So the game is intended to be epic in size and scope – hopefully bigger than last time. Things I liked last time:
- No level cap – keep going as long as you like
- Yore – the world, it’ll be set here again though maybe many years on
- Diversity – the varied landscape and characters
- Procedural – the dungeons kept changing but the world above was the same. People seemed to love that
- Items/Armor/Weapons – a huge wealth of things to collect and apply
- Class upgrades – this was a late add but once that I absolutely loved.
- The Second Stat – Wizards got Health and Mana as always, but why couldn’t Warriors and Archers have something special too – Rage and Zen were added. Very neat (thanks to PuppyGames for the original thought on this)
So there were a bunch of things that I did last time but I want to be better this time:
- Magic – last time it was too hap hazard, designing a spells tree with different schools of magic before we get started.
- Skills – as with magic, way to random. Again skill tree designed before hand this time.
- Pets – I always felt like they could have been so much more. I was losing steam with the game when I added them so they came out partially done. Fix them this time.
- Quests – I liked the quests system in Legends, it added a lot. This time I want quests to be richer and more varied.
- Save Games – they will be keyed against an email you provide. Last time it was just too half assed. This time it’s going to be cleanly done with a web portal to support your character.
- In App Purchase – none. ever again. Buy the full version. Your account gets updated. Fin.
- Interface – The interface last time was streamlined for mobile players. It was good. However, this time it’s going to be better and also support console players more naturally.
Finally bits that I want to add that I didn’t have last time:
- Richer graphics, visible weapons, variations in characters, animations and direction changes. Yes it won’t feel quite the same, but Yes it’s going to be better.
- Epic Quests – large quests that get you through the story line more obviously. Legends actually had a story line but I’m not sure anyone saw it
- Underwater – it’s got to be in there somewhere, I’m just not sure how yet. I want it though.
- Dynamic Events – I want the game to still be single player but I’m going to introduce a system that allows me to have “in game events” like a MMORPG. Zombies infest a town etc.
- Player Interaction – While the game will be single player but I want to introduce some innovative ways to have players interact.
So.. yep.. on the way. As always and especially with last game I appreciated all the player feedback and ideas I can get. I’ll be running graphics competitions and other things (oooer) as we go along.
Hope you come along for the ride!
So, I love pixelly graphics. It’s pretty obvious from my games that not only is it the only thing I can draw it’s also the main thing I like to use. I always scale them up 3 or 4 times and get that big clunky retro feel.
However, I’ve never really been happy with the movement in the sprites – specially how long it takes me to do animations. I was looking at Cube World and thinking about the difference in resolution of the character voxels to the rest of the world. Just because you’re working in a theme doesn’t mean you can’t bend it to suit what you want!!!
At that point I’m starting to think above my pixel creations, what if I applied the same logic there. When I scale up my sprites each pixel has 3×3 actual pixels so in the animation there’s room to move parts of the sprite at a higher resolution – neato! Hmm, but how to do I allow myself one resolution for animation and one resolution for pixels? (I want to clamp myself to the right retro feel). Skeletal Animation!
So I rapidly take my existing sprites, rip them into separate limbs and body parts and re-spritesheet them up. A little bit of coding later and I have a skeletal model that allows me to rig them all together!
So now I’m back to my original sprites only with them being built out of smaller pieces. That in itself is awesome since it means I can create lots of variations for a game I’m planning on writing shortly.
Next, what about animation? Once the links between bones are defined and the skins attached all I need to do is apply transforms. Excellent! I can even rotate tiny pixelly weapons to give nice stylistic effects! Me being me, the next think I do is build a Java Swing based tool to support test out different configurations and animations:
So, having defined animations against the bones, I try out a few skin combinations and what do I end up with? Well, awesomeness thats what!
Check out my current cast:
Here’s some tips if you want to write a Java API thats really hard work to use. Doubly so if you want to hit it with the “object oriented for evar!” ugly stick.
- Hide everything! – even the stuff that doesn’t make sense and is guaranteed to be there. Make the user jump through as many levels of indirection as possible to access anything.
- Require Casts! – make sure you use has to cast everything from an interface to a real class before they can do anything. Double points for not making it guaranteed that the objects you’re casting will always be what you’re casting them to.
- Make everything an interface! – always always make everything an interface. Ideally a hierarchy of interfaces that don’t add more than one or two features at each level. Especially good for misleading your user.
- Wrap everything! – related to 3, make sure you’ve wrapped even the simplest of data types in an object – thats always good for memory consumption and is extra effective if you use non-standard naming.
- Runtime Analysis! – while it’s important to wrap anything and everything in an object, don’t make fields visible. Ideally put them in a generic map even at the lowest most specific level of your ornate object tree. Thats reusable and meta right? Make sure the user has to either read the source or use a debugger to determine what the fields are called.
- More code is better! – make sure your user has to write as much code as possible even for the most common use cases. The more code they have to write the more they’ll appreciate the beauty of your API.
We all love object structures and we all love “beautiful” code. However when you’re writing an API it’s about matching the use cases and make the developer productive. Please don’t make them jump through hoops for the sake of your “elegance”.
Another game experiment starting with me wanting to try out turn based platformers. Could you write a game that was platform based but had the turn based nature of Legends of Yore. So I set to work:
The other thing that I wanted to try out was procedural generation for platformer levels – this turns out to be reasonable to implement once you represent everything as a graph. The significant difference between platform generation and dungeon generation is that links between nodes/rooms/platforms aren’t always bi-directional – i.e. you can fall from a platform to another but that doesn’t guarantee you can jump back up. I’ll probably write a blog entry about that later.
Anyway, heres the current state as a web based games (required WebGL), infinite exploration – not much gameplay at the moment:
I’ve started a little indie game review site over at Mash the Pad. The intention is to review games from a developer/cynic point of view and keep things honest and constructive. If you have any games you’d like to get reviewed or previewed just send a contact over from the site.
Let me know what you think!
So I wrote that daft Super Cute Kitten Killer thing as an example of games that should not be made right? So a few people asked for actual game play! Talk about missing the point!
Right, so now, there’s some minor game – you have to kill every kitten every time, three misses and the game is over. Kittens game faster and faster as time goes on.
Let me know as always.
I got contacted by MoGa a while ago, they offered to send me a couple of gamepads so I could add game pad support into legends. I did a pretty average job and it didn’t really work everywhere. Certainly not the experience I’d like players to have – but due to lack of time I left it. It’s been eating at me ever since.
Last week OUYA reached out and offered to send me a unit to port legends over. Same issue was going to turn up again so I spent the time this weekend implementing full gamepad support into legends – every feature of the game is now gamepad enabled.
Now, as you may know legends is complicated, I mean there are lots and lots and lots of options and control so attempting to add gamepad support for all of them seemed like it was going to be a tonne of work. So.. some software engineering to apply!
Instead of just going through every page and adding custom code for each feature I added what I called “PadAccessibility” which was essentially a utility class that every page and tab could use. PadAccessibility allowed the definition of “zones” on the screen – each of these zones represents a touchable area. Reminded me of the Sierra point and click games.
Anyway, when the gamepad is activated the PadAccessibility class can highlight these zones. It’ll also allow navigating though the zones list. Zones can also define relationships between each other – so where you have a grid of boxes like in the Inventory screen you can set up Zones to know that one is above/below the other so navigation feels natural.
Net result: every screen in legends has one of these controllers. It lets you navigate the complete UI from a keyboard or gamepad controller.
Roll on OUYA! Come on Fedex, get that box to me!