Wednesday, September 28, 2011

Radio Silence

Hey gang,

This is going to be a pretty long post as there is quite a lot to cover and I want to go over everything. So, as anyone who reads my blog is aware, there has been a long time since the last post, there has also been a lot of things happening on my end but I won't make up excuses, I've been lazy. I've also been flagging at my app idea, which, unfortunately, is now in the trash can until such times that I can be bothered to pick it back up again.

The issue with Flip the Switch (it got a name!) was that it was structurally broken from day 1, there are so many holes in the code as we speak that the more efficient way for me to fix it would be for me to start again - which, co-incidentally I'm doing! My major gripes so far with developing for Android with Flash, and anyone who is thinking of getting into the market as well, please consider this list before you get started, as it'll save you a lot of time in the long run.

 - Flash to Android debugging; is a really annoying thing to set up and to run in the background whilst you micro-manage code. It's fiddly and if you run a few harddrives on your computer like me, you can spend ages with annoying error codes in Flash Builder as one thing can't see another thing etc. etc.

- Android Manifest.xml editing; this one is slightly my fault, I will admit, but I'm yet to come to a suitable fix for the issue as well. There is one thing that will always get game developers when you start developing for android - you have to deal with different resolutions, different dpi's and different hardware. The first two are the most concerning, because anything that you code into your game in pixels is going to come out different screen to screen, it's possible to make this a little easier on yourself through some pretty complex Flash coding - which I'll be posting up here in the vain attempt to get a little more traffic through, but all in all, it's pretty damn hard to get the swf file to scale to different dpi's and screen sizes and not have issues with sprites being cut off.

- AMAZING ANDROID 2D BOX COCO ENGINES! This is something, that I have to say, after almost a month of going through has irked me more than anything. I don't know if it's a personal trait, or if it's a global problem that the world suffers, but in the last month, I've tried to learn to use no less then seven engines for Android, most of which, obviously are based in Java, but boast "Amazingly easy to learn!" & "Instant integration!" I've got to say, it's saddening to see things like this. I'll be honest with you, it's great if you're able to get your hands on a fully fledged game engine and just start pumping out games - but realistically, the chances of you being able to just pick one up, and unassisted (most documentation is pretty lax) just start to churn out great game ideas, are not great.

This has been the single biggest time-waster that I've had - I come across a problem with my current code, go searching and the only support that I find goes something akin to this "Oh, I had this problem, and then I started using engine X and all my problems were fixed and I found five bucks!"

I've come to the conclusion that if you feel the need to use an external game engine you're one of two things:

 - Lazy
 - Shouldn't be programming games.

Getting help phoned in is (I feel) cheating, if there is something that the game engine does that you don't understand (it just does something magic and you get a game out the other end) then you shouldn't be using it, I've started to program a new game, and I'm essentially laying out a fully functional game engine to go along with it, and I'm going to take the long road and learn how all the parts fit into each other - it's going to be harder and probably more frustrating then going and picking up one of the many free engines, but when I'm through with it, you know what? I'll have my own game engine that I know back to front and can manipulate as I see fit, and no open source, free, paid for, whatever, engine out there can say that for each individual user.

As you can see there's been a bit of a block in the creative flow of my programming, which has largely been caused by needing help and being confronted by a bunch of mindless Zombies reeling off engine names at me -.-

But, there has been other things that I have come across that I feel contributed to Flip the Switch going onto hold. Such as the fact that in all reality, I was finding it very difficult to code anything new into the game and as such wasn't getting any closer to putting something onto the market, and this is the big thing! What I want is something that is going to be quick to develop (relatively) can support itself (ad support) and will ultimately give me a good idea of what it's like to receive feedback and change and update a game depending on what the users have to say.

Those three points listed above are something that I want to talk about too; having something that is quick to develop from idea to prototype to beta to release is CRUCIAL in the app field, because if you've thought of it, you can almost guarantee that there is someone else that has thought of it too and might be quicker at coding then you, or have a team of monkeys with him to help. So the simplest ideas are often the best - and when I first sat down to think of ideas, Flip the Switch seemed simple, I was thinking of all of the elements that I was going to implement, and now on the other side I can appreciate more then ever exactly what goes into a games development.

Having an app that supports itself is something that is very important too - and it's a real problem for people that are developing through AIR for Android as there is pretty much only one choice - AdMob, which you can put as a overlay on your game, app or whatever and just sit there. The real problem with that is that AdMob isn't exactly know for it's great income, and the mobile advertising market is something that belongs in a complete other blog post (yes, I'll do one, I promise.) But the major companies that are doing advertising that you can use in an app are things like Millennial Media & TapJoy - both of which only offer a Android SDK - which of course is in Java, and totally unusable by myself. So admittedly, from an income perspective, Flash - not the way to go until such times as there is support for people such as myself (when it happens, it will be a happy day!) This then leads me back to my freemium post which I made a while back, but I'll cover again in another post.

Finally there's the feedback that people that use your app will give - negative, positive, anything that a person says about any app that is made will change what is done to it in future updates, and as such, having a total of 0 apps on the market, means that I have NO idea if any of my game ideas are going to sell well, if at all!

Well, that's pretty much all that I've learned about the fickle mistress that is the Android App Market since you last heard from me. Where am I going from here? Well, I'm going to cut a lot of the fat away from what I've been developing over the past month, it's been in drips and drabs, and ultimately has led nowhere so I want to perk things up and start afresh and see how that gets me going. I'm starting on a new game, but am taking a real solid interest on getting the game engine and logic side of things right so that should I get to completion of the game I'll then be able to use that knowledge, and even perhaps some code on new projects that I start.

The game that I'll be making (and I know it's already on the market, doesn't mean I'm not going to make it) is a simple constant scrolling game, using the accelerometers in the phone or keyboard input move your player back and forth to drop down slots to avoid being pulled off the top of the screen - simple idea and with a bit of polish can go far. I'm not going to try and aggrandize this idea with anything else at this point - I'm going to release it with a easy, medium and hard difficulty, a scoring system and that's it.

I'm not expecting it to go far, but what I do want to do is get it out there! And then once I have, start working on more additions to it to get people coming back (think new power-ups etc etc.) But for the mean time, I'm working on this simple idea and am sticking to it till it's done.

Another thing that I wanted to do was to organize starting to create some tutorials for any aspiring app creators that might happen on my blog (I dunno, they might :S) But I'm going to try and put a few together with my own personal spin on them for people looking to make games with android using just a simple physics engine and their own know - how.

In the mean time though, it's three in the morning and I need some sleep I think... Maybe.

Thursday, September 8, 2011

A lesson in version control

Hey guys, just a really quick post about version control. This was something that was touted to me during uni and I never really understood what it meant until this week. So I was set to make some major changes to the game and set about introducing some singleton pattern classes to reduce some of the load.

I however didn't think to save a new version of everything before starting to make changes - this was the first mistake as when I then found that a lot of the changes that I had made didn't work, I had nothing to fall back on, no backup - the only thing that I could do was reverse engineer all the work that I had done to get back to what I had started with.

The lesson: MAKE BACKUPS!!!


Friday, September 2, 2011

Alpha v0.0.4

Hey team,

Well it's been a while and there has been a lot of things happening on my end in terms of app programming and the like.

I've started up a new app idea, and have also made some changes to my game.

The camera function should now be working fully - which is exciting. I've also got a back and forth switch which allows the user to change gravity back and forth. I am now working on developing the game flow so that when the user reaches the end of the level, you can actually move to the second level. I will then work on balancing and then developing out the levels in full.

It's all rather exciting. The biggest thing that I've wanted to get out and done with is the Google analytics and the AdMob - for those of you that don't know the market for apps very well, or haven't really thought about it before. Ever really wonder why there are two versions of most games? A free one and then one to purchase - with the free one you have to suffer through ad screens whilst the paid apps will sometimes give you extra features / content to allow you to have a richer game experience.

It's my general understanding that the main reason behind this for most app companies is that the revenue that can be raised from having ads in a game is equal to or greater than the revenue raised from a paid app - and the most important factor of this is that everyone will immediately go to buy the free app first - it's free... And each time that the user clicks on an ad inside that app - it might make the developer five cents. Now, lets expand on that a little, Angry Birds, for the sake of the argument has had around six million installs for it's free version of the game. the possibility of someone clicking on an ad is not high, I know that I rarely click ads, and if I do, it's usually by mistake, but if there was six million of me all playing at the one time, well, you get the idea - monkeys and Shakespeare etc. etc.

And then once you go and finish the free version of the app and want a second taste, you can go ahead and get the paid version, which again means another payment in the pocket of the developer. This all sounds pretty grim, but to the consumer and to the companies that are using the advertising services there isn't too much to be sad about, typically speaking, this will mean that we are going to see more and more apps come in for free onto the market, this will give the market a much richer breadth of games as well as all around apps, and for the advertisers, this will mean better product exposure and a better return on investment.

To anyone who reads this blog and has any input on how you think the industry, in particular the app industry is going, let me know your thoughts! It'd be great to hear from some people as to what you think of the "freemium" way that the market is shaping into.

Finally, I'll give you all a bit of a bullet point list on what I'm hoping to accomplish in the next week or so with the game:

 - A level select menu - with around 5 levels to play.
- AdMob integration & Google Analytics
 - A clean method for destroying and selecting levels.
 - Better feedback about gravity and which way up you are - the reason that I raise this one is that it can be a little confusing as to which way is up, as at the moment, constant mashing of the gravity switch button can put you into limbo and up is east, or something. So I'm wanting to introduce a funky new method which will allow me to "flip" the world so that the gravity is always the right way up, but the level rotates to accommodate for "flipping"
 - A limit on the amount of times you can "flip." This will be dynamic from level to level. This really introduces a puzzle element as it requires you to think about the your next move before you make it as you have a limited amount of times you can flip.
 - Scores and points - this is a point of contention for me, I'm not really sure which way I should go on it. A lot of me thinks that perhaps the best way for the scores to work is for it to be timed, but then I don't really want the game to be rushed, I want players to have to take their time in playing. But then I'm only really left with the option of having a limit on the amount of times you can "flip" and if you have remainders, you are scored on that. Something similar to Angry Birds etc. etc, where by being awesome and taking short-cuts, you're rewarded with better points. What do you all think? For the time being, I think I'll probably go with just a simple timed interface.

This is just the start, however.

I wish I could show you all a little of how the game is playing at the moment, but I'm still working on getting a video capture feed onto my phone, once I do, I'll start to post up "progress" videos so that you can see where I'm at with it all.

Here are some screen shots to show you what I'm up to, I'll go into a little detail about the camera too:
This is the first image - the black circle is a placeholder image for the switch which will invert gravity back and forth. The text reads "Gravity Normal."

This is the game after gravity has becoming inverted  - this is where the beauty of the camera class that I developed has come into it's own. I've made it so that when a level is drawn, it's drawn on a canvas that has a canvas on-top of it, for anyone that has worked with flash - I have made a display object container that contains a object container, the physical game world is drawn on the bottom most layer, and then the UI is drawn on the upper most layer. 

This means that things that affect the viewable section of the bottom most layer don't affect the uppermost as they act independently of one another, the bottom most inherits the top most features, but changes to the bottom most won't affect the upper. That's a lot of bottom and upper, but when I draw a level I hand the camera class a x and a y value, which are the dimensions of the level - the camera interprets these as bounds and will never go beyond them - the ball will try and remain in the screen unless the view port bumps up against the edge of the level and then you get a nice fading affect which allows for a much smoother look.

Anyway, I have lots of work on,

David Out.