viernes, 28 de junio de 2013

Alpha Funding on Google Play and Desura

Just published KeeYA's Alpha Funding app on Google Play. The app has got music added, and polished a little more the UI.

Now, why Alpha Funding you ask? It's really simple, i want KeeYA to be supported on a wide variety of platforms, and for that i need to have the aforementioned platforms with me. Currently, i'm targetting to get KeeYA on:

  • Windows (main development rig)
  • Linux (have one @ home)
  • Mac (need to buy a Mac mini)
  • Android (tested almost daily on my phone)
  • iPhone (need to buy an iPhone)
  • Windows 8 Phone (need to buy one)
  • PS Vita (have the SDK already and using the emulator, but the hardware is needed to test it)
  • Ouya (my console is en-route to my hands).

As you can see, there are some platforms that i must buy in order to develop for them, and they're down right expensive in my country, so i'm counting on the Internet to give me a hand here and push this little game with big aspirations to every possible platform out there.

Desura is still reviewing my publishing info (as of 2013-06-28 11:00:00 UTC), so still no alpha funding for Win/Mac/Linux.

Get it on Google Play

viernes, 21 de junio de 2013

Icons, Dialogs and an uncomfortable finding

This week KeeYA got new Dialogs!

Indeed, although pretty crude for the moment and very inocuous, there is the chat mechanic already. The AI picks whatever dialogue it can select from the current conversation state, and whatever you say doesn't has any impact in the game (yet).
In the same spirit, indicator to transitions and activable buttons were added, to give the player feedback about their environment.
Check out a video of me jumping and initiating dialogues.

The only real bad thing this week is that i couldn't compile the Andoird demo on time because SCXML (the finite state machine i'm using for the dialogs) isn't compatibe with the system.

miércoles, 19 de junio de 2013

Got my OUYA email today!

Today, after a long long LONG wait, i've got my OUYA email!

It seems KeeYA is going to be ported to the OUYA too!

So, to anyone who preordered or kickstarted and hasn't got their confirmation email yet, here's what i did.
  1. Go to and click on the BIG orange button on the top right of the page with "SUBMIT A REQUEST" text.
  2. Submit your Order ID, tracking number or everything else you got when you pre-ordered or kickstarted.
  3. Tweet to @OUYASupport your ticket number and your current problem.
  4. Wait for your email, notifying you've got your OUYA incoming (if like me, you receive an email telling you to correct your address, go and do it now).
  5. Wait for goodness to appear on your front door.
That's it, they seem like a friendly bunch, don't be a douche and use their support channels.

viernes, 14 de junio de 2013

Fonts, text, transitions, buttons & Android

The development was fairly boring this week, but had to be done. Fonts aren't glamorous, but they are needed. I've found that i like a more spartan look to the UI of my games (like Skyrim). So, i've decided to settle on a simple UI without much clutter and let the game be the "filler".

Fonts in LibGDX

Using fonts in LibGDX is very straightforward, it even has a Freetype engine extension that lets you render the fonts on the fly using a texture atlas. To generate the bitmap font you just do:

FreeTypeFontGenerator ftfg = new FreeTypeFontGenerator(fileHandle);

And to render text use a SpriteBatch to render text like this:

font.draw(sbatch, text, X, Y);


The transitions are fairly straightforward. There are the automatic transitions (like scrolling leftward from the game start) or pushing a button when touching a transition body (like pressing the down button whe you're touching the pipe in the dungeon).

Get the Android build on my Google Drive.

viernes, 7 de junio de 2013

Gameplay Video

Enjoy! :-)

Animations, Actuators, Stacking and an Icon... Also, IndieDB

This week i tackled the animation problem for the first time in my engine, worked a little with the actuators (to fire animations and scripted events) and enhanced the inventory system with stacking. Also, i published the game on IndieDB, which was all in itself a nice idea.


Blender has a quirky way to store animation data when using NLA. You see, all the animations in blender are represented by what they call FCurves, those FCurves are almost always represented by 2D bezier curves with the X axis being the frame number and the Y axis the value of each component that the given FCurve modifies. The default animation of every object is represented by an action which is unfreezed, if you click on the freeze button you transform the given default animation in a Non-Linear Action or NLA for short.
"THE" freeze button
Each NLA is located in each object's "animation_data" property, which in turn has many "tracks" that contains "strips" composed by the FCurves. The real quirk here is that each strip has a property called "action" (huh? confused?) that contains the FCurves, it doesn't has the FCurves directly. So to resume, to acces the FCurve of a given NLA in an object represented by the variable "obj" you do:
track = obj.animation_data.nla_tracks[x]
fcurve = track.strip[y].action.fcurves[z]
points = [pt for pt in fcurve.keyframe_points]
There, you have it, bezier points every time of the day! Pheeew... That's a lot of trying and failing for one day. Btw, the default non-NLA of an object is on obj.animation_data.action, there you go.


Because i spent the week bashing my head against Blender and its quirky way to implement its animations, i decided to implement the actuators in a dead simple way. So simple, it is shameful. Each "actuator" is a common collision or animation object, with a custom property which fires an animation or an event, depending on the property name. So, for instance "anim_ontouch" occurs when the player touches the object, and it fires an animation. How do you specify the object and animation to fire? "OBJECT_NAME.NLA_NAME" and if you want to fire the same object's animations, just do ".ANIMATION_NAME"... simple.


So, if you played the demo previously, you'll know that the inventory grows endlessly big with each ammunition cartridge you pick, which is hard to handle and is a bad user experience. So i decided to implement stacking. It is in its early days, but it already looks WAY cleaner and organized.


We have a new icon, check it out!


And finally, i included KeeYA on IndieDB. It is looking good, stats are getting better and better with each passing day. If you're an indie dev, go NOW and publish your game there.

Also, publishing in Desura when you're listed on IndieDB is a no-brainer. Go... stop reading!

viernes, 31 de mayo de 2013

AI, sounds, a new inventory and a Name

This week i finally introduced simple AIs, simple sound effects and a new inventory which is more pleasing to the eyes. Also, i decided to name this game "KeeYA: Keep Yourself Alive" (no relationship with Queen).


Javascript is a great language for AI programming. I've always loved it and the functional aspects of it make it dead easy to implement semi-emergent behaviors. I decided that to keep things easy, the heavy lifting will be implemented natively (native as "inside java") and expose API calls inside javascript to keep it snappy.


Sounds are very important to a game, so much that this little game has gotten more interesting and enjoyable. I decided to include a sound called Willhelm Scream because i did find about it this week and was amused by it. LibGDX has a quirky behavior with sounds, sometimes the gunfire sounds get muted by the death sounds.


The previous inventory was ugly and didn't have the style i want for the game. I decided to get rid of complicated UI elements and go along with a Skyrim-style inventory which is simpler to implement and has a cleaner look.
As comparision, here's the old inventory, suggested by +Olivio Sarikas
Ugly, indeed :-)

New name: KeeYA, Keep Yourself Alive

Because i included AIs with a simple firing pattern, i had to keep avoiding getting shot by them. My 6 y/o daughter loves to test my game and she was frustrated by the AI so i told her "keep yourself alive!!" and voila! a name was born.

Want to keep posted about the progress of KeeYA? Subscribe on the sidebar, there's a mailing list.