Archive for the ‘News’ Category

Version 2.2 submitted to App Store

Posted: August 6, 2013 in News

I was able to personally observe hundreds of people use Numberheads during the Casual Connect conference last week. I was surprised to find that about 25% of people didn’t recognize the cartoony numbers used in the game as numbers!  This was unexpected and needed to be dealt with.

I spent a long weekend adding a “skin” capability to the game; allowing players to choose the toony numbers or normal numbers (with the normal numbers being the new default).  This is now resting at iTunes Connect waiting for review and release.

TOONY NUMBERS   iphone5_image1    NORMAL NUMBERS iphone5_image1

Unity Shader Tutorials

Posted: July 15, 2013 in News

Just got an email from Prime31 – maker of excellent native plugins for iOS and Android.

Prime21 mentioned that they have a list of 5 tutorials on Shader programming. They were posted to YouTube a few months ago, but it’s probably of interest to the Unity3D community.

You can check them out HERE

Game Video

Posted: July 15, 2013 in Marketing, News
Tags: , , , ,

Just sent a new, improved Numberheads Version 2.1 to the App Store (waiting for approval). Here’s a roughly 9 minute game play video

Available on the App Store: http://bit.ly/YpxVEL

Back in the Saddle Again

Posted: July 2, 2013 in News

No posts since May 6!  Chalk it up to literally not being able to use my right arm as it more-or-less locked up. Imagine it hurting to put your right arm in the position needed to use your mouse (actually, a trackball for me) and likewise keyboarding was impossibly painful.  Try rolling over to the right during sleep and waking up in pain several times a night.

Torn Rotator Cuff was the initial diagosis.  Some Tramadol-based pain killers added to the recipe and I couldn’t think straight enough to code (much – I guess I’m addicted to code 🙂  ). Arthroscopic shoulder surgery on June 12 left three tiny scars and cleaned the mess up. But then comes the Vicodin. Try working while taking 5 of those a day for a week or two. It’s hard to focus on daytime TV much less write C# scripts.

If you’ve ever seen the U.S. TV show “House” you’ve seen him gobble two or three at a time like candy. I sure wouldn’t want a doctor in that state working on my case…

By last Tuesday (June 25) I was more or less out of the haze; still a bit fuzzy but doing a little work. Then I ate spoiled Salmon that night. I didn’t get better till Sunday. I’ll leave out the details.

And it’s all the more frustrating given that Numberheads 2.2 was almost ready for App Store submission.  Mostly incremental changes this time and mostly to the UI, although there are some minor bug fixes and a new DEMO game selection where the game runs itself so you can see how to play it.

I created the Demo game for trade shows like Casual Connect San Francisco 2013. That way I can have an iPad running automatically and displaying the image on a TV monitor so I can talk to people. Even though I personally like the game even after thousands of hours playing it myself, I can’t do it all day for 3 days in a row. I’ll be at the Indie Prize pavilion (?) along with a lot of other developers. Not entirely sure how Benign Games got selected to compete for the Indie Prize; I didn’t even apply. Clean living?

Next I want to do a mini review of  “Unity Shaders and Effects Cookbook”. I skimmed it and it really looked promising.

Keep tuned to this Bat-Channel!

Play Numberheads for Ten Minutes

Posted: May 6, 2013 in News

A gameplay video is really a lousy way to demonstrate a game like Numberheads. But if you check out this page you can play it for free. For ten minutes, anyway.

Unity3D Tech Tales, Part 3

Posted: April 30, 2013 in News

Part 3: “Smaller amounts of DRAM on the older devices”

Smaller amounts of DRAM on the older devices: well sure! Memory warnings will kill-off your app as quickly as an uninitialized pointer. Well maybe not – you do get a warning. But in a game there’s not a lot you can do aside from maybe calling the Garbage Collector (if you’re using something like C# with .net, like Unity3D games).

When testing Unity apps on iOS there are three different ways to do profiling:

  1. Enable the Internal Profiler by changing iPhone_Profiler.h and watching the output to the Xcode console
  2. Attach the Unity Profiler to drill down into your app’s internal details
  3. Use the Xcode profiler when your app is running on the target device.

It’d be a mistake to just use the first two. You might see that you’re using some number of MBytes of heap memory and confuse yourself into thinking that that was the entirety of memory use. It isn’t. For the record, I personally knew that it wasn’t.

The Unity profilers don’t show you all of the other memory used by your app. For that you really need to spend time with the Xcode profiler. While there’s no actual documented number for a maximum amount of memory to use, it’s best to keep it as small as possible. The reason for this, as every iOS dev already knows, is that your app resides in memory with all the other suspended and background apps that the user has launched. When memory gets low, apps are told to free memory – if they don’t then they might be terminated. Guess what – freeing memory is often impractical in the context of a game, much less in the Unity environment, where seemingly all you have access are the Game Objects in your scenes.

You really need to spend some time with the Xcode profiler and see where you’re wasting memory. You may be in for a surprise. There are some fairly simple passive and active means that you can use to keep memory use as low as possible.

Passively, by using compressed textures as often as possible, by having audio “stream from memory” when possible, and destroying assets you no longer need.

  • The more compressed your textures are the less memory they’ll take. Sorta obvious, eh? How about using 2 bits-per-pixel if you can?  How about combining textures into atlases?
  • There are several options for audio assets, most of the import options default to something that loads into memory. Many times that makes a lot of sense, especially for often-used game SFX: usually those are really short. But what if you have a 10-minute long mpg audio file that’s just for background music, that often users just shut off anyway (a subject of endless frustration).  Try the Stream From Disk option instead.

Actively, by Destroying unused GameObjects and other assets, and by using the Resources Folders.

  • Perhaps you have some user prompts or panelish textures shown at the start of a scene? Be sure to Destroy() things like that when you don’t need them.
  • Use the resources folder to store background textures for in-game panels such as tools panels, help panels, and other in-game items that are only needed occasionally but have large textures.
  • Call Resources.UnloadUnusedAssets() after your scene is completely initialized (this takes a little care).

The last  item in that list deserves some elaboration. There are two types of Resource folders: Resources and Streaming Assets. When you put something in the Resources folder it’s bundled with other assets in the app but not loaded into memory when the scene starts up. You can drag a texture into a Resources folder and then load/unload it when you need it. That was you only have a temporary memory increase, lessening the chance of a low-memory warning. The Streaming Assets folder saves your data in a Raw format, that is, not compressed with a bunch of other things. It’s actually a duplication of the folder heirarchy within the Streaming Assets folder in the target device’s file system. You might have some HTML files and images to use in an overlaid browser window. This way they’re not in the memory space of your app.

An example of how to use the Resources folder:

Texture2D  texture;
GameObject displayPlane;
texture  = Resources.Load ("someTexture") as Texture2D;
displayPlane.renderer.material.mainTexture = texture;

and later on….

displayPlane.renderer.material.mainTexture = null;
Resources.UnloadAsset(texture);

Actually, instead of ‘null’ you might have a tiny 64 x 64 black texture in your project and use that as the initial texture (i.e., set up using a black texture in the editor), then use that instead of “null” before the UnloadAsset(). That way the plane will appear black in the editor and you can tell where it is.  There’s plenty of documentation about Resource folders in the Unity Docs.

It seems simple, but these textures can be big – especially if your target is a Retina display iPad. If you have several of these, you can save several MBytes of memory.

Perhaps it’s a vestige of my days programming in assembly language, but it always seems better to be careful how you use memory. Hope these three articles save at least one person some time.

The status for the following app has changed to Waiting For Review. App Name: Numberheads  DspDan Copyright 1994

Fearless Leader likes it!

Well it took about 10 weeks and ended up being a complete UI redesign but it’s finally done.  It’s time to write a little bit about what I had to do to complete this – perhaps it’ll be of some help to other developers.  Some of this is Unity-specific, some iOS device-specific, and some of it will be familiar.

A few shout-outs: I have a list of credits here but for software I’d especially like to give my own Benign Games badge of honor to Unity3D for being amazing. The architecture is a little reminiscent of the Zope Content Management System – not sure if it’s still in use that much but I spent some time developing with it and in it and although it’s written in Python and isn’t a Game Engine, the concept of building up a solution by adding your code into the overall namespace of the language in an intepreted environment  (I know that that statement is an oversimplification) just can’t be beat for rapid development.  I have seen people complain about the cost of the Pro version, but with all due respect: it’s a bargain.

Most honorable and distinguished mentions go to EZ-GUI, Sprite Manager2 and Finger Gestures.  Who in their right mind would want to write those libraries for themselves? No way it wouldn’t cost you squillions more in terms of your own time than laying out a few hundred squandroes (please convert in to your own fiat money system if you like) for these fine products.

ANYWAY

Biggest issues:  

  • Three different aspect ratios 
  • Different levels of CPU/GPU performance
  • Smaller amounts of DRAM on the older devices

Aspect ratios: iPad, iPhone4, and iPhone5 have different aspect ratios, and the iPad3 and newer have whopping big retina displays. This issue has some simple side-effects, like needing different splash-screen images. Not a big deal. More complex is how to handle this in-game. Do you have different sets of texures for each aspect ratio and maybe different textures for the iPad3 and 4?  That’s tricky if you want to have a “Universal” app; one that can be loaded on any type of i-device, and still fit within that 50 Mbyte OTA download limit. One solution is not to care about the download limit. I didnt’ like that one. Or one could have two different versions of your app. That’s a potential QA problem and Apple (anecdotally) seems to like it better if you make Universal apps.

CPU/GPU performance:  I found that the 1.0 version of Numberheads worked great on the iPads and the iPhone 5. Not so great on the iPhone 4 and iPod Touch 4. They ran, but there were “hiccups” when a lot of pieces were moving around or when a lot of animated effects are fired-off at the same time.

Smaller amounts of DRAM on the older devices: well sure! Memory warnings will kill-off your app as quickly as an uninitialized pointer. Well maybe not – you do get a warning. But in a game there’s not a lot you can do aside from maybe calling the Garbage Collector (if you’re using something like C# with .net, like Unity3D games).

Don’t touch that Bat-channel if you want to hear more….