• entries
22
30
• views
31343

Creating games for mobile phones.

## Skills and Abilities and Spells

I am getting close to being done with the initial version of the Android RPG Deadly Dungeons. I have finished the design of leveling up for the skills, abilities, and spells. There will be 32 in total. If you want to read some more about it then visit the website. I'm posting the talents here for you to look over. If you have any ideas for extra skills, abilities, or spells, then please share them.

Weapons
----------------------------------------------
Staff
level 1 - Magic Stats * 1.5
level 2 - Magic Stats * 2
level 3 - Magic Stats * 2.5

Sword
level 1 - Damage + 10%
level 2 - Damage + 20%
level 3 - Damage + 30%

Axe
level 1 - Damage + 10%
level 2 - Damage + 20%
level 3 - Damage + 30%

Bow
Armor piercing enhancements added per level
level 1 - Pierce + 5%
level 2 - Pierce + 10%
level 3 - Pierce + 15%

Armor
----------------------------------------------
Cloth
level 1 - Magic Stats * 1.5
level 2 - Magic Stats * 2
level 3 - Magic Stats * 2.5

Leather
level 1 - Agility Stats * 1.5
level 2 - Agility Stats * 2
level 3 - Agility Stats * 2.5

Scale
Magic Defense enhancements per level
level 1 - Magic Defense + 10%
level 2 - Magic Defense + 20%
level 3 - Magic Defense + 30%

Plate
Physical Defense enhancements per level
level 1 - Physical Defense + 10%
level 2 - Physical Defense + 20%
level 3 - Physical Defense + 30%

Fighting
----------------------------------------------
Berserk
Increases physical damage but reduces health (Cost 5% health per second)
level 1 - 15% damage increase with melee
level 2 - 30% damage increase with melee
level 3 - 45% damage increase with melee

Holy Strike
Massive attack (Cost 100% mana, must be full)
level 1 - 50% damage increase with melee
level 2 - 100% damage increase with melee
level 3 - 150% damage increase with melee

Multi Shot
Shoot multiple arrows at once
level 1 - 2 arrows on a single target
level 2 - 2 arrows on target 1 arrow on other occupying tile
level 3 - 2 arrows on target 2 arrows on other occupying tile

Shield Wall
Increases Defense of Shields
level 1 - 50% shield defense increase
level 2 - 100% shield defense increase
level 3 - 150% shield defense increase

Health
----------------------------------------------
Health Potion
Increase health potion effectiveness
level 1 - HP + 20%
level 2 - HP + 40%
level 3 - HP + 60%

Mana Potion
Increase mana potion effectiveness
level 1 - Mana + 20%
level 2 - Mana + 40%
level 3 - Mana + 60%

Health Regeneration
Natural health regeneration
level 1 - 1% per 2 sec
level 2 - 2% per 2 sec
level 3 - 3% per 2 sec

Mana Regeneration
Natural mana regeneration
level 1 - 1% Mana per 2 sec
level 2 - 2% Mana per 2 sec
level 3 - 3% Mana per 2 sec

Healing Spells
----------------------------------------------
Lay Hands
One off healing that drains all mana (Must have at least 50% total mana)
level 1 - 25% of health restored
level 2 - 50% of health restored
level 3 - 75% of health restored

Mend Wounds
Healing spell (Cost = level * 4)
level 1 - level + 1 hp per magic stat
level 2 - level + 2 hp per magic stat
level 3 - level + 3 hp per magic stat

Growth
Regeneration spell (Cost = level * 4)
level 1 - 2 hp per magic over 10 sec
level 2 - 3 hp per magic over 10 sec
level 3 - 4 hp per magic over 10 sec

Miracle
Removes status effects (Cost = level * 4)
level 1 - 20% chance to remove
level 2 - 40% chance to remove
level 3 - 60% chance to remove

Fire Spells
----------------------------------------------
Fire Arrow
Direct damage fire attack (Cost = level * 4)
level 1 - damage = magic
level 2 - damage = 1.5 * magic
level 3 - damage = 2.0 * magic

Fireball
Projectile damages all creatures in single tile (Cost = level * 6)
level 1 - damage = magic
level 2 - damage = 1.5 * magic
level 3 - damage = 2.0 * magic

Circle of Flame
Creatures in adjacent tiles take damage, active until canceled or out of mana (Cost = level per 3 sec)
level 1 - damage = magic * 0.25 every 3 sec
level 2 - damage = magic * 0.5 every 3 sec
level 3 - damage = magic * 0.75 every 3 sec

Blast
Creatures in adjacent tiles take damage, one hit spell (Cost = level * 4)
level 1 - damage = magic * 0.25
level 2 - damage = magic * 0.5
level 3 - damage = magic * 0.75

Ice Spells
----------------------------------------------
Ice Bolt
Direct damage ice attack (Cost = level * 4)
level 1 - damage = magic * 0.5 + 10% chance to slow
level 2 - damage = magic + 20% chance to slow
level 3 - damage = magic * 1.5 + 30% chance to slow

Blizzard
Creatures in adjacent tiles take damage, active until canceled or out of mana (Cost = level per 3 sec)
level 1 - damage = magic * 0.25 every 5 sec + 5% chance to slow
level 2 - damage = magic * 0.5 every 5 sec + 10% chance to slow
level 3 - damage = magic * 0.75 every 5 sec + 15% chance to slow

Frozen Armor
Armor of ice that reduces damage and freezes enemies that attack near player (Cost = level per 5 sec)
level 1 - reduce damage by 10% + 2% chance to freeze
level 2 - reduce damage by 20% + 4% chance to freeze
level 3 - reduce damage by 30% + 8% chance to freeze

Frost
Slows adjacent creatures (Cost = level * 5)
level 1 - 25% chance to slow
level 2 - 50% chance to slow
level 3 - 75% chance to slow

Lightning Spells
----------------------------------------------
Lightning Arc
Direct damage lightning attack (Cost = level * 5)
level 1 - damage = magic + 0.25 to enemy in same tile
level 2 - damage = magic * 1.5 + 0.25 to enemy in same tile
level 3 - damage = magic * 2.0 + 0.25 to enemy in same tile

Electrocute
Direct damage percentage lightning attack (Requires level * 8 mana and drains all mana)
level 1 - reduce creature to 90%
level 2 - reduce creature to 75%
level 3 - reduce creature to 60%

Charge
Next spell deals increased damage (Cost = level * 4)
level 1 - increase by 50%
level 2 - increase by 100%
level 3 - increase by 150%

Small area of effect damage with chance to stun (Cost = level * 4)
level 1 - damage = magic * 0.1 + 20% chance to stun
level 2 - damage = magic * 0.2 + 40% chance to stun
level 3 - damage = magic * 0.3 + 60% chance to stun

The Android RPG that I have been working on, Deadly Dungeons, will soon be in beta.

If you have an Android phone and would like to test out the app, then please email contact@deadlydungeons.com to sign up. Once beta starts, you will be emailed the game with instructions on how to install it. You can also play it via Google's Android Emulator. Though, performance on the emulator isn't too good.

## Creature Combat

I have added a news item about the Android RPG / Dungeon Crawler I am working on at the game's website Deadly Dungeons. Here is the intro...

Quote:
 Deadly Dungeons will have a large number of creatures with their own attacks and traits. Knowledge of these creatures will be important in understanding their abilities and the threat they impose. As players gain in level and play higher difficulty levels, they will be met with increasingly difficult creatures that do more than just hit harder.

I am currently working with neveza. He has played several games that are similar to the one I am developing. He has designed a majority of the combat system and has come up with some fairly interesting creature attacks. The way creature levels are set up, certain creature types will become more or less difficult based on their species. The species of the creature determines special attacks and attributes.

One thing I've noticed while developing this game is that the more things I add, the more things I think I need to make the game better. I decided to make the cut-off date on development sometime around Fall 2010. Given Android's distribution model, I think it would be possible to release the game once I feel it is fun and stable. Then, I can use player feedback to enhance the game with new features.

It has been a while since I gave an update on the Android dungeon crawler I have been programming. I have made good progress so far. I can generate levels with doors, creatures, and items. Levels are randomized with various decorations and texturing. There is also an inventory, mini map, and large map implemented.

Here is a Youtube video showing me walking around a cavern level killing helpless creatures:

Here are some screenshots of the current progress:

## Android Dungeon Crawler

After working with Android OpenGL ES, I got fairly comfortable using it. Since Android has a lack of dungeon crawler games at this time, I figured I would create one. Here is a video of my current progress. It will be a mix of Dungeon Hack, Diablo, and roguelikes. The current title is Deadly Dungeons. Let me know if you have a better title I could use.

If you search around on the Internet about how to load a texture for OpenGL ES on Android, then you will see quite a few people complaining how the supplied helper functions do not work. You will also find some fixes that work partially, but may not allow you to properly use the alpha channel.

The problem is that you need to load a bitmap resource into a Bitmap, and then load that Bitmap into a texture. We should be able to write a function like the following to load a Bitmap into a texture:

public int loadTextureFromBitmap(GL10 gl, Bitmap bitmap){	int[] textures = new int[1];	gl.glGenTextures(1, textures, 0);	gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);	gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);	gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);	GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);	return textures[0];}

Unfortunately, the helper function GLUtils.texImage2D only works through the emulator and fails on several devices. To solve the problem, we will need to load the Bitmap information into a ByteBuffer and use the standard GL10.glTexImage2d function to load the texture.

Some solutions out there do some bit manipulation to build the buffer for the image, but for some reason either the alpha channel in PNGs fails to load properly or the colors come out wrong. I found that using the supplied Color class functions red, green, blue, and alpha seems to work on everything I've tested it on.

Here is the complete solution:

public int loadTextureFromBitmap(GL10 gl, Bitmap bitmap){	int[] textures = new int[1];	gl.glGenTextures(1, textures, 0);	gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);	gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);	gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);	ByteBuffer imageBuffer = ByteBuffer.allocateDirect(bitmap.getHeight() * bitmap.getWidth() * 4);	imageBuffer.order(ByteOrder.nativeOrder());	byte buffer[] = new byte[4];	for(int i = 0; i < bitmap.getHeight(); i++)	{		for(int j = 0; j < bitmap.getWidth(); j++)		{			int color = bitmap.getPixel(j, i);			buffer[0] = (byte)Color.red(color);			buffer[1] = (byte)Color.green(color);			buffer[2] = (byte)Color.blue(color);			buffer[3] = (byte)Color.alpha(color);			imageBuffer.put(buffer);		}	}	imageBuffer.position(0);	gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmap.getWidth(), bitmap.getHeight(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, imageBuffer);	return textures[0];}

Next time I will cover how to write a blit routine, and also how to battle with performance problems on Android OpenGL ES.

## Android Development - How to draw a 2d triangle

When it comes to game development on a new platform, the first step is to draw something on the screen. Since I am mainly doing 2d in 3d development, I will show you how to set up a 2d drawing area and display a triangle on the screen.

The first thing that needs to be done is to implement all of the necessary classes to use OpenGL ES. For a basic OpenGL ES application on Android, you will need to start with three classes. These classes are the Activity, View, and Renderer. I have provided a skeleton using classes with the names GameActivity, GameView, and GameRenderer:

GameActivity.java
package com.example.AndroidDev;import android.app.Activity;import android.os.Bundle;public class GameActivity extends Activity {    private GameView gameView;	    @Override    protected void onPause()    {        super.onPause();        gameView.onPause();    }        @Override    protected void onResume()    {        super.onResume();        gameView.onResume();    }    	    @Override    public void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        gameView = new GameView(this);        setContentView(gameView);    }	}

GameView.java
package com.example.AndroidDev;import android.content.Context;import android.opengl.GLSurfaceView;public class GameView extends GLSurfaceView {    private GameRenderer renderer;	    public GameView(Context context)    {        super(context);        renderer = new GameRenderer();        setRenderer(renderer);        setFocusable(true);		    }}

GameRenderer.java
package com.example.AndroidDev;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView;public class GameRenderer implements GLSurfaceView.Renderer {    @Override    public void onSurfaceCreated(GL10 gl, EGLConfig config)     {    }     @Override    public void onSurfaceChanged(GL10 gl, int w, int h)     {        gl.glViewport(0, 0, w, h);    }     @Override    public void onDrawFrame(GL10 gl)     {        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);    }}

These base classes will handle everything necessary to run your Android application smoothly. When the user switches from your application, it will be paused until the user switches back to it.

The game will only be played in portrait mode so we will need to add two things to force the phone to stay in portrait mode. Your android project should have an AndroidManifest.xml file. Open this up and edit the xml. You will want to add the following line as an attribute to your activity element:

android:screenOrientation="portrait"

This will ensure that the application stays in portrait mode. Though, if the application starts in landscape mode, we should make sure that it is switched to portrait. Add the following line of code to the onCreate function in the GameActivity class:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

At this point, you should be able to run the application in the emulator with the following result:

Since we are doing 2d in 3d, we will need to set up an orthogonal projection. Not all androids have the same resolution screen, but most of them use 320x480. We will go ahead and use those dimensions for our screen coordinates. Here are the two functions that will enable and disable 2d drawing mode:

private void enable2d(GL10 gl){    gl.glMatrixMode(GL10.GL_PROJECTION);    gl.glPushMatrix();    gl.glLoadIdentity();    gl.glOrthof(0.0f, 320.0f, 480.0f, 0.0f, -1.0f, 1.0f);    gl.glMatrixMode(GL10.GL_MODELVIEW);    gl.glPushMatrix();    gl.glLoadIdentity();		}	private void disable2d(GL10 gl){    gl.glMatrixMode(GL10.GL_PROJECTION);    gl.glPopMatrix();       gl.glMatrixMode(GL10.GL_MODELVIEW);    gl.glPopMatrix();			}

These can be placed in the GameRenderer class.

The next function we will create will be a function to draw a triangle. This function will only draw a single triangle using the coordinates that you pass it. Obviously, you wouldn't want to use this function to draw a large number triangles.

private void drawTriangle(GL10 gl, float x1, float y1, float x2, float y2, float x3, float y3, float red, float green, float blue){    int numberVertices = 3;    int coordinatesPerVertex = 3;    int numberIndices = 3;    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);    // Create Vertex Buffer    ByteBuffer vBuffer = ByteBuffer.allocateDirect(numberVertices * coordinatesPerVertex * 4);    vBuffer.order(ByteOrder.nativeOrder());    FloatBuffer vertexBuffer = vBuffer.asFloatBuffer();    // Create Index Buffer    ByteBuffer iBuffer = ByteBuffer.allocateDirect(numberIndices * 2);    iBuffer.order(ByteOrder.nativeOrder());    ShortBuffer indexBuffer = iBuffer.asShortBuffer();    // Specify the vertices of the triangle    float[] coords = {        x1, y1, 0.0f, // (x1, y1, z1)        x2, y2, 0.0f, // (x2, y2, z2)        x3, y3, 0.0f // (x3, y3, z3)    };    // Specify the order the triangle is to be drawn in    short[] indices = {0, 1, 2};    // Place vertices and indices in the buffers    vertexBuffer.put(coords);    indexBuffer.put(indices);    // Set the buffer position back to zero    vertexBuffer.position(0);    indexBuffer.position(0);    gl.glColor4f(red, green, blue, 1.0f);    gl.glVertexPointer(coordinatesPerVertex, GL10.GL_FLOAT, 0, vertexBuffer);    gl.glDrawElements(GL10.GL_TRIANGLES, numberIndices, GL10.GL_UNSIGNED_SHORT, indexBuffer);    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}

I have added comments so you can better understand what is being done in the function. OpenGL ES does not have the begin and end functions found in OpenGL. Instead, you must create vertex and index buffers to draw objects.

To people who may be used to rendering things in a game loop, it may not be apparent what you need to do to draw things each frame. The onDrawFrame function in the GameRenderer class is called automatically for you in a separate thread. This is where you place all of your rendering code. Using the code that we have now, I decided to render a Triforce. Here is the code and the result:

@Overridepublic void onDrawFrame(GL10 gl) {    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);    enable2d(gl);    drawTriangle(gl, 160.0f, 100.0f, 110.0f, 200.0f, 210.0f, 200.0f, 1.0f, 1.0f, 0.0f);    drawTriangle(gl, 110.0f, 200.0f, 60.0f, 300.0f, 160.0f, 300.0f, 1.0f, 1.0f, 0.0f);    drawTriangle(gl, 210.0f, 200.0f, 160.0f, 300.0f, 260.0f, 300.0f, 1.0f, 1.0f, 0.0f);    disable2d(gl);}

Here is the final result:

Next time I will show you how to load textures and create a blit function. This is actually a fairly easy thing to do. Unfortunately, some android phones will not load the textures correctly using helper functions. That means you have to write all the conversion code yourself.

## Android Development

I am currently working on a game for my Android phone. It uses OpenGL ES for rendering. I have noticed that many people have difficulty getting things running on their Android. I have certainly run into some problems here and there myself.

I will be writing a couple articles focused on using OpenGL ES on the Android. This should allow people to get up and running with their games much quicker.

The game I am writing is mainly going to be a 2d in 3d puzzle game. I may make use of 3d cubes for the game board just for a smoother visual appearance.

I won't be detailing how to set up the development environment. Google has plenty of good documentation on how to do this already.

## Basic Commands Implemented

I have implemented the basic commands that are listed on the wiki along with some others used for testing. So far, the server is coming along nicely. Rooms can be created and described and connected. Players can enter the world, move between rooms, and chat with each other. There is no persistence right now, because I feel it is best to implement the core features of the game before moving on to saving and loading the game state.

After I add items and creatures, I will need to begin thinking about how to add persistence to the game. I intend on leaving the server up besides bringing it down for maintenance. At that point, all of the game data will need to be written to disk to be loaded when the server starts up again. For that, I think it would be fine just to write the data out to an xml file or perhaps something lighter. The same method could be used to store daily backups. Obviously, there are issues with relying on such a system alone, but it would probably work out until I decide on a more robust solution.

## A New Direction

Well, I have decided to create my own MUD to give me something interesting to do away from work. I intend to make this a free-to-play online game. For now, it will be developed as a text-based MUD, but I may fork the project in the future to provide a graphical representation of the gameplay.

At this point, I have implemented a basic telnet server. Users can join the game and input some basic commands. I have chose to implement the game in C++, and I do my development on a Linux-based system. I currently have a test server that I can bring up so people can test out what I have so far, but there isn't much in the way of a game at this point.

My intention for this game is to create something a little different from what most people might be used to. Instead of just having some sort of avatar that a person levels up and plays with, I intend to give them power over other creatures. The greatest heroes will have followers and the greatest villains will have minions. I want players to be able to amass armies through enslavement or enlistment. This way, players can create their own conflicts, and resolve them by defeating their enemies.

It won't be forced of course. Players will still be able to just focus on their own character and be an adventurer if that is what they want. I just want players to be able to elevate themselves to the role of a king or a dungeon master.

I will be doing the design and development from a website. I'd like to keep people informed about the project in hopes that people might want to assist in helping with the design and development. Here is a link to the website:

Reign of Tyrants MUD (Multi User Dungeon)

There isn't much there now, but I intend on filling the Wiki out quite a bit.

## Things are looking brighter

Playpile now has hundreds of games referenced, and I'm working hard to import listings from several other websites too. I have begun marketing the website towards my intended users, and I have gotten some positive feedback from it so far. Over the last few days, unique visitors to the site have increased by an average of 40% each day. There are now hundreds of people coming to the website each day.

I've contacted a couple large websites about importing listings for all of their games. Hopefully, by the end of the month I should have thousands of games listed and thousands of visitors each day.

## Automation

Well, I have begun moving towards automated game importing from various sites with Playpile. I've generalized it enough that I only need to write a small amount of code to parse whatever kind of file they use to represent the data on their games.

It won't be too hard to add a couple thousand games at this point. I think I may distinguish between games that are added in an automated way versus manually. I should probably keep games added automatically separate from ones added manually, because I doubt game sites would like it if their content is used to promote games at other sites. This is just until I can integrate those games into the main listing and ditch the description and image supplied by the game site.

## A Plethora of Games

Well, developer submitted links have tapered off in the last week or so. This is a good indication that relying on submitted links is not feasible. It seems I'm going to have to knock it up a notch.

Unfortunately, knocking it up a notch kind of puts me in some legal gray areas of what is considered 'free use'. Google has won some judgments regarding copyright infringements on storing and displaying cached data of websites. This makes me a bit more comfortable with what I'm going to do.

I will be importing data from quite a few large games sites into my search engine's database. What is cool is that I can automate much of it. In fact, game links will be added to the service automatically when those sites release new games. This will increase the value of my site considerably.

I think it's worth the risk. Hopefully, I can create something that will benefit the GameDev community, and it will be visible enough for them to support.

Who would support a free game search orientated towards providing an open and level playing field when it comes to displaying links to playable games? Who, in their right mind, would support anyone willing to dedicate their time and money promoting their fellow developer's games? Who would actually support small, usable tools on the Internet that aren't bloated with unnecessary features and advertisements?

These are the questions I ask myself when I think about a recent occurrence. I contacted a developer I found on the Internet regarding the games at their website. I explained that I was looking for links to games, and I let them know that they could submit to my website. I also told them that I would appreciate it if they were to link to me on their website, but it wasn't necessary to do so.

Well, they submitted their games, and they also responded to my email. They told me that they would link to my site, but I would have to pay them to do it. It really didn't bother me that those were their requirements. They didn't want to link to my site, but they would capitalize on the situation and do it if I were to pay for the link. Obviously, I'm not going to pay for the link, but it did make me think about some things.

Currently, I will be spending a couple hundred dollars a year and countless hours of my time maintaining Playpile. I would hope that the site would be useful to some people, but I'm not sure if that could be possible if fellow developers do not support the philosophies behind creating the site. Developers are the lifeblood of the website, and if they don't support it then it will just die. No links to the site, and no submissions means it won't go anywhere.

I've spent some time during the last two days working on Quadroids. I decided to restructure some of the code to make it easier to implement three different modes of play. Those modes include a single player game, a multiplayer game as a client, and a multiplayer game as a server.

I have also added flying saucers to the game. They move across the screen in a random pattern either shooting at asteroids or the player. There are large and small saucers, and each targets the player with a different probability.

The current iteration of the game is close to what the single player game will be like. I still need to tweak the timing of various things though. I also need to add in either a shield or hyperspace. I'll probably do hyperspace since it is random and more likely to piss players off. It might save you, and it might not.

Anyway, here is the current progress. Go ahead and try it out and give me some feedback.

I spent some time today working on Quadroids. I have a majority of the base gameplay implemented now. There are now explosions, and players will be destroyed if they collide with the asteroids. I'm using polygon to polygon collision, so collisions should be exact.

I think I might start working towards implementing the multiplayer aspects of the game now. I'll just try to get the thing working so multiple players can connect to a server and play.

I've uploaded my current progress. Try it out and give me some feedback.

I've had various people use Playpile, and I have made a note of various comments they made while using it. One of the most common first questions I get is, "What do I do?" An individual at the #nethack IRC channel on Freenode mentioned that it would be nice to have a simple way to browse through all of the games. Sure, you can do this through the Advanced Search feature, but how many people make use of that when it comes to search engines?

I have decided to list links to genres on the homepage of Playpile. This way, people who come to the site can merely click on one of the links to pull up search results on that genre of games.

Fortunately, my design allowed me to easily add the links in a way that merely does a search based on genre. The preferences that the user might have set affect the genres listing just as it would a search. It all ties in very nicely.

Also, since I order listings by date added when the search results indicate they are equivalent in relevancy, all the games listed by genre are ordered by the date added. So, users always see the newest games listed first.

Screenshot:

Well, this is the second day I have spent working on Quadroids. I now have the asteroids implemented, and the game is playable to a certain extent. You can move the ship around, shoot asteroids, and those asteroids will break apart into smaller asteroids.

For the collisions I use a basic distance calculation between the bullet and the center of the asteroid. If the bullet is within that distance, then I do a point-in-polygon collision test. Pretty simple stuff.

The asteroid shapes are randomly generated at the beginning of the level. There are 20 different shapes for each game, and they are randomly selected for each asteroid.

It would probably take me another day or so to finish a single player asteroids clone. I will likely do that, and then move towards implementing the multiplayer modes. Players will be able to start a game as a server, supply an ip address to connect to as a client, or have a game matched for them.

I have uploaded my current progress. It requires Windows to run. Go ahead and try it out and let me know if there are any issues at this point.

Screenshot:

## Just worked on the site today

There were a few minor issues with the website. One was a bug in file uploads, and the other dealt with style issues. Both issues have been fixed though.

I seem to be averaging about 50 unique visits per day at Playpile. I figure that isn't too bad considering I haven't even invested much time in marketing it. The only thing I have done so far is post to developer forums. For Playpile to be successful, it will need plenty of games, and that is what I'm focusing on.

I'm getting an acceptable amount of submissions right now. I could certainly do more though. I'll just have to work on informing developers about the website. I do have a couple strategies in mind. I've read various books on advertising, and there are actually quite a few things that can be done.

I've been getting some questions about the website here and there. People tend to want to know why I even made the website. People tell me there are other sites out there that list games and they already have more features than I do.

Sure, there are other game searches out there, but most of them are no different than a general web search. I suppose they restrict their listings to only websites that have something to do with games. Though, a majority of it tends to be informational. When I think of a game search, I think of a tool that is going to give me links to games that I can play. When you add in reviews, cheats, faqs, informational pages, articles, and all of that other junk, then you are left with something that produces results similar to a regular search engine. Search results turn into a mess that you have to wade through.

It would be nice to have a simple tool that allows people to look for games to play. I focus totally on the game itself, because that is what is most important. I'm sure some people would wonder why I would not make a distinction between free and purchasable games. Well, doing such a thing would cause a person to overlook games they might be willing to buy or overlook games that are free that they would like to play. Anyway, it would be a hassle to keep track of.

## First day done on Quadroids

Well, I have had a productive first day with Quadroids. I have a ship that moves around the game area and fires projectiles. Tomorrow, I will likely have the asteroids fully implemented.

I have made sure that everything moves at the same speed independent of the framerate and that all the objects could have their information sent to a server to be reproduced there.

As for sending messages, I will likely send them at fixed time intervals for player movement. As for many of the other objects in the game, the only thing that is really important is when they were created since no data really changes for them beyond their position which is very predictable. The server will be the one that decides whether or not something was hit.

As for finding games, people will be able to serve public or private games, and users will be able to directly connect to a server or use a matching service. If there are players waiting for a server and no servers are available, then I may have the program try to initialize itself as a server for other clients.

Here is a screenshot of the current progress:

## It's a waiting game

Well, it seems it is taking Google a century and a half to get around to crawling Playpile. The last time I submitted a site to Google, it only took about a day. This time, it is a week. There is something different about this time though. It seems they scanned a temporary page left by the provider nearly a month ago. Their bot hasn't come back since then, even after I verified my site through the webmaster tools, and I submitted the site. I guess I can only wait though.

In other news, I have decided to spend a week creating a game. This game will be named Quadroids. It will be a multiplayer asteroids game, and it will actually have asteroids in the game! I was initially thinking about making it 4 players, but I might bump that up to 16 players. I would likely call the game Hexroids if I did that.

I don't want people to have to find other people with the game to play it, so I will be making a simple matching service for the game. I have figured out how I can use a simple PHP page to do the matching. I'll probably document the interesting parts of the implementation and cover them in this journal.

## Playpile Game Search Engine

I would like to take some time to talk about the game search engine that I have been developing. The name of the game search engine is Playpile. The reason why I developed Playpile is to provide a tool that allows people to easily search for fun and interesting games to play on the Internet. One of the guidelines that I developed on is that every link should either contain a game that can be played or a game that can be downloaded and played.

Currently, there are only a hundred or so games referenced by the website, but I hope to increase that number as people begin to submit links to games. The service is free, and it doesn't require any kind of account to use.

One of my greatest emphasis on creating the site was to provide a simple interface that is easy to navigate. I felt it was best to provide an interface similar to other search engines on the web. This way, when people go to the website, they will instantly know how to use it.

Currently, I am working on some backend tools that are necessary to manage submissions on the website. They will be some nice AJAX-based tools. I will need to make it easy to administer so I can recruit some administrators for the site later if the thing ever takes off.

If anyone has any links to games they would like to submit, then feel free to do so.