Gateway Heroes [Open Alpha available]

Hello Everyone,

This is my first post on Java-Gaming. I have been lurking in the shadows and reading helpful stuff for a long time, but never had to post. As my game is nearing and open alpha, I decided to get some opinions on it, so here it is:

Idea
I am an embedded C and Assembler developer, but I have always played games and wanted to make games. About 6 months ago I decided that I need to learn a new language in my free time to be able to make games. Embedded C is no good for making widely available games. I decided on Java for its availability on different platforms, especially Android. So the adventure began…

Gameplay
The game is a MMO mixture of RPG, strategy and TCG. My goal is to achieve a gameplay feeling similar to Heroes 3, while having more RPG elements in a MMO environment. The main difficulty is how to introduce strategic elements into a game that should be easily playable for a short time on Android.

Screen Shot

http://www.java-gaming.org/user-generated-content/members/173632/gateway-heroes-1-768x384.jpg

As a part TCG the game’s art is extremely important. I was lucky to find an artist to make such a great art. Also to make it in the difficult format I decided on, but more on that later.

Availability
The game is done both as an applet and for Android. I have designed both architectures, so that about 70% of the java files are the same and introducing a new feature to one of the platforms can be transferred in a few minutes to the other. At the moment both platforms have the same stability and my plan is to release both at the same time.

Game has entered open Alpha and is available here:

Technology

  • Networking is done using Kryonet. As the Kryo serializer is already available I am using it for any data saving and loading on the client and server.
  • For the applet I am using Java2d. Perhaps there are better methods, but for the moment it works well.
  • For Android I am using the standard Canvas/Bitmap graphic. I do not use XML for anything other than configuring rights and other configurations.
  • I have designed my own java interface for graphics so that the graphic can be handled with the exact same code in the applet and Android.
  • Images are kept in SVG format. This allows for easy resizing and supporting different screen sizes, but is difficult on the artist and requires different libraries for getting a raster image out of the SVG.
  • Batik library is used for rasterizing the SVG images for the applet.
  • androidsvg library is used for rasterizing the SVG images for Android. I highly recommend this library for anyone needing to do this. It is head and shoulders above anything else available.

Current state

  • Game runs as applet (embedded in an empty page for now)
  • Game runs on Android
  • Server works, everything is done on the server and no game data is saved on the client.
  • Login/register.
  • Multiplayer works well. Reconnection is available as mobile networks are unstable.
  • Selecting character group and saving on server.
  • Basic fights against AI.
    [b]- Character development (experience and level up)
  • Character upgrades
  • Player experience/level up
  • Real hosting server. VPS up and running, domain up and running, java server up and running on the VPS
  • Persistent server information is now kept in MySQL database[/b]

Planned open Beta to do

  • Login protection (decryption/encryption)
    [s]- Character development (experience and level up)
  • Character upgrades
  • Player experience/level up[/s]
  • Single player campaigns
  • UI rework (current UI was designed a couple of weeks after I started on java)
  • Add more characters
  • Game Site with forum and game embedded in it. There is a friend working on this.

Planned Release to do

  • Single player story campaign
  • Multiplayer ELO or similar system
  • Items addition (healing, reviving, weapons, armor)
  • Player skills
  • Item Shop
  • Player market for Items and/or Characters
  • Music and sounds
  • Add more characters

Major unknown items

  • Sound and music. This is somewhat difficult for me as the first thing I do in a game is to turn the music off.
    - Server hosting. Currently my server is hosted at home, not the best solution

Any comments or suggestions are appreciated. Thank you for reading!

[05 May 2013 update]:
Moved from Planned to Current

  • Character development (experience and level up)
  • Character upgrades
  • Player experience/level up

[22 May 2013 update]:
Moved from Major unknown items to Current

  • Real hosting server

[24 Jun 2013 update]:

  • Game is available as open Alpha

[07 Jul 2013 update]:

  • Server changed to work with MySQL database

how did you find Batik? Are you animating with it? What’s the speed like?

I use Batik to open the static SVG images and draw them on a BufferedImage. The process is fast enough to be done when I need a certain image loaded and definitely not fast enough to do on each frame. I have not tried SVG animations.
Generally I find Batik to be overblown with unneeded stuff. On the other hand I found it to provide the best quality when changing from SVG to raster format.

The following items are done:

  • Character development (experience and level up)
  • Character upgrades
  • Player experience/level up
    I need to implement a few smaller ones and Single Player before the closed Alpha starts, but it is slowly starting to feel like a game.

The following items are done:

  • Character development (experience and level up)
  • Character upgrades
  • Player experience/level up
    I need to implement a few smaller ones and Single Player before the closed Alpha starts, but it is slowly starting to feel like a game.

I decided to move from a home server to a real one. The reasons for these were:

  • More realistic results from testing
  • Home server is getting a lot of attacks and I don’t see the point of spending time to work on a server I will not use

I had no previous experience with anything connected with hosting or with Linux. After some reading I picked up a VPS, domain and set it up with the simplest possible page:


After that came the interesting part. Porting the server, written for windows, using swing to Linux with only terminal interface. I used commons-daemon from Apache and JSVC. Pulling away from swing and using commons-daemon is not very hard, but getting JSVC is. JSVC is mostly used with Tomcat and any information about it is mostly connected with Tomcat. Furthermore some of the errors it gives are very misleading. I’ve got it working at the end.

This procedure has added a delay of about 2.5 weeks, but I had to do that at some point, so it is acceptable.

I have been looking at hosting and home servers for a benchmarking app I’ve been working on… I eventually settled on using Google App Engine - it’s free but it can scale up. The app engine datastore is weird, but in an interesting way.

I like your art by the way.

I decided to move from a home server to a real one. The reasons for these were:

  • More realistic results from testing
  • Home server is getting a lot of attacks and I don’t see the point of spending time to work on a server I will not use

I had no previous experience with anything connected with hosting or with Linux. After some reading I picked up a VPS, domain and set it up with the simplest possible page:


After that came the interesting part. Porting the server, written for windows, using swing to Linux with only terminal interface. I used commons-daemon from Apache and JSVC. Pulling away from swing and using commons-daemon is not very hard, but getting JSVC is. JSVC is mostly used with Tomcat and any information about it is mostly connected with Tomcat. Furthermore some of the errors it gives are very misleading. I’ve got it working at the end.

This procedure has added a delay of about 2.5 weeks, but I had to do that at some point, so it is acceptable.

I have been looking at hosting and home servers for a benchmarking app I’ve been working on… I eventually settled on using Google App Engine - it’s free but it can scale up. The app engine datastore is weird, but in an interesting way.

I like your art by the way.

Google App Engine is a very interesting solution and something I definitely considered. At the end I decided to pick up a standard VPS with A Small Orange. Google App Engine looked like a bit too much as I had no experience with hosting and I decided on hosting with cPanel/WHM.

There are a few things about Google App Engine not totally clear for me:

  • Does it allow for normal domain hosting?
  • For java, I understand that it uses standard JRE, what I don’t understand is on what do you run this. Is this a Linux server or something very different? Does it have Graphic interface?
  • If it is Linux, do you have root access?
  • Can you host the domain and your app on the same IP?

Even if I went on a different route, Google App Engine still looks interesting and I might reconsider. As for the art, the credit goes to the artist.

Google App Engine is a very interesting solution and something I definitely considered. At the end I decided to pick up a standard VPS with A Small Orange. Google App Engine looked like a bit too much as I had no experience with hosting and I decided on hosting with cPanel/WHM.

There are a few things about Google App Engine not totally clear for me:

  • Does it allow for normal domain hosting?
  • For java, I understand that it uses standard JRE, what I don’t understand is on what do you run this. Is this a Linux server or something very different? Does it have Graphic interface?
  • If it is Linux, do you have root access?
  • Can you host the domain and your app on the same IP?

Even if I went on a different route, Google App Engine still looks interesting and I might reconsider. As for the art, the credit goes to the artist.

The game is now available as open Alpha. I don’t want to give any major info about what to do, because I don’t want to influence any problems the game has. The only thing I will mention is that the Options button in the main menu is not working at the moment and that the reward chance is higher for multiplayer (as long as there is someone to play against).

I like your SVG!

The game is now available as open Alpha. I don’t want to give any major info about what to do, because I don’t want to influence any problems the game has. The only thing I will mention is that the Options button in the main menu is not working at the moment and that the reward chance is higher for multiplayer (as long as there is someone to play against).

I like your SVG!

Thank you, I am sure that the artist also appreciates it.

I’ve implemented 1 point that was not included earlier, but I think it was important. The game kept all of it’s data in RAM and saved it permanently when stopped. This was bad as there was a possibility for the server to break down or reset and to lose all new data. I thought about trying to save from time to time while running or something similar, but at the end I decided to go with a database as this is pretty much what I was trying to do. I’ve changed the server to work with MySQL database using JDBC connector. I could not find how it should be done from architecture point of view, so I implemented it with a Single Thread Executor, queuing the commands. If anyone had a better idea of how this should be implemented, I would love to hear it.

Thank you, I am sure that the artist also appreciates it.

I’ve implemented 1 point that was not included earlier, but I think it was important. The game kept all of it’s data in RAM and saved it permanently when stopped. This was bad as there was a possibility for the server to break down or reset and to lose all new data. I thought about trying to save from time to time while running or something similar, but at the end I decided to go with a database as this is pretty much what I was trying to do. I’ve changed the server to work with MySQL database using JDBC connector. I could not find how it should be done from architecture point of view, so I implemented it with a Single Thread Executor, queuing the commands. If anyone had a better idea of how this should be implemented, I would love to hear it.