Sunday, November 23, 2008

An Interesting Survey

Recently, a guy posted in the GameDev forums about a survey he was undertaking. He recently posted his results, you can view them here

The findings are very interesting and I highly recommend having a look, some of the results are quite surprising. The survey covered 7 key forum types and, while is by no means a complete demographic of everyone (2 different sections are to do with game content creation and they are all video game related), this is pretty much the target audience of any game that I will make in the next 5 years, so it is highly relevant for me. The survey recived a fairly impressive 1540 responses.

There are a couple of things which are particularly intriguing. Firstly, I am pleased to announce that RTS's are still near the top in popularity (unsurprisingly FPS is the no. 1, especially considering one of the forums is a HL2 one!)

Another result was that most people, unless they play for more than 24hrs, don't play more than for 12. Whether this is because games fail to hold their attention or because that after about 12 hours something else comes along is not clear. Should, as a developer, I use this as a guideline for how long the main portion of my game take to complete, or should I use this as a target? Ie. does it need to be about 12 hours or at least 12 hours.

Another key area of the survey is the "Key Aspects" which is what people want from a game. Unsuprisingly, looking at the list of forums, gameplay is at the top. However, people will inevitably put this, because when you are not playing a game, it is clear that this is what SHOULD matter. I found what came second and third to be more insightful. High up is depth and story. The thing that I personally find imporant, game customisation, was not voted that important. Given the forums, I find this suprising. The story is something I hadn't really considered, as I find that the best stories are player created. Whether people who voted story meant a system that would allow the player to experience their story I don't know, but the implication is not.

As for depth, I think this means things like back story continuity and things to do hours in to the game that you have only just found out about. Depth is somewhat of a buzz word, but ceartinaly something worth considering, as it came so high.

The survey did ask what price would people be prepared to pay for a decent game. The implied meaning of decent is one in which there is reliable evidence that the game will be good and to their taste. A question I would like to see answered is how much would people be prepared to pay for a game which has a less proven record. Not that people said it is bad, as no one wants to pay for something rubbish, but as an Indie developer, what would people be prepared to pay for a game which looks potentially good, but is very much a gamble.

See the results in full
LinkLink

Sunday, November 16, 2008

A user created content centerd MMORPG

After reading this post on Gamedev.net forums, a seed of an MMORPG (Massively Multiplayer Online Role Playing Game) was planted in my head. No, it is not a clone of World of Warcraft or any other current MMOG. The closest thing I can think of is Second Life, however, it is very much a game (as opposed to Second Life, where the game aspect is somewhat lacking)

All users would be able to create both rooms and items. Rooms would be a 2D world for players to explore. Anyone who wanted to create a room would use a simple script editor and an image editor to create any world they wanted. Obviously, to keep maintenance down, rooms would be hosted remotely by anyone who wanted one. The central game would not be responsible for the rooms content. Connecting to a room would be as simple as find the rooms unique RP Address (spoof on IP) These rooms could be big or small.

Users would also be able to create items. Once again, this would be made with a script editor and a image program. People could make these items do anything within the bounds of the game (and here is where it gets complicated) I thought about this game and concluded that to create items, the user must do something that requires time. Let me explain how I can see the item creator being used.

What I really wanted to happen is someone use the game in an imaginative way (which could happen, have you seen what people have done with Forge?). They make an item which really pushes the boundaries of what can be archived. Then, they place it in their room. If the user was allowed to create them without any limit, however, the item would become worthless really quickly. If, on the other hand, the user had to spend time completing something every time he wanted to make the item - think of the emergent game possibilities.

Rare items could become mere legend. Someone developed a way of doing something really cool (and this is where I am stuck - I can't work out what these things could be) but only made one. He placed it deep within his room, puzzles must be solved, mazes explored and maybe even enemies defeated. Then, he would make maybe one more, show it to people, show what it could do, and give them the RP. Everything is finite, so once someone has taken it, someone has taken it. Obviously, there are logistical issues with this - what if someone took the item and left the game. But there are solutions to these problems. But it would be like an ever evolving adventure.

I have long dreamed of playing a game where you are finding stuff out and doing genuine research to get something. I got a real buzz when reading Harry Potter (laugh if you want!) and researching forgotten branches of magic.

The problem that faces me is: what kind of things can you create. It is easy to say: "Let the user create what he wants". But there needs to be something to create. The only way I can see this working is through two layers. The network layer would be kept completely separate and no one would have access to it. However, the game play layer would be available to anyone. One would have to write a comprehensive top down RPG in it's own right. Everything would have to be soft coded (Using a variable instead of a number, eg, user moves a "speed" where speed can equal 10 as opposed to user moves at speed 10) Everything would have to be structured in a logical way in which most of the rules of the game were compeltly emergent (an outcome of building a base set of rules, for example, with a full physics engine, the behaviour of the objects is emergent, they weren't told to do specific things, just react to a set of rules)

What needs to be done is work out different things that could be made by the user. None the less, I think their is potential in the idea, ask me again Jan 2010.

Wednesday, November 5, 2008

Boids in 3D

I did it. I have completed my Boids motion flash project. The boids now stay on screen pretty much, do not accelerate to stupid rates and all 3 laws do work as expected.

I also managed to implement a depth motion as well. Although it is not perfect - boids are not rendered according to their depth (ie. boids can appear in front of boids they are actually behind) However, to fix this, I would have to re-draw every boid every frame, assigning them new MC (movie clip) names using the createMovieClip() function. However, everyone I asked said it was barley noticable.

You can view the finished result here
I also converted it in to a Windows32 screensaver, which you can download here.

I created the screensaver using InstantStorm. Botworks does not take responsibility for any damage caused by downloading the screen saver - it worked on my computer!

Thursday, October 23, 2008

Frozen Kangaroo: Quick Summary

In the coming months - as I will be busy - actual programming of Frozen Kangaroo will remain slow and mainly prototypes. I will be spending the time refining the finer points of the design - such as how you win, a hazy issue at the moment and something which I have glossed over. I want to be able to use this blog as a place where I can place my thoughts, in the hope that someone, somewhere, when they play the game, and understands why I made such a decision.

However, to do this, I must explain, to a point, what this game is about so that my posts make some sense.

OK, let's start with the basics. Frozen Kangaroo is the code name for the Real Time Strategy game I am making for the PC. It is set in the near future, allowing me to include cool futuristic units and technologies. However, as history repeats itself, it will be an alternative history (what could have happened) of the Cold War(1945-1990). You will take control of either America or the USSR in a modified map of the northern hemisphere.

Although technically you will only be controlling either America or USSR, with them you can manipulate without restriction (nearly) all of their allies. This allows the game to represent a Cold War through the use of Proxy nations. This was seen in the real Cold War in Vietnam. Although it was technically America vs. the Vietcong, Russia were supplying weapons and support to the Vietcong.

The game's pace will take it's lead from Sin's of a Solar Empire. Although everything will be happening in real time (to create a sense of pressure that must surely have been felt in the more tense times during the Cold War), it will be slow enough that it is not like modern RTS's such as Dawn of War where the quickest clicker will win. Also borrowing from Sins (although entirely accidentally, I had not played the game until long after I started designing the game) you will be able to zoom in to the individual provinces which the map is divided in to and out to see the whole world.

One of the key features of the game is to really invoke a feeling of immersion. Surely, all games do this? Well yes, to a degree, but, what I mean is you will be able see your deployable missiles moving about in real time, passing from province to province. You can use trucks to transport your men around. I am also toying with the idea of some resources that need to be transported to the front line, maybe even munitions, but this will depend of how complicated the game becomes.

That really is just a brief (ed: disjointed and confusing) summary and there are loads of mechanics that I will need to explain. However, I hope that offers a taster of what FK is. Stay tuned for more updates.

Friday, September 26, 2008

Animation in Blender

Blended is an Open Source (ie. free!) 3D program. You can download it here. I have always found it quite confusing, not least because it is 3D. However, I worked out how to do frame by frame animation. This is my result:

video
It isn't very impressive and, to make the video, I had to use Windows Movie Maker, but I am quite pleased with the result. I have done other animations using the particle effects, which are always quite cool, but this is my first proper animation.

For those who had the same problem as me, to insert key frames, you select your object, click on the object menu at the bottom and press Insert Keyframe. Then, select the type of thing you want to check, loc (location) rot (rotation) and Scale. Then, move your object. Then, go to the next frame, with the arrow keys, move your object and once again insert a ket frame. Repeat, bake for a few minutes (Nerdy joke, baking appears to be what you do to render the animation!) and there you have it.

Thursday, September 25, 2008

Boids Motion

Warning the post contains programming!

Ok, so the other day I stumbled across this website and decided to implement a basic boid flock in Flash. For those who don't know, Boid Flocking is a mathmatical way (ie. no random) way of moving a number (more than 3) objects that represents a flock. In this example, they move in 2D space, but it could easily to be expanded to 3D (or indeed simplified to 1D...). This theory was developed by Craig Reynolds. After creating a basic model, I created a simple game which I submitted to Newgrounds. From a game designers point of view, and clearly the reviews point of view, it is horrible, however, I built it mainly for demonstration purposes of boid stuff.

Boids run on 3 main rules. The first, and most important rule, is that they head towards the average mass of the boids.

_root.toalPosX = 0;
_root.toalPosY = 0;
for(i = 1; i<11;>
{
var numx:Number = _root["boid"+i+"_mc"]._x;
toalPosX = toalPosX + numx;
var numy:Number = _root["boid"+i+"_mc"]._y;
toalPosY = toalPosY + numy;
}
var averagePosX:Number = _root.toalPosX/10;
_root.averagePosY = _root.toalPosY/10;

This only works with 11 Boids, and I would like to, at some point, change to that to a foreach statement, however, as I have mainly been using C# recently, and I wasn't sure how you did it in Flash. So, as you can see, it defines two variables, one for X and one for Y (That is another thing you will miss going in to Flash from C#, things like Vector2s) Then, by cycling through each boid, and adding their x and y's to their respective variables, I was able to deduce the average location. This is placed within onEnterFrame, so the center of mass is always moving.

The thing that I think I did wrong was with how their velocities are handeled. As you can see from the NG movie, they tend to shoot off and the second their mass moves in one direction, it keeps moving, much like if you are swinging a bucket of water, the second the mass goes past the mid point you will suddenly lurch in that direction.

However, I actually added a 4th rule (I will come back to the other 2) that means the mass moves towards the red dot in the game (normally I would have it roughtly tracking the mouse) However, it keeps shooting past at increasing velocity.

for(i = 1; i<11;>
{
if(_root["boid"+i+"_mc"]._x <>
{
_root["bVolX"+i]+=1;
}
else if(_root["boid"+i+"_mc"]._x >averagePosX)
{
_root["bVolX"+i]-=1;
}

if(_root["boid"+i+"_mc"]._y <>
{
_root["bVolY"+i]+=1;
}
else if(_root["boid"+i+"_mc"]._y >averagePosY)
{
_root["bVolY"+i]-=1;
}

}

As you can see the numbers just keep getting bigger. I am trying to think of a way to stop them growing so huge, I am sure there must be something I missed in the implementation, because they are meant to basically stay within the bounds of the screen.

Anyway, back to my implentation. The next rule, which deffenitley has a noticable effect is a little bit of repulsion. I used twin for loops to check boid i against boid j where i != j. When I first did this, for reasons best known only to me, I put the signs as the same, so although they were repelling, they were both going the same way, so they just got a little bit faster. Better now.

for(i = 1; i <11; j =" 1;" distancex =" _root[" distancey =" _root["> -150)
{
_root["bVolX"+i] -= 1;
_root["bVolX"+j] += 1;
}
else if (distanceX > 0 && distanceX <> -150)
{
_root["bVolY"+i] -= 1;
_root["bVolY"+j] += 1;
}
else if (distanceY > 0 && distanceY <>

Fairly self explanatory. The effect looks a little bit like opposite magnets. One thing to note is this does not prohibit collisions, if they are travelling fast enough this will merely slow them down. What I would be interested in seeing done is where the two boids involved in the collision spin off in a random direction. To do this, I would hitTest within these for loops. What might make more sense if if you times the bVolX by -0.8 to flip it, and bVolY to add a bit of variation so it doesn't go straight back, by -1.2. Then the other boid would be times by these two values switched for X and Y. Maybe I will try this, points to anyone who beats me.

The final rule, and probably the least important, is a speed checker. Boids will try to mimick other Boids average speed. If most boids are going faster, it will speed up and vice versa. The idea behind this is they should meet somewhere in the middle and not go to fast. Well, thats the idea anyway.

I did this simply by checking the boids velocity against the average velocity and adding or subtracting depending on this.

avgVelX =0 ;
totVelX = 0
for(i = 1; i<11;>
{
totVelX += _root["bVolX"+i]
}
avgVelX = totVelX/10;
for(i = 1; i<11;>
{
if(avgVelX >= 0)
{
if(_root["bVolX"+i] <>
{
bVolX += 2;
}
else if (_root["bVolX"+i] > avgVelX)
{
bVolX -= 2;
}
} else
{
if(_root["bVolX"+i] <>
{
bVolX -= 2;
}
else if (_root["bVolX"+i] > avgVelX)
{
bVolX += 2;
}
}
}

avgVelY =0 ;
totVelY = 0
for(i = 1; i<11;>
{
totVelY += _root["bVolY"+i]
}
avgVelY = totVelY/10;
for(i = 1; i<11;>
{
if(avgVelY >= 0)
{
if(_root["bVolY"+i] <>
{
bVolX += 2;
}
else if (_root["bVolY"+i] > avgVelY)
{
bVolY -= 2;
}
} else
{
if(_root["bVolY"+i] <>
{
bVolY -= 2;
}
else if (_root["bVolY"+i] > avgVelY)
{
bVolY += 2;
}
}
}

The only thing missing is the red dot you control in the game. I was trying to make something that followed the mouse, except just a bit slower, but ended up with a Boid you controlled. It works exactly the same as all the other boids, except the centre of mass is always the mouse and it does not copy speed, nor is it repelled by other boids.

I hope this has helped anyone trying to implement a Boid thing. It is a really nice programming challenge, trying to interpret the rules in to your programming lanaguage. The website I listed at the top was a great resource. Any questions, please leave a comment or email me @ thekileyenator@gmail.com

Thanks for reading!

Tuesday, September 23, 2008

Welcome to BotWorks

Bot Works is a game development studio set up by Thomas Kiley. On this blog you will find, not only the latest news for any Bot game, but also both coding and designing topics related to games.

At the moment, we are working on a title which goes by the code name "Frozen Kangaroo" and I am hoping to release it Chirstmas 2010. I will have more details about it soon.

I would also recommend you read my gaming blog for regular updates about the video game industry @ www.veterangamer.co.uk
Publish Post