Skip to content

Archive

Category: Uncategorized

After rounding up SDKs and solutions on several mobile platforms, I hit a no brainer: why not Java?

Virtual success

In 2006, the write once, run anywhere motto felt bleak if anything. I had become an experienced Java SE developper with little or no interest in developing java applications, let alone opportunities. I know it’s down to personal experience – well that, and all the trouble people seem to have running java apps and applets on desktop platforms.

App stores everywhere

I can’t absolutely tell if the app market is taking off beyond iOS. We might as well pretend there’s only one App Store (capitals).

It will take off, sooner not later, and every mobile device manufacturer seem busy setting up their own store, designing tablet PCs and introducing touch enabled device.

Another thing that they all have in common is JME. Java ME seems to be the only platform that actually runs everywhere (except on iPhone, but read here and here).

Have another cup of Java

Some advantages of Java over C/C++ over Objective C are somehow static, not much has changed in the past 10 years or more:

  • No memory management (no zombies)
  • No pointers (no address errors)
  • No .h files

I know what you’re thinking. Java is too slow to make 3D games, right? Well we’ll see. Objective-C is too slow to make 3D games anyway. All critical code sections have to be written in C or C++.

Straweberry and Cream

Needless to say, every other manufacturer somehow ship JME with their own SDKs and a string of proprietary APIs. I suspect 90% of the code will remain ‘cross platform’ so I guess finding out the easiest to use SDK maybe a decent way to get started. I collected a few links to developper portals / java pages.

Games and devices

Pocket Gamer is an excellent resource for learning about mobile gaming beyond iOS. They have reviews of the latest-hottest games and publish the list of devices they use for testing games, along with top 10 mobile gaming devices roster.

Yea. That, and a Merry Christmas. WTF.

Before glossing lightly over a topic that some iPhone developers will undoubtedly find heretic (after all, we’ve already tasted the forbidden fruit) … … there’s one thing I’d like to share.

In 1999, I stopped developing on TOS. I’m not sure why. The most likely reason is that I left my parent’s home, and I suppose there was no special reason for me to buy another Falcon 030.

Well frankly speaking I’m not sure what has so dramatically improved since TOS.  The only really good piece of IT news in the meantime may be that mobile OSes aren’t all based on overlapping windows anymore. Apps were running nicely too with 512kb RAM or so (yes, kilobytes). Most definitely good enough for the 2D oldies leading the app craze.

Anyways, I feel helpessly agnostic about devices and operating systems, so I decided to have a look at the Ovi store. It’s not the first time either since about a year ago I was hopping my merry way on Nathan road in Hong Kong, gazing at a fresh bunch of OpenGL-ES2 enabled devices.

Apparently publishing on Ovi costs 1 euro. Feels like a trick-no-treat thing (will they soon announce 1.5 million registered developers?(1)) Fortunately I’ve  acquired the ‘Oh let’s not get another $1 krapp’ reflex that saved me from (what may not have turned out to be) a tedious registration process.

The store itself looks pretty decent. Considering originality isn’t every other distributor’s forte, we’ll forgive the ‘not invented here’ design inspiration.

Mind, it does feel quite difficult to navigate between Ovi stores. Switching the URL to .us/co.us/.com doesn’t help as they keep geo-locating me somewhere else. Yeah maybe I don’t live in the US after all. I won’t quote an idiotic article suggesting Nokia should have relocated to California. One link that you might bookmark (because it may not have changed in the past 5 years): the Qt developer portal.

They have a blog too, and there’s a demonic article I really want to read: Nokia’s app store sees explosive growth, still sucks. To set things straight, note the author of that article didn’t quote app download figures either (but see here, here and here).

I feel obliged to mention that Ovi means sheep in latin. Maybe that’s why nobody speaks latin anymore.

I was happily discovering that there is a beta version of Qt compatible with MacOS, when I somehow remembered that I’m typing this from a makeshift workstation involving:

  • A weeny 1366×768 display (anchored to a weenier 1024×600 sidewinder)
  • 16 GB SSD(1.25 GB available)
  • A 16 GB watchamacallit flatkey.
  • Intel Atom N270
  • 0.99 GB RAM (really)
  • A neatly compact K340 keyboard. Please look-up the brand as I’m not the fan – nice buy though.
  • An utterly indestructible wireless mouse (yea, topping a Wacom tablet) that, for all I know, survived the Y2K bug, 3 heartbreaks and 4 or 5 home-movings,
  • (No, it isn’t a mobile handset)

Qt vs JME?

If I search my memory carefully, I should be remembering that Qt was in Nokia’s oven when I first downloaded their Java SDK. Here we go, now they have two SDKs instead of one. A quick look at a pretty comparison chart shows that Qt only runs on so-called smart-phones (as in, the recent ones). Am I missing something out… ?

All directly leading to a dilemma…

With a Playstation phone (Ericsson) and the X7 Sushi lined up for 2011, if I got a device at this point, my choice would be somehow conservative (pick from a somehow outdated selection?)

But no, actually I don’t really fancy JME. Why not try something almost fresh? After all I already was a laggard when I boarded the iOS crew.

Hitting the hard-line…

Maybe the first thing I should have done is downloading the SDK downloader. At little less than 1GB, the SDK itself is a baby mammoth. Apparently the Android SDK is just about a 100 MB.

I can’t promise I’ll go further than hello world this time. It’ll be down to docs and examples I’m afraid, not market share (to be c’d?)

(1) Read the so called demonic article. I can’t believe I even guessed the figure right.

About a year ago, an anonymous stack overflow user asked for a ’2D code editor on an infinite canvas’.
You can read my reply there – surely if I happen to stumble on even casual interest for stuff that kept me busy for several years, I should reply.

I’m not very active on this side right now. Some people are. Code bubbles reminds me furiously of the Antegram sequels. I still think it might take another 15 years for genuinely ‘visual’ programming tools to take off, but here it is.

Here’s a personal message to you if you steal my app:

F**K YOU.

Today I did a quick check on the buzz around my iPhone game, Antistar 3D: Rising

The majority of Google search results point at illegal download sites. I don’t know whether displaying these results is legal or not. I would rather these sites didn’t get free extra promotion as a result of Google displaying their brand next to Twitter results.

most iPhone Apps are sold the price of a chocolate bar. Cheaper than a glass of wine.

If you’re visiting this blog and feel like trying Antistar, please consider buying it. More than a year of patient, loving work – never mind 10 years of expertise and self-improvement – went into my game. And you can get it for just three bucks, or wait for the next sale.

Would you nick a chocolate bar from somebody’s jacket while they go to the loo? Maybe you wouldn’t do that, so please don’t steal my app, or another. Nobody’s ‘beating the app industry’ by doing that. There’s hardly an ‘app industry’ to begin with.

Thousands of indie developers and studios feel personally beaten and humiliated by millions of petty thiefs that can spend hundreds of dollars on a phone, but can’t dish a dollar for an app.

If you’re still hoping that your iPhone game will get reviews as soon as it is released, think again.

The market for app review sites may not be quite saturated yet. Meaning these guys have a lot on their hands. We haven’t seen too many thematic review sites yet, and it’d be nice to have sites focusing on, indie games… core games… arcade or action games, and so forth…

If you think a review will get your game to sell, start tweeting yourself to death. In fact, start your PR work even before you know what your game is about.

Anyways, iFanzine did grace us with a beautifully written in-depth review. If you’re wondering what Antistar is about and don’t want to get yourself dirty reading 50 articles on this blog, then you surely want to check it out. They have identified with threatening accuracy the main sources that inspired the game.

Thanks, iFanzine :)

Hairlock - dev picUpdate: Antistar 3D: Rising is now available on the app store!

Why is a 13 year old dreaming of metal cities?
What lies in the dark forest beyond Klinnburg?

Anticipating the success of the Twin Star Saga,
Antistar 3D offers stylish anime action and adventure.

>> Watch the video
>> More screenshots

Join the buzz or check discussions on Touch-Arcade forums.

With an exciting title putting experienced and new players on fair ground, we’ve just proven that mobile entertainment owes nothing to game-boxes:

Hairlock - dev pic

  • Realtime, fullscreen interactive 3D
  • Unique mix of adventure and arcade
  • Unexpected allies and opponents
  • innovative ‘no grind’ gameplay
  • An original cast of haunting, magic creatures.

From the quaint emptiness of a marooned village to a mice gang’s lair, become a child without memories,
armed with only courage and a forward attitude to solving life’s little annoyances – not having a clue what’s going on, not having a chance against oversize wildlife and getting captured by really bad guys.

With procedural landscapes, three dimensional growth and beautifully detailed models,
Antistar 3D: Rising pushes the limits of 3D on mobile platforms and will seamlessly adapt to your device’s capabilities.

Main Contributors: T.E.A de Souza, Chan Zhang, Karen Xu; Music: Matt Hansen (Calpomatt), Justin R. Durban (Edgen), Mark. SFX: Mark E Buckland, Robert Gacek (FXProSound), Joel Carli, Sith Master, Starmanltd, The_lone1, T$_Technologies.

Antistar 3D: Rising will be distributed as a universal app taking advantage of all device’s capabilities:

  • Basic rendering optimized to run smoothly on iTouch
  • Antialiasing (iPhone 3GS)
  • Retina Display (x1.5 iTouch definition 3D view)
  • 1004×768 full-screen on iPad

Visit the product homepage for a quick description.

Summary:

  1. At the time of this writing I don’t believe there’s a pen worth buying for the iPad.
  2. Tablet PCs have been around for a while. If you want one that supports a decent pen, try the LS800
  3. Finger drawing is the future.
  4. Hopefully, one bright and beautiful monday morning, 3D artists will drop their mice and use their fingers instead.

You bet I didn’t really intend using my iPad when I got it.

After all, I’ve already got a beautiful S101 EeePC that I hardly use. Just for skyping, note taking and surfing in coffee-shops. And working on the go – you have to believe it: S101 has a full size keyboard.

Hardly before I was 10, my Dad miraculously suggested I learn 10 fingers blind typing. Worked out better than teaching me not to use the lot of them (fingers) to eat cheese and other tiny bites. Ironically, I learned on a Mac+, back in the time the desktop was still a revolution. Ain’t we getting old…

In short, I felt slightly embarrassed, at the outset, finding time consuming information and mass entertainment. In the meantime…

Maybe we don’t really need a pen

After reading a comprehensive review, I ordered a Dagi pen – what’s in ordering a pen that’s as big as my finger (I won’t name products I haven’t tested)? Then I finally got a drawing app, grabbed the mean weeny plastic thingy, had a go at it, altogether relieved my discomfort, first rubbing off, then correcting my work with… …a finger.

That’s when the magic happens. I can type pretty good with 10 fingers, and I really only draw 10 times worse than I type. Not significantly worse with a finger than with a pen.

When’s the 3D killer app?

I love vector graphics. Two finger gestures are perfect for zooming and rotating if anything. I didn’t expect finding anything like ‘just a digital notebook where you can draw, and turn the pages by pressing the screen corners’. Maybe there’s one (Adobe Ideas is too complex and too slow for me. I just tried).

If I can use my fingers to make 3D models and animate them, with whatever added ease this could bring on top of what a blender can do for us, well. I’ll throw a party.

OK… I can make my own drawing ‘pad-app’. I can even make a little utility for quickly modeling stuff. Nice to forget there’s no army of me backing random ideas.

Draw on the go, with a pen

If you’re into drawing on the go using suitable hardware, I might have read that the LS800 supports Wacom pens. Que veut le peuple?

Today I’ll be implementing un-lockable stages for my game. What am I looking at?

  • I have a scheme for saving/restoring the game, but I don’t want to use that. Saving the game means saving state about the player’s position, items they acquired etc…
  • I already have stages defined in my game; up to now I have only used that for testing and set the current stage using a #def
  • I need an interface displaying only stages the player has already unlocked.

OK, I made myself a nice little interface and disabled save slot setup previously defined from:

[Generic2DBoardGameAppDelegate applicationDidFinishLaunching]

After a little round of non-commital cookery, I re-wired my game slots into game chapters and can select any of five chapters to start with. Now I still need to ensure that a player completes a stage before  the matching chapter becomes available.

OK but…

I now have two bugs:

  • First, the transition is not cleared from stage to stage. Transition items need to be cleared when moving to the next stage [fixed]
  • I still have this bug with dialogues repeating over and over – actually that seems to be linked with the first bug, because it is the ‘stage change’ action that didn’t clear when moving to the new stage. This effectively causes stage 2 to instantiate twice, and may trigger the dialog repeat [fixed]

In Blender, an Action is a sequence of key frames representing a character gesture (walking, jumping, slashing, falling, etc…). Actions are used as building blocks in Blender’s non linear animation (NLA) editor. We can use actions to create ‘animation catalogues’. An export script using actions might be used to batch export all animations for one or several characters, so we can update our game assets whenever we need, which simplifies and enhances flow.

Interactive Scripting Session

For this session, I have created a little robot – ‘funbot’ and an armature for it.
I then create two actions and detach them from the funbot. To take advantage of actions, we need to make each action current, i.e. for every action we attach the action to the armature and export all frames or key frames (either the armature frames/keyframes or the deformed mesh) before moving to the next action. Time for scripting:

#retrieve the action dictionary
actions=Blender.Armature.NLA.GetActions()

#get an action named 'nod' (as defined by your animator)
action=actions.get("nod")

#the following prints '[Action "nod"]'
armature=Object.Get("FunBotArmature")

#this makes the action current for the armature,
#so we can playback the action and record it.
action.setActive(armature)

#even if you call this, the window won't update, but the underlying
#model does, which is what we need for export.
scene=Blender.Scene.GetCurrent()
scene.update(1)

The above script does nearly everything we need related to actions – giving access to all defined actions within a blender file, it retrieves an action by name, applies it to the correct armature and updates the scene; at this point we’re nearly ready to iterate action frames and export the model and/or armature to a file (see my interactive session on exporting meshes deformed using an armature)

Just one more thing we need is knowing the number of frames in the animation. We can actually get better than just the number of frames – instead, we can get the list of keyframes, in ascending order:

#get the list of keyframes
keys=action.getFrameNumbers()
#print all keyframe indices, like ' [1,11,24,36,] '
list(keys)
#print the length of the animation
keys[len(keys)-1]

Using this, we can choose to either export only keyframes (use less memory), or all frames in the animation (OK for really simple animations and models).