Website migrated to a new server!

Hello, world. If you see this, you are reading this from the new server, which is great. Notice anything new? Apart from the comments being powered by Disqus now, the font change (I grew tired of the previous serif fonts) and some minor tweaks, the site should function just like before, but only better. I have migrated everything from the old webhotel that would break down even under little traffic to the Google App Engine, so things should run smoothly even in case there is some heavy traffic going on. Assuming everything works correctly, that is. 🙂

Oh, do let me know in the comments if you notice anything broken that used to work before!

My thoughts on Unity

Long time no see, right? Just for fun, I wanted to write up some (initial) thoughts on the topic of Unity, the game engine. Not sure if I've mentioned it before, but I've been keeping an eye on Unity for years (since 3.x days I think), on the prospect that I might actually use it someday for my own games.

After spending way too long on making the general engine code for Jewels 2 (remember the engine consisted of 75% of all my code in J2, quite a bit of which I ended up not needing at all!) it occurred to me that maybe it's not the best use of my time if I actually want to make games. I have two kids, a day job and generally a lot less time to tinker with gamedev than I used to, so perhaps it should be spent not making engines, but games. And I don't even want to count how many times I've started building a game (engine first, of course) and actually ended up with an incomplete engine and no game!

With that in mind I decided finally to use Unity. Early this year I got back to my old day job of making learning games for children and conveniently enough we use Unity there too, so it was a great chance to actually use the thing. Before I had only tinkered with it, made a couple of very small prototypes.

Now that we've established why I wanted to use Unity, and I've actually used it for some time, I wanted to list (not necessarily in any particular order) some things I like and don't like about it. Nothing is perfect, after all. This is from an "old school" do-your-own-engines-in-C++ -perspective, so subjective stuff all around. Also goes without saying that I'm no Unity expert; I'm still learning to get into the proper Unity-mindset and finding an Unity-ish way of doing things, which often is vastly different from what I'd normally do as a coder. (Some of you may be wondering why Unity, instead of, say, Unreal Engine? Well I'll get to that in a bit.)

What I like about Unity

  • The Unity Editor: As a programmer I'm used to doing most of things through code, but after getting to grips with the editor centric workflow it is really good. It's very handy to place stuff in editor and especially to inspect things during gameplay, at runtime. The editor is also very extensible, powerful stuff.
  • Asset pipeline: It's great to have the ability to just drop a .blend or .psd in the assets folder and have it ready for in-engine use, (usually) without much trouble. You can also extend it with asset pre/postprocessors, very useful.
  • Prefabs: I think they're neat way to encapsulate and reuse things. They do have a fatal flaw… (see the other list below)
  • Component based: Component based programming is neat! I never got around trying that in my own stuff even though I always wanted to try.
  • C# scripting: After over 15 years of battling with C++; header files, fugly templates, const references, copy constructors and all that shit, C# feels like breath of fresh air. This is the main reason I didn't consider Unreal Engine that much; C++ feels cumbersome and counter-productive after spending some time with C#. Not to mention compile times, C# is much faster to compile. So in short: if I have the option of not using C++, I'll gladly take it.
  • Co-routines: Useful as hell; can't count how many times in the past I've had to add vars for various counters, polling when certain stuff should happen. In J2 I made an event scheduler that allowed rigging timed events, repeating or one-shot to happen, but co-routines make all that so simple I don't know what could possibly be better than them!
  • Cross platform: It isn't quite the "one click and your game is ported", but halfway in the general direction at least. iOS remains a painful platform to develop on even with Unity, since Apple doesn't allow JIT (Just In Time) compilation and code has to be compiled AOT (Ahead Of Time).. Do anything fancy and you'll find that it doesn't work on iOS without having to pull tricks like making dummy code reference all the types that would otherwise get missed during the AOT compilation.. But I digress, it's still whole lot better than spending all the time in Xcode.
  • Prototyping: Unity is excellent prototyping tool! I usually don't do much prototyping (does it show? 😄), but with Unity I have and it's been helpful testing stuff without "officially" starting a new game project.
  • Powerful animation: Mecanim is quite powerful if a bit convoluted, and can animate almost anything. I still do lots of tweens from code, but I'm using animation for more and more things.
  • And finally… (I've saved the best thing last) — not having to write everything myself! 😉

What I don't like about Unity

  • Outdated Mono: Mentioning this is something of a cliché, but yeah better GC and updated .NET would come in handy. Luckily once Unitys il2cpp-project matures these problems should finally go away.
  • No nested prefabs: Suffice to say, prefabs would be super awesome if they could be nested and then updated properly. Maybe one day…
  • Magic methods: MonoBehaviour magic methods (such as Update(), OnEnable(), OnDisable(), etc.) feel like they should be inherited or implemented with various interfaces. What I'd like is a new ScriptBehaviour that has the basic methods to override, and bunch of optional interfaces for special stuff (like physics handlers). Or maybe user code could subscribe to events like this.OnUpdate += MyUpdate.
  • iOS development == shit: Sorry, had to add this here again even though I mentioned it in the above list. It's pain in the ass due to the AOT problems, hopefully il2cpp helps with these!
  • Shuriken scripting: Shuriken is a nice particle engine, but I'd like a complete API to all its features from code.
  • 2D still lacking: The (relatively new) 2D tools are great, especially the fill-rate saving tight mesh generation for sprite atlases is helpful for mobile devices. However, there are still some omissions that I'd like to see: automated HD/SD support for atlases, dithering for 16-bit sprites (quite low hanging fruit IMHO and would improve visual quality a lot, especially for Android where 16-bit is the default "compression"), built-in support for premultiplied alpha (must for doing additive and alpha blending in same pass), a way to control the tight mesh quality, etc.
  • Pricing: I think the Unity Pro-price is ok, IF it would include all the mobile platforms. As a mobile dev, having to buy 3X the Pro-price it's a bit too much for my liking. And Pro-subscription does not make much sense: you don't get to keep the license after you've reached the normal Pro-license value. If that was not the case I'd have bought the subscription months ago. Of course even though I complain, I still need those Android Pro and iOS Pro licenses eventually, so I'll just have to bite the bullet and buy them.
  • No source access: This is usually not a problem, but when things don't work as expected, for me the best way to debug is to look what the library/engine code does and actually expects. It takes a lot of the guesswork out of debugging, but I realize having Unity open source would probably not be possible with the 3rd party stuff they're using. Luckily some of the sub systems will be open sourced, such as the new uGUI. Speaking of which..
  • The mythical uGUI: Now the long-awaited uGUI is finally here, albeit in beta form. It's mostly great — and thinking back on how much time I spent building the GUI components, menu layout and transition stuff for Jewels 2 — I'm just glad there is a proper GUI in Unity! Still, have to admit I was a bit disappointed, there were quite a lot of bugs and strange omissions (no drag threshold!?) considering how long it was in the making.. Nevertheless GUI is a complex beast + it's much better than having no GUI at all, and I'm sure it will only get better when the bugs are ironed out and the system is open sourced.
  • Terrain: Old, clunky and very slow to load on mobiles. Don't use it myself but at work we've been battling with it more than enough.
  • Easy to freeze the editor: Granted, this is an user error, but if you accidentally make an infinite loop in code, you're pretty much screwed if you had unsaved things in the editor. 😛 Before I would just kill the game, fix the code and that's it. Now there's potential to lose some of your Editor-made edits, if you forgot to save.

So there. My initial impressions of Unity. I'm sure I forgot some points I wanted to mention, but I will update this later if anything worth adding springs to mind. No doubt using Unity more will reveal new pain points, but I still believe that it is better to use an engine (be it Unity or Unreal or whatever) these days, IF your intention is to make games and not to tinker with lower level mechanisms. And for me, personally, seems that Unity is a great choice. 🙂

UPDATE on October 6th: added notes about co-routines, terrain and iOS development being shit.

Gameplay footage from Jewels 2

Just a quick update: I made a (too long) video with some gameplay footage demonstrating the different game types in Jewels 2. It is a not-so-great promotional video, and only about 6 months too late! 😉 Take a look nevertheless, if you haven't played the game and the static screenshots just won't cut it! 😄

The new addition to our family

Hi again, happy news this time! My wife and I had our second child on the 31st of July, a little sister to our now three years old Nella. 🙂 Naturally this means less time to work on games, at least initially. Nevertheless I'm hoping to set aside some time to work on Jewels 2 soon, and try to track down the nasty saved game problem some people are experiencing.

Anyway, to keep this one short: here are some pictures. Bye! 😄

Madness…? This is the App Store!

Let's see, the bad news: it seems that I am unable to update the Jewels 2 iOS-version any further. The good news: umm, let me get back to you in some days time. It's time for another rant folks!

As you can see from my previous post, I happily announced the iOS-release of Jewels 2 — it was great to get it out and have some time off. Since that, I've been updating the Android-version occasionally, fixing bugs and adding minor things. Of course I wanted to get the same fixes out for iOS as well, and finally about a month after the initial release I had an update ready to deploy to the App Store. Business as usual, right?

I waited for a week to get to the app review, which was then rejected. First time for everything, huh? 🙂 I had forgotten to add "Restore"-button to the IAP-Shop, so that was valid reason to reject it (of course it should not have been approved initially either). But another reason was also given:

Specifically, the app name and screenshots are confusingly similar to the popular app Bejeweled Blitz.

They had attached one of my screenshots showing a lightning bolt. Hmm, I thought. "Confusingly similar"? Well yeah they're both match-3 with gems, like thousands of other games out there. And yes, there seems to be lightning bolts in both games. I didn't think much of it, implemented the Restore-button for purchases, replaced that particular screenshot and resubmitted within a day.

Another week went by and the game was reviewed and of course rejected again.

Specifically, the app name and screenshots are still confusingly similar to the popular app Bejeweled Blitz.

This time they had attached three of my screenshots. I tried to figure out what it was that was so "confusingly similar" in those shots, comparing to some pictures from Bejeweled Blitz (a game I've never played; the old, 1st Bejeweled is still the only game in that series I've actually played). As for the name, I don't think it is very easy to confuse "Jewels 2" with "Bejeweled Blitz", but I guess it is possible, so I changed the name in the metadata to "Jewels 2 (Sequel to iJewels)" to avoid any confusion.

When I asked Apple about what was wrong with the screenshots and the name, I only got a reply that they scheduled a call with an Apple representative. I thought it'd be easier to handle this through email/Apple Resolution Center messages (especially considering my spoken English sucks!) but that was not an option, it seems, since they didn't reply to my comment about it.

After a couple of missed calls (my fault) I spoke very briefly with a member of the app review team. He said that the backgrounds are confusingly similar, so I just need to change those screenshots. Alright, good to know! Another week had passed by and personally I'd preferred to have that answer given when I asked about it earlier instead of insisting on calling me. Oh well, couple of weeks here and there, no matter.

Right after the phone call I then googled some screenshots of Bejeweled Blitz and indeed both these games have some nature scenery in the background (although mine are dynamic 😉), so I tried to select screenshots that don't have similar scenery elements in the background. Another submission for review, with changed name and not so "confusing" screenshots I expected that matter was finally settled. Took some time but not a big deal, right?

Except I got rejected again! Raise your hand if saw that coming. 😄 I have to commend them of having the decency of rejecting me sooner than a week later, though. The reason for rejection:

Specifically, the screenshots are still confusingly similar to the popular app Bejeweled Blitz. For example, the "jewels" are identical to those in the app Bejeweled Blitz. Additionally. the lightning bolts are very similar. It may be appropriate to also revise the app's content.

Well shit; thanks for telling me NOW that the whole damn artwork is "confusingly similar" — it's not like I would have liked to know that a month ago, or maybe even when the game was first approved into the App Store! Way to go Apple!

Also, this line in particular was interesting: "the "jewels" are identical to those in the app Bejeweled Blitz." Identical, really? Since English is not my first language, I went to to check what they had to say about the word 'identical'. on identical: similar or alike in every way

"In every way." Sounds about right. Now let us compare those "jewels" from both games. (For the App Store review team members amongst us, Jewels 2 is on the left hand side while Bejeweled Blitz is on the right.)

Identical jewels? Really?

Hmm. Similar shapes and colors, sure, but identical? 😛 As a side note, with just a quick search I found several games (on the App Store) that use graphics stolen from Bejeweled, I'd rather call those identical.. Apple of course replied that just because there are approved games that are non-compliant with their terms, does not mean that my game can be approved. Fair enough, it's their store after all.

Basically this means that I cannot update Jewels 2 for iOS any longer, unless I redo all of my graphics and effects. And that's not going to happen. Maybe if I stole the graphics from some other game it would be alright? 😛 To think I used hours upon hours of my development time fighting the piece-of-shit IDE that is Xcode in order to make the game work nicely on iOS, damn… 😐

Yes yes, if you're just itching right now to make comments like "you got what you deserved by making a clone game!", well, go right ahead, this would be the perfect opportunity for such a laugh. Hilarious, even! Had your fun? Awesome, glad I could entertain. That's what games should do, right?

* * *

Back to topic at hand. Now I kinda see what they're coming from, perhaps — if you're half-blind — you could confuse these two games by their appearance; a match-3 game is a match-3 game no matter how you slice it. But the way this whole incident was handled, that just is ridiculous. Why approve the game in the first place if it's not appropriate? Why not tell me — when I clearly ask — what the problem is, from the beginning, instead of making me guess and wait for a month? Why waste time of both parties? Why state in a phone call that I only need to change the backgrounds in the screenshots if I actually need to change the whole fucking appearance of the game?

All this has left such a bad taste in my mouth, that I just might be avoiding the iOS platform in my future endeavors and Apple products in general from now on. This is coming from a guy who has an iMac, two Macbooks, an Airport Extreme, two iPads, iPod touch and four different iPhones. (Most of those are test devices for testing only.) Luckily I'm mostly a PC user (I especially hate coding on Mac, pure insanity!) and I've been a happy Android-user both in tablets and smart phones since 2011, and actually even my wife made the switch from iPhone to Android just a month ago (unrelated to this incident, believe it or not) so I think we'll manage. 🙂 I also might be overreacting a little, but that's for a future me to decide. For now, it seems adequate to let off some steam. Maybe I'll watch Commando while at it. 😉

Finally: I know I've been critical about Android in the past as well, but that platform has improved hugely in last couple of years whereas iOS has stagnated a long time ago (might change with iOS 7, but doesn't really matter to me). Plus developing for Android has none of that provisioning profile + certificate nonsense, I can just toggle USB debugging on and test on my device. Best of all: they're unlikely to pull off shit like this on the Google Play Store! 😉

Phew! Usually I don't write posts like this, but this was such an weird experience that I just had to document it. If you made through the whole beast of a post: what do you think? Am I just a whiny asshole that should not have made the game in the first place, or do you agree that maybe this could have been handled differently? Is there a lesson to be learned here, maybe for both parties? Feel free to sound off in the comments! Cheers everyone!

PS. Quickly go and grab Jewels 2 and iJewels from the App Store before they disappear (might happen, after this venting who knows?), with the caveat of no further updates!