Children – Natures Game Testers

The other day I was visiting my girlfriend’s cousins, two boys who are 3 and 5. These two kids love their iPads and play plenty of mobile games on them. It shocks me how well they do in these games too. Using touch as an interface for games has increased usability so much now, that younger generations are able to play video games more easily. It amazed me that the 5 year old, Luke, was struggling to use the mouse with my computer, yet the 3 year old (Chase) could navigate an iPhone with ease.

10151426_10102129307048522_7998593320090389280_n[1]
They were enthralled for a good 10 minutes. A new record!

Seeing Luke and Chase play demonstrates that children are people in their simplest form. Sounds stupid, right? Maybe it is…but what I’m trying to say is that, typically speaking, a 3 and 5 year old can’t read, figure out “intent”, or have preconceived notions when playing a game. They just…play. This leads me to believe that they are valuable to have as testers.

That said, every mess-up they do in the game has me second guess the functionality. Thanks to them, I’ve reworked the tutorial and added “swipe up to jump” to the game. Don’t underestimate using children as testers. They enjoy it, and I pay them back by owning them at wresting.

Quest For A New Name

ic_launcherFinding a good name for your game can be stressful. No matter how optimistic you want to be, users will always judge a book by a cover. A bad name can deter users from a potential download, period. Recently I stumbled across 10 Tips to Making a Great Game Name. This article outlined a few pitfalls I had in my current working title: Hack ‘n Slash.

  • Too Generic – Violates rule #10. Despite sounding catchy, “Hack and Slash” is also a genre type.
  • Not As Pertinent Anymore – Violates rule #8. Since I changed the gameplay to consist mostly on the gun aspect, hacking and slashing become (still useful) but minor part of the game.

After racking my brain for a day and polling a few of my friends, I finally came up with a name that seems to stick: Alley Avenger. Isn’t the alliteration fun? Also, a neat little side effect, since it starts with an ‘A’, it will be among the first apps the user sees when they go to the app drawer on their phone (since apps are sorted alphabetically).

Gameplay Sucks – Time to take a step back and reevaluate

todd-goldman-this-sucks[1]Some times you need to step back from development, play your game, and deeply scrutinize everything about it. Not only that, play other games using the same engine. Or even hand your game off to a friend who you KNOW will show you no mercy! This is constant feedback necessary for the development process. Are you doing something wrong? Change it, and change it early!

Story time: After taking a small break and picking up development again earlier this month, I found myself focusing pretty heavily on the menu system. In fact, my menu.lua file is now over 1000 lines of code because of all the work done (Granted, if I had to do it over again it would probably be much shorter, but that’s another story!). Pretty soon, I had a dynamic, fun interface for the user to navigate through. I became satisfied that I had a semi-professional looking menu system, so I moved back to focus on gameplay.

After playing the game and listing the features I could add or fix, something hit me. I couldn’t lie to myself.

superman64_1[1]

Superman 64 should have been called Fly-Through-Rings 64

The gameplay sucked! It wasn’t fun. Period. The objects that the player had to destroy moved too slow, my collision was wonky, and having to melee each object was cumbersome and, after a while, predictable and redundant. Even if I upped the challenge, I didn’t see any way I could make this more fun. It felt like Superman 64, arguably one of the worst games ever released on a Nintendo console.

That said, I knew I had to add to adjust the way the game was played. I made some major changes:

  • Introduced GUNS. Oh yeaaaah! This definitely means I’ll have to change the name from Hack ‘n Slash to something else. Oops!
  • More physics! Players like physics, so I tried to adjust my collision handling to work with the physics built into the Corona engine. This especially works well with objects that are deflected when hit. By the way, deflecting an object with a bullet feels oh-so good!
  • Difficulty. Not saying my girlfriend is bad at video games, but if she was able to beat 12 levels fairly easily, something must be done. Speed of objects were increased and guns, which became the primary method of attack, now need to hit certain objects multiple times before exploding. Basically, a player shouldn’t be able to destroy every object coming at them, which made dodging all the more important.
  • Sound effects make you more engrossed in the game. Something I’ve always planned, but adding them just made the game more satisfying.

Will soon be starting on stage bosses. T-minus 2 weeks for beta! Wish me luck!

 

Easy Method to Properly Disposing Display Objects

I won’t waste your time, so let’s keep this short.

Disposing objects after use is important. In Corona, if the display object is off screen and probably doesn’t need to be reused, it’s always wise to dispose it. Simply using the object:removeSelf() method doesn’t address two key issues:

  • If the object is already removed or nil, an error is thrown.
  • Two lines of code are required to properly dispose an object (removeSelf, and nil’ing it)

Since Corona SDK doesn’t handle this (yet), below is a function I’ve written to accomplish this. The disposal of any display object should be handled through this function call.

-- Dispose objects
function dispose(obj)
    if obj ~= nil and obj.removeSelf ~= nil then
        obj:removeSelf()
        return nil
    end
    return obj
end

While it may seem redundant, I have this function return nil on success so that you can take care of nil’ing the value all on the same line. If not, the same object reference is returned (signifying a failure to remove).

Usage
MyVar = dispose(MyVar)

Corona SDK Fonts – How to Correctly Show Fonts on Windows and Android

Hopefully this post can save you the woes I experienced when trying to get fonts to work on both the Windows Corona emulator AND Android operating system.

Warning: could not load font <FontName>. Using default font.

If you’re like me and you can’t seem to figure out why the following line is appearing, allow me to help. Assuming you are using a custom font you’ve downloaded from a free site, such as 1001 Free Fonts or Dafont, and want to use it in the game. Unfortunately, including your font in the build directory only displays correctly on Android, right?

Well, as it turns out, Corona compiles the fonts differently on Windows than it does on Android. For instance, see the following code where I reference 2 fonts I made for my game:

if “Win” == system.getInfo( “platformName” ) then
    OpenDyslexicFont = “OpenDyslexic”
    SpecialEliteFont = “Special Elite”
elseif “Android” == system.getInfo( “platformName” ) then
    OpenDyslexicFont = “OpenDyslexic-Regular”
    SpecialEliteFont = “SpecialElite”
end

The code needs to check which system it’s on, then from there, reference which fonts to use. Keep in mind that Android references the literal file name while Windows only requires you to reference the font name. Additionally, you will want to include your font in the Fonts directory (typically found in C:\Windows\Fonts).

Battery Consumption in Corona SDK

I’ll throw my hands up and admit it! My current project is built from a couple of demos provided by Corona to get users more familiar with the product. While I assumed that Corona would have the best algorithm for the job, I recently learned I was dead wrong.

iPhone-battery[1]

(Pretend this is an Android 🙂

Just yesterday, I started actual level design in preparation for the beta release of my game. Once I finished 12 levels, I gave the game to my girlfriend to try out. She isn’t much of a gamer, and was able to finish all the levels with only a couple health upgrades, which told me I might need to up the difficulty a bit. Bug wise, there were only a couple noticeable things of which I already knew about. All in all, I was satisfied with my girlfriend’s play-through at this point. It was when the game was closed and she handed the phone back to me when I realized…the battery had drained 30% in the 20 minutes that she played!

I quickly scrambled to find a guide to narrow down the issue. Searching the Corona SDK site, I found this article on Performance and Optimization, which I firmly believe is something every Corona developer should read before publishing a game to the market!

Regarding battery, it was noted to minimize the usage of the following:

  1. Network traffic
  2. GPS
  3. Accelerometer
  4. Disk read/writes

After some thought, it was clear the (4) was the trap I fell into. I used the demo Corona code to handle parallaxing in my environment, easily a trap that any beginner in Corona could fall into. In short, the code was fetching the image from disk, creating the object off the right side of the screen, scrolling it across the screen, and then destroying it. I had multiple background images doing this, as well as the destructible objects that flew at the player, so it was obvious that all the disk reads were taxing the phones battery life.

Lessons Learned: When developing a solution to a problem, keep in mind the inefficiencies and try to re-use objects and functionality when you can. While “brute forcing” a solution may be the easy way out, you will eventually need to redo it a more elegant algorithm. Don’t be lazy…challenge yourself a little!

Don’t forget to check out my game to see what I’ve been talking about! Alley Avenger

Know your weaknesses – A good graphic designer goes a long way!

It’s often that I see this. Overly ambitious individuals diving into game design that lack either coding skills, designer skills, or both. In my experience and research, I’ve realized that the technical prowess that comes with coding games combined with the creative expertise of designing polished graphics are like Yin and Yang.

aint-nobody-got-time-for-that[1]

Knowing where you fall on this spectrum can really help. I personally identify as being more technical minded. I was capable of making graphics, and given a complex and detailed object I could copy it, but when it came to designing original content, I fell flat. Is this innate? Maybe. Perhaps if I spent more time in Illustrator, I might get to that level, but frankly…ain’t nobody got time for that! (at least I don’t). Besides, coding is more my thang anyway!

With that said, I was lucky enough to recently run into my friend Jon, who graduated with a degree in Graphic Design. He has some good ideas and has, thus far, increased the look of the game from a silly little learning project to something people might actually see as professionally done. Below are the before and after of the main game play:

1496128_10101968878069482_624600755_o[1]     After

Side note: On the topic of “knowing your limits”, possibly my favorite, and funniest, example I can think of is an often referenced post on Reddit where a woman talks about a dragon MMO she is working on.

Quote of the title:
Dear internet, I’m a 26 year old lady who’s been developing a science-based, 100% dragon MMO for the last two years. I’m finally making my beta-website now, and using my 3D work as a base to create my 50+ concept images. Wish me luck, Reddit; You’ll be the first to see the site when it’s finished.

Everything here screams inexperience, but hey, we all start somewhere! Read the top comment for a good reality check on the effort and experience needed to create an MMO.

Laments of a Corona Developer

I’ve workeddawson-crying[1] with Corona SDK for little over a year now, and the lessons I’ve learned when looking back on early development of Hack ‘n Slash are great. I tend to be someone who chooses to reinvent the wheel, so when I finally came across functionality that Corona was capable of handling AFTER I had code it myself, I couldn’t help but kick myself in the hiney. Two things I look forward to properly implementing next project:

  • Storyboarding – Create and destroy scenes in a game more elegantly. This would have come in handy when coding the menu system, which has recently been eating into most of my development time.
  • Widgets – Widgets…WIDGETS! By definition (well, MY definition), a widget is an encapsulated piece of functionality. It’s extremely useful in certain situations and Corona has plenty of them.
  • Design a game with physics in mind – I utilize the physics engine for a few things, but also invent my own physics (player jumping) as well. This isn’t a situation of me not knowing it existed…I knew full well how to use physics, but I was headstrong in thinking that I can hack my own version of this to accomplish what I need. I am now realizing how much extra code and effort is going into this!

In the past 6 months or so, I’ve considered moving to Unity since it uses C#, so I’m trying as hard as I can to learn from my current mistakes. After all, as a developer you are far more valuable if you easily acclimate to change!

Lessons Learned: Read API reference guides thoroughly before starting a project AND utilize as much out-of-box functionality as possible.

To ad or not to ad?

adhereiphone[1]

Let’s get one thing straight. I want Alley Avenger to be free. The entire experience. Free. That said, I also didn’t really give much thought to ads. I always hated the fullscreen ads on some games, so this somewhat deterred me from even considering it. That is, up until recently.

Recently, there was a game that came out that made quite a bit of buzz around the internet called Flappy Bird. For those who don’t know the story on this game, it’s a simple game that a kid made that got huge. It’s a simple and addicting, yet frustrating, game where you have to get a bird between some pipes. At one point, the app had several 10’s of millions of downloads and was making, as he claims, 50k a day off of advertising (I will add that, after doing some research, I don’t believe this number is close to true, but I’ll get to this later). The developer also added that, allegedly, because the game was so frustrating, he would receive death threats in his email. Shortly after the interview, he pulled the app from the store, puzzling many people why he wouldn’t simply hire several body guards with the bank he was making!

While I certainly believed he made quite a bit of money from advertisements, my research suggested that he probably made closer to 1k-5k a day. Regardless, I have this mildly amusing game on my phone. The method he used for advertising was a simple placement of a banner ad at the end of each play through, visible at the score screen. This ad was very unobtrusive and minor, and frankly, didn’t ruin my experience for the game one bit.

This was the first game that I was truly shocked at. While the gameplay is fun and art style is polished, but it seemed to me that the effort he put into this game was minimal. This opened up the thought of potentially doing the same thing for Alley Avenger. If so, why not? Making a little bit of money on the side wouldn’t be bad, plus I would be able to actually pay my graphic designer for his already-freely-voluntary work.

So…

…fast forward to yesterday, I set up an account with Admob and payed my $25 dollar fee to publish for Android! Depending on the timeline of when I release beta, I may or may not have an ad included.

Moral of the story: So long as your advertisements don’t retract from the core player experience, go ahead and put them in!

Kicking off my blog! – Dev Tools and Current State

Greetings readers! I’ve began this blog in an attempt to log all my thoughts and ideas down regarding the games I will be developing. Close to a year ago, I started a project (currently code-named “Hack ‘n Slash”). It’s been a work in progress, off and on with minor distractions taking me away from developing (i.e. buying a house!), but I’m now at the point where I can confidently say I will be publishing the beta of the game soon!

That said, my initial promised date to close friends and family has been March 20th, but seeing as that date is creeping up on me more quickly than anticipated, I will probably have to extend it another month. In two months prior to the go-live, I’ve acquired an invaluable asset to my team of one. His name is Jonathan Karavas and he’s assisting me with the graphic design work.

coronaicon[1]

Seeing as I’m a bit late in the game, I’ll note which software I’m using to develop the game.

  • Corona SDK – Powerful and easy-to-use software which utilizes LUA for development. If you’re unfamiliar with LUA, it’s essentially JavaScript where variables are dynamically typecasted and defined. Great tool with an extensive library, though it does have some shortcomings (keep reading).
  • NotePad++ – Unfortunately, Corona has no IDE for development, which leaves me with this next best option. Debugging happens through a separate console view (provided by Corona when you build the game) with “print” commands. Very archaic.
  • Adobe Photoshop/Illustrator – When used together, these tools can be very powerful. I picked up how to use Illustrator when I thought I would be the only graphic designer. Now that Jon has come aboard, the skills I learned help me to “speak his language” better.