A Holiday Release - SolomonRPG:Alpha 0.3

Download the client: SolomonRPG.apk
Signup here: http://solrpg.com

It's been a few months since I last made a release.
With the restlessness of the holidays, and finally achieving some sort of stability I've decided to make another alpha test release.
Here's a breakdown of the issues and notices for this release:

Because I am unemployed at the moment, I can't afford to keep my linode running without any sort of income.  I've gone ahead and shutdown the previous Linode I had setup so I don't waste money.
As with the previous release, I'm hosting the server on my home server so things will be noticeably slow.
I've made the http://solrpg.com point to my home server as well.  Because I'm sort of at a feature freeze I hope that I won't be messing with the server that much.

I've gone ahead and spent some time polishing the client code.  Making sure it'll work in various resolutions and just polishing up the lifecycle of the application.  I've tested it on a few G1s running Android 1.5 and Android 2.2 and it works just fine.  I also tested it in the emulator with larger screens and it seemed to work just fine although it's unusably slow in the emulator.

This whole project has been centered around learning Erlang.  These past few days I took the time to learn about the Erlang OTP application setup.  Creating an .app file, bootstrapping the application when the VM starts, creating a proper application supervisor, and updating the various sub servers to die and restart more gracefully.  I also added things like database connection pooling.  This was very fun and I learned a lot about the Erlang ecosystem.  

I finally added the concept of switches and created my first real 'quest'.  A switch, can hold any given value.  Anything from a string, to a boolean, to an integer, or float.  Each switch is defined by a name, and needs to be defined with an NPC.  Once it's defined, you can use it globally in other events.  Here's how my first quest looks like.  This is real game scripting code:
Generic person NPC:

var PENDANT_SWITCH = 'village_pendant_quest';

if (Solomon.getSwitch(PENDANT_SWITCH))

function describeQuest()
    var MessageStr = "Hey, if you find a pendant in the forest, please bring it to me. \
My mother gave it to me, and it's not of much value, but I'd be happy to pay a \
small reward for it.";

Dropped pendant NPC:

var PENDANT_SWITCH = 'village_pendant_quest';

if (Solomon.getSwitch(PENDANT_SWITCH))
    Solomon.message("It's empty.");
    Solomon.setSwitch(PENDANT_SWITCH, true);
    Solomon.message("You've found a pendant");
I've also added support for catching errors and when the script fails to load.  A message is simply sent to the player, so the creator has to make sure there are no mistakes in the scripting code by constantly testing them in the client.  

The Future
Certainly the most time consuming aspect of the game seems to be the story development and map making.  My girlfriend is helping me create maps for the games and she's really good at it, so that's a load off for me.  Now I'm just concentrating on coming up stories, making maps, fixing bugs, and stabilizing all the features.
However, there are a couple of features I'd like to implement sometime next year:
  • HTML Tileset Editor
  • NPC Auto Walking
  • Compress data sent over network
None of these features are critical to the game.  The NPC autowalking is something I'd like to see soon.  Right now all you see are moving water, moving players, but I'd like to have the option for the NPCs to move as well.
Compressions of data is sort of important, this is actually just needed at a couple of critical points.  When teleporting from area to area and when first logging in.  Not a priority. 

There are also plenty of lesser features I have to implement before releasing the game, but those are the big ones

Mainly just brainstorming with my girlfriend on the world map.  She's making the maps on RMXP and then I select whichever tiles she used and compact the tilesets and import them into the game.  
I'm also polishing the battle system. 
I also had to implement leveling curves which was pretty fun.
Basically, it's a way to keep track of how many experience points are needed to get a certain level.
Each class has the following attributes:
level, exp, hp, mp, attack, defense, speed, and critical_hit_chance.
Each class has a certain algorithm to calculate how many exp points are needed to reach a certain level and what to set the attributes to when the player reaches those levels.  
Then I used a jQuery chart library to generate some tables to visualize it better.  

I still have a bunch of story related work to do, here's my TODO list for the release:
  •     Full concurrent world map
  •     4 races with full story lines
  •     All races and content up to level 20
  •     Monster and monster parties for all world areas
  •     Integrated multiplayer communication and party management
  •     Fully working multiplayer battle system with stats
  •     SOLRPG.COM - 
  •         Full documentation of game overview and gameplay
  •         Fully working site with minimal feature set, doesn't have to be perfect