Its finally up! (Well technically its been up since the 15th.) Now squidly adventures, involving perhaps an unparalleled amount of turning around in circles, are available on the iPhone, iPad, and iPod touch.
The last hope for humanity lies with the tired and rusting space freighter Old Jolty; decommissioned long ago but haphazardly brought back to life for one final journey. She has no weapons and she can’t turn left, but she must save the cosmos!
As you may have noticed, its now time to bring myself to the bit of this cycle i’ve been dreading the most, the shameless advertising! On that note any form of retweets, likes, reviews or brief mentions would be incredibly welcome ^^.
Ta-da! Its done! Well… mostly. If this was a just for fun project i’d probably go ahead and distribute it as is and be loyal to the deadline, but this will be going on my portfolio. Thusly it deserves a whole lot of extra scrutiny, testing etc. Still assuming nothing dramatic happens it should be live on the app store sometime this month.
If you’ll allow me to indulge my pedantic nature a moment, theres a couple of differences between the game and video I feel obliged to mention. Firstly, the mission menu has two scrolling arrow buttons not one. Secondly, the later gameplay from the footage has a return to menu button in the corner. These differences are due to me recording the game running on a Mac instead of an iPhone.
I considered using this post as my onegameamonth submission and sneakily editing in a link here later when the games on the store, but that seems a bit too cheeky. So I think i’ll just have to put Old Jolty down as an August submission.
That’s right I’m still alive! (As is Mr Green line, dispute my best efforts.) Apologies for the prolonged radio silence, long story short, everyone else has had far more important things going on in their lives lately so I’ve been doing a bit of a one-man development team thing even more then usual over here.
But I’m back on the radio now, and as you’ve probably noticed, I’ve brought some progress back with me. You might also have noticed I replaced the site’s games page with a page all about lunacy with far more up to date information.
I’m doing a bit of reorganizing over here, when that’s done I should start blogging and tweeting more frequently again.
Another development video, this time with 100% extra ominous green line! Sorry about that, my video and YouTube had a falling out.
This post is about something a little different, I’ve spent a lot of time fussing with optimization during the course of Lunacy’s development and I thought I should share some of the more obscure things I’ve learnt, on the off chance I can save somebody else hassle in the future.
There’s already a lot of information on the web about the more common approaches to optimization, lowering frame rates, removing lag etc. Repeating all that information isn’t the purpose of this post, so to that end I’ll only provide links to the following webpages, which were a great help to me.
The actual purpose of this post is to highlight a few of the less well-documented potential sources of lag/lower frame rates I’ve run into so far:
1. Unity Planes
Unity planes, (the ones from game object -> create other -> plane), are not your friend. Firstly they come with mesh colliders, you’ll want to change these to box colliders, as mesh colliders are more intensive. (And as far as I can tell, completely unnecessary for a plane.) Secondly, these planes consist of a great many triangles, so you could potentially stand to gain by replacing them with simple (two triangle) planes you’ve brought in from a 3d modeling program. Doing so will make you unable to effectively use vertex lighting on the planes or things like fog. However if you’re not using fog and using baked light mapping, which you’ll probably want to do as its less intensive, then the 2 triangle planes should serve you fine.
2. Too Many Active Objects
Now this may seem ridiculously obvious, but it wasn’t for me so for the sake of any likeminded folk reading this I’m including it.
My trail of thought was that I would be able to get away with large amounts of objects as long as they weren’t within the camera’s rendering range, weren’t referred to by any active scripts and were just simple objects. I tested this with basic cubes with box colliders in Lunacy, queried Unity Answers, but ultimately came to the conclusion that I was completely wrong.
As long as the objects are toggled to active, even if they’re very simple, are not having their polygons rendered and are not interacting with anything, they will still cause a significant drain on performance in large numbers.
We had always intended to have fairly large and expansive areas in Lunacy, to compensate for us not having the manpower to produce a large variety of them. But of course large areas require lots of objects and I ran into this issue. Ultimately to counter act this issue I scripted a system in which all the environmental objects in each area are activated and deactivated in tile-marked segments as the player moves around. The cost of this is the occasional brief loading pause mid level, but it’s a price we’re willing to pay.
3. Dynamic Text
This one comes down to using a custom font set to dynamic, as they are by default. (Set under “Character” in the font import settings.) Dynamic means that Unity generates a texture for each character in the font on-the-fly the very first time that character is displayed. I’ve found in certain circumstances this can cause tiny lag spikes the first time specific characters are displayed. A simple enough solution to this issue is changing “character” in the font import settings to ASCII default set. Though this will mean you’re stuck with only one font size per font file and can’t align the font to center or right.
A Final Note
I should stress these are simply things I’ve found to be the cause my own problems via my own experiments, so they won’t necessarily be the cause of any problems you might be having or even be worth worrying about in your game.
Furthermore, this is my first time working on an iOS game, I’m still learning, so if somebody out there does have reason to disagree with any of my conclusions or can shed light on why number 2 happens, do let me know!
I should also mention that we’re developing in the free version of Unity 4, so if you have Unity Pro I imagine point number 2 could be less of an issue, as you can use static batching.
I know I promised an explanation in regards to a certain Vampire T-Rex, but I’m afraid that’ll have to wait until the next text-based update. For now please enjoy this long overdue gameplay footage.
Things are starting to come together now, here’s an update on what’s happened since I last posted:
- The game has undergone a mass of optimization and bug fixing.
- After some bickering with it I’ve managed to convince the iPhone 4 to let us use areas/levels arguably far larger then any mobile game should reasonably employ.
- Zombies now scatter supplies (in the form of tinned food), health packs and ammo packs on death.
- A rough version of the suburbs (Lunacy’s first area) is now in game and working.
- We’ve now got the zombies spawning off camera in little groups in a fairly intelligent manner.
- All the code for searching buildings is written out and awaiting implementation.
- Andrew (Shelton) has very nearly finished making us some frankly quite awesome background music.
With that out of the way, I’m once again going to have a little ramble about elements of the game itself, this time how I intend to approach its narrative.
Now I’m a storyteller at heart, I DM pen and paper roleplaying games, have written pages upon pages of lore for mod projects and, god willing, will publish my own roleplaying system and world one day. So naturally I’ve always wanted to give Lunacy some form of cohesive narrative other then just “You’re traveling from A to B to C killing zombies and other exotic things as you go.”
However, Lunacy is a mobile game, designed to be played in short fast paced sessions. Filling up this limited playtime with dialogue or narration would force the play sessions to be longer, increasing the chance the player will need to put their phone down and do something else before the end of the session.
Furthermore Lunacy is also primarily an action game and interrupting the pace of gameplay in the middle of a session to force dialogue or narration onto the player could annoy a large part of the games potential audience; who likely isn’t interested in slowly unraveling the sinister truth behind why the dead are walking or their characters thoughts about the situation. Rather they just want to have fun fighting some zombies as a werewolf for a little while.
Because of these factors I’ve resorted to what I think is an un-intrusive method of storytelling, one that essentially renders the thick of the games story optional. In each of the games area’s the player has a large amount of objectives to complete in order to unlock the next area. I intend to have the player’s character reflect on their experiences in short, tweet-sized journal entries every time the player completes an objective. All these remarks will then be available in the character’s journal outside of game sessions (and not be forced upon the player in any way), coming together to tell the story of what each character perceives to be going on in Luna City.
Meanwhile anyone not reading the journals will still have a vague narrative akin to many existing mobile action games simply because of their progress through the objectives and the gameplay itself. On a related note I intend to give every element of the game some kind of grounding in the setting as to not break immersion, thusly even the freemium elements we intend to include will make narrative sense within the setting.
And there you have it, I have plenty more to talk about but I think that was definitely enough of a wall of text by itself. Next post I’ll venture into the questionable sanity and reasoning behind why there’s going to be a Vampire T-Rex in the game… yes, you read that right.
Lunacy’s new logo, courtesy of Hedjeroo.
Not much to report in the way of changes to the development build, the only obvious change since GameDevMidlands is that reloading now takes 2 seconds and is visualized via an animated icon above the protagonist’s head.
However outside of the dev build there’s been quite a lot going on. Andrew Shelton has joined the fray and is working on some sweet sounding background music for us. Likewise Richard Haddon of Arctic Furnace is now contributing 3D models to the project. So much prettier screenshots are on the way!
Progress update aside I’m trying to write a little about the intended gameplay in each of these updates from now on, this time I’m going to touch on Lunacy’s RPG/progression elements.
In lunacy your werewolf gets more powerful as you increase their level and get them better weapons. As you can probably guess you get levels via Xp, which you get by killing zombies. However you also get a small amount of Xp for searching buildings. Each building search consists of your werewolf briefly entering and exiting the building, you don’t have to navigate around the inside in any way.
Weapons are a bit different though, to get them you have to trade supplies (the games main currency) with survivors you have previously rescued, who will then go out and find the desired weapons for you. You find supplies by searching buildings as well as getting a tiny amount through; you guessed it, killing zombies. However finding survivors is a little more complicated and involves tracking them down by their scent during gameplay. More powerful weapons can only be attained with more allied survivors, and each area only contains a limited number of survivors in need of rescue, so if you want to play with the big guns you’re going to need to explore more and more deadly areas.
Meanwhile leveling in lunacy is pretty simple; your werewolf has four attributes as described below:
Strength (increases melee weapon damage)
Precision (increases ranged weapon damage)
Speed (allows you to move around the map faster and outrun zombies easier)
Endurance (increases your health points)
As you can probably guess, after gaining a level you’re given a number a points to distribute between these attributes as you see fit. However each character starts with significantly more points in a single attribute. Colt has more endurance, Lupa more speed, Griogair more strength and Ivorie more precision.
And that’s how the games core progression is intended to work at the moment. As always any feedback and/or comments are welcome.
(Note: The gameplay image above uses placeholders instead of scenery, gameplay will get prettier, honest!)
I’m long overdue going into some detail about the game itself, so with out further ado, here’s a breakdown of Lunacy’s core UI and Controls:
- XP: Tracks your experience points, fills up into a half moon shape.
- Rage: Tracks how much rage you’ve acquired during the session. When it becomes full this meter starts to flash and tapping it will activate your werewolf transformation.
- Equipped Weapons: Your character’s ranged and melee weapon for this session. That question mark is just a placeholder filling in until melee weapons are implemented.
- Reserve Ammo: How much ammo you have remaining outside of your weapon.
- Loaded Ammo: How much ammo you have remaining loaded into your weapon and ready to fire.
- Health: This ones pretty self-explanatory.
- Left Joystick: Controls your character’s movement direction. Double tap changes your weapon.
- Remaining Moonlight: Tells you how much time you have left before the game session ends.
- Right Joystick: Controls your character’s shooting direction. Double tap reloads, moving ammo from reserve to loaded.
I can also report the following progress since my last post here:
- I’ve added blood splatter effects.
- Finished the Zombie models.
- Put said models into the engine and animated them.
- Built upon the zombie AI so they now have dodgable attacks, and we have some measure of control over whether they pause prior to or after throwing a punch.
- Implemented Hedjeroo’s lovely UI.
Sadly I couldn’t attend GameDevNorth last week but myself, Andy and hopefully a much prettier build of the game should be at the first GameDevMidlands later this week.
We’ve settled on developing Lunacy for iPhone 4 and higher only, allowing us to take advantage of higher resolution displays. Sadly it simply makes more sense for our first game then throwing more time and money at trying to support anything older.
Since my last post I have mastered the awesome power of Blender, along with the new Unity Mecanim Animation system (Which is great btw) and can report the following progress:
- Colt is in game and functioning.
- The animations for protagonists moving about with and without duel ranged weapon sets have been implemented. Adding in any other ranged weapon from here on is easy. Likewise adding other protagonists would be easy from here on, if they weren’t more time intensive to model.
- I’ve jazzed up the gun firing FX.
We’re aiming to have all our placeholders replaced with functioning game assets soon and have the games first proper build with us at GameDevNorth later this month. I’ll also endeavor to post updates here more frequently from now on.
And now, a random artdump; It’s 3D Colt next to 2D Colt. (We’re going with pretty minimalistic 3d graphics on this to leave plenty of processing power for zombie hordes.)