Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

About this blog

I forgot

Entries in this blog


Zombie Driver Metacritic Rating

I was looking at the indie games on steam. Found Zombie Driver, I looked at the metacritic score which is 59, this is because some jerk gave it 0, that seems unbelievable since the rest were at least in the 70's. That seems beyond reasonable, and makes me pretty furious! :evil:

That is beyond resonable, there is no way anyone should be allowed to give a game such a low score and be considered a "metacritic" rater.

Zombie Driver Meta Critic Rating




I am working with xml data.

1)Save all data or just data that is not default?
Saving all data has the benefit of not requiring conversions (for example if the defaults ever changed) but at the cost of space

2) Write object desc def or just write all the data in the object desc
Saving all the data in the object desc creates a lot of waste (duplicative data), but it means that there is less synchronization if the object data ever changes.

For example:





I was trying to get my online highscore working. Couldnt get my access my code through netfirms (I enabled remote connections but it still wouldnt work-- fork that). Still cant get netfirms to read or write from remote databases

Finally found www.freesql.org which allows you access the databases remotely.

Code below




Unity Prototype 1 day

Car project using temporary art. This is my favorite project and it only took one day to prototype it and its already somewhat fun.
Car Project



The Inanity

You can see what inanity I have been up to
The Inane Cast
The non comic



The importance of planning

I have come an conclusion, if you are making game than you are going to need a set of tools, and an engine (its going to make your life a heck of a lot easier). Using a pre-existing game engine will save you alot of time and hassle but might cost you later if you hit its limitations. At the beginning project, everyone in the group will be really excited (but this excitement only lasts a short time) if you squander this time working on the engine (some optimization, or file loading) rather than the game you will find that the rest of the team will lose interest and you will a series of lulls in production. That is why I advise you to already have your engine finished before starting your project (or using a preexisting engine).

A design document is actually very important, as it will allow to ensure that the game has enough gameplay to warrant the project, it is also helpful to convey to the rest of your team a clear and coherent vision of what you are trying to achieve. Without a design document you are going to be lost.

At the beginning of a project you need to be able to prototype your idea to see if it should be scrapped or continued (the quicker you can do this the better off you are). It is imperative to ensure that your team members that you explain that you are in the prototyping phase. For example you should have your modelers create a low poly version of your assets, so that you can get a feel for how it should look but ensure that they are not spending massive amounts of time (otherwise they will not be too happy to spend 3 weeks on something only to scrap it).

Finally you are going to need deadlines, this might seem like a bad idea (especially when the project members are doing in there free time and not getting paid) but its essential or you will soon find yourself drowning in a pool of inaction.



Source code of Larva Mortus

The good people at Rake in The grass have released source code for there game Lava Mortus I thought it was worth a note.

Source code of Larva Mortus




Some concept sketches

Big Pork
The Scott

"Squeeze that heimer until it pops like a balloonaphor feasting on the lifechops of his own demise"



return 0

Got the first released game done, which was Tic Tac Toe 3d

Working on a game called "Prime Time" think of the runnning man/smash tv. Check out the progress

Youtube Annotations:
I am using youtube to post progress videos, adding there annotations to the "Prime Time" videos to t make them more interactive. Not much interest at this stage but we will see how it goes...

Also working on a game called Life on The Line: first arena based person shooter. The project seems to have reached the tipping point between death and life, how ironic the projects "life is now on the line"




Alright back in action.

Got the first released game done, which was TicTacToe3d.


Working on a smash tv type game you check out the progress on yotube.

Using youtube to post progress videos, adding Annotations to make it more interactive. Not much interest at this stage but we will see how it goes, as experiment.



Red Storm first look

Sea storm studios are working on our second game: "Red Storm", third if you count Life on the Line (now on hold), a top down shooter.

The first version is to be called "Infinite Mode" in which you have to survive as long as possible and rank enough the highest score.

Norton is a top office in ROOK, hates commies with a bitter passion. You can think of him like Captain America (or the comedian from watchman), except he doesn't follow any altruistic code, the ends justify the means, always. If he has the enemy by the the throat, he will snap it, if a terrorist takes a hostage he will shoot right through the hostage to get to the terrorist.

Firt version

Second version

The heads of State of the Kings Cross are almost totally corrupt, under the influence of the Shadow Council. Save for a small band of nationalists who are aware of the subversion and and are sick of it. There answer was to create ROOK, a black op unit that is dedicated to removing the cancer that is infesting society

ROOK Emblem
My version

Jingquans verion:



Red Storm

Sea storm studios are working on our second game: R"ed Storm", third if you count Life on the Line (now on hold).


The sounds effects are custom, we dont have the custom music but it is in progress.




I am working on creating and destroying actors however it seems the odd time ageia just likes to crash.

My Modeler has sent a picture of the machine gun... instead of the actual model.

Edit: What game is complete without a >car gun"! Still mostly stock art

The unreasonable reasonable
Looking for a freelance artist, that can model, animate, texture and do it a reasonable time and god damn it send daily progress reports.



Radar Shader

Finally got my radar working... and I think its even CG complaint



float4 RADAR_ANG;
float4 RADAR_RING1;
float4 RADAR_RING2;

sampler RT : register(s0);

float4 ps_main(float2 iTexCoord : TEXCOORD0): COLOR
float4 color = float4(0,0,0,0);
float2 centre = float2(0.5,0.5);
float2 dir = iTexCoord - centre;
float dist = length(dir);

if(dist {
color = tex2D(RT, iTexCoord);// * float4(0,0,4,1);
float ang = (180 + atan2(dir.y,dir.x) * 57.325);

if(ang> RADAR_ANG.x && ang {

if((dist > RADAR_RING1.x && dist RADAR_RING1.z && dist
> RADAR_RING2.z && dist {
color += RADAR_COLOR;

// color *= float4(0,0,1,0);
color.a = .5;

return color;



Over 9000

Probably you have all heard of the video "over 9000", featuring vegeta from dragon ball z (over 4 million views).
>Over 9000

Oprah gets tricked a poster in the message board (abit crass but pretty funny).
>Oprah Over 9000



Out Of stream

I knew I would have ran out of steam eventually (I blame my as Asthma) but didnt think it would happen so quickly. My artist is busy with school (hopefully in around two weeks progress will resume).

->The musician is finished working on the sound/music (so all that remains to pay).
->I have a physics programmer waiting in the wings.
->I cant bring myself to work with temporary asset, or thats my excuse.
->I went fishing for artists and ended up hiring a writer (don't drink and post).



New Project

I am starting a new demo project called: Queens Rampage.

Bringing up a notch, I hired an artist (3dmodeler/animator) and sound designer.

Ogre3d >> graphics
NxPhysics >> physics
FMOD >> sound
DirectInput/XInput >> Input

->Single player
->Third person shooter
->Massive explosions
->Units will explode into pieces when killed

Character types:
->Pawn, Rook, Bishop, Queen, King, Knight
They will eventually be human looking chess type characters.

The White Queen has discovered that her Husband the White King has been bumping uglies with the Black Queen. This throws the queen into a high rage, a rampage to end all rampages. She orders her royal guard to attack the Black Queens Castle.

This will follow a traditional Mario type scenario. After the White Queen kills the Black Queen she discovers it was the Red queen, the Blue Queen(etc). Each time the magic scenarios will get more complex.



Native Client


1) Download and Install the following [ Unless you dont need to ]

Native client,Python 2.4

2) Setup environment variables
PATH: Add your python directory to the path environment variable. For example: C:\python24
NATIVE_CLIENT: the base directory you installed the native client. For example: C:\NativeClient

3) Python Test: The result should be a picture of the earth
->Open up the command prompt
->exectue the command cd %NATIVE_CLIENT%\nacl\googleclient\native_client\tests\earth
->python run.py

4) Install and use the plug-in
cd %NATIVE_CLIENT%/nacl/googleclient/native_client

Ensure to add the extra arguments... --prebuilt firefox_install, otherwise it wont work!
scons.bat --prebuilt firefox_install

Played around with Googles Native client... allowing you to run x86 C++ code inside the browser. I tried to get to use SDL but didnt manage to, but you can play around with the pixels directly (basing it off the "life sample")

#if defined(HAVE_THREADS)
#if !defined(STANDALONE)
#include "native_client/common/standalone.h"

typedef unsigned int u32;

// global properties used to setup life
const int kMaxWindow = 4096;
const int kMaxFrames = 10000000;
int g_window_width = 512;
int g_window_height = 512;
int g_num_frames = 50000;

// seed for rand_r() - we only call rand_r from main thread.
static unsigned int gSeed = 0xC0DE533D;

// random number helper
// binary rand() returns 0 or 1
inline unsigned char brand() {
return static_cast(rand_r(&gSeed) & 1);

// build a packed color
inline uint32_t MakeRGBA(uint32_t r, uint32_t g, uint32_t b, uint32_t a) {
return (((a) }
struct Color
u32 argb;
Color(u32 r,
u32 g,
u32 b,
u32 a)
argb = MakeRGBA(r,g,b,a);


struct Surface
int w;
int h;
int d;
u32* pixels;

Surface(int tw,
int th)
pixels = new u32[w * h];

for(int i=0; i {
pixels= MakeRGBA(0xff,128,0,0);
virtual ~Surface()
delete [] pixels;

virtual void drawPixel(int tw,
int th,
u32 argb)
pixels[th * w + tw] = argb;


struct Box
int x;
int y;
int w;
int h;
u32 color;
Box(int tx,
int ty,
int tw,
int th,
u32 tc)

void set(int tx,
int ty,
int tw,
int th,
u32 tc)
color = tc;
void render(Surface* surface)
for(int i=0; i {
for(int j=0; j {
int tx = x + j;
int ty = y + i;

surface->drawPixel( tx, ty, color);

struct Canvas
Surface* surface;
char *cell_in_;
char *cell_out_;
Color color;
Box b;
Box b2;
Canvas(Surface* s,
const Color& tc)
surface = s;
color = tc;

cell_in_ = new char[surface->w * surface->h];
cell_out_ = new char[surface->w * surface->h];
for (int i = 0; i w * surface->h; ++i)
cell_in_ = cell_out_ = 0;

b.set(0,0,100,100, MakeRGBA(0xff,0xff,0xff,0xff));
b2.set(150,150,100,100, MakeRGBA(0xff,0,0x0,0xff));
virtual ~Canvas()
virtual void draw()
virtual void update()
for(int i=0; iw * surface->h; ++i)
surface->pixels = MakeRGBA(0xff,128,0,0);

virtual void swapBuffers()
char *temp = cell_in_;
cell_in_ = cell_out_;
cell_out_ = temp;
virtual bool pollEvents()
NaClMultimediaEvent event;
while (0 == nacl_video_poll_event(&event))
if (event.type == NACL_EVENT_QUIT)
return false;
return true;

int main()
//attempt to initalize the thing
int r = nacl_multimedia_init(NACL_SUBSYSTEM_VIDEO | NACL_SUBSYSTEM_EMBED);
if (r == -1 )
printf("Multimedia system failed to initialize! errno: %d\n", errno);

//attempt to initalize the other thing
r = nacl_video_init(NACL_VIDEO_FORMAT_BGRA, g_window_width, g_window_height);
if (-1 == r) {
printf("Video subsystem failed to initialize! errno; %d\n", errno);

//create our surface
Surface *surface = new Surface(g_window_width, g_window_height);
Canvas canvas(surface,Color(1,0,0,0));

for (int i = 0; i {
if (!canvas.pollEvents())


Also wrote a simple bitmap reader but I couldnt get fopen to read the damm files.

#pragma pack(1)
struct RGBColor
char r;
char g;
char b;

struct BitmapHeader
//must always be set to 'BM' to declare that this is a .bmp-file.
short bfType;
//specifies the size of the file in bytes.
int fileSize;
//must always be set to zero.
short bfReserved1;
//must always be set to zero.
short bfReserved2;
//specifies the offset from the beginning of the file to the bitmap data.
int bfOffBits;

struct BitmapInfo
int biSize;
int biWidth;
int biHeight;
short biPlanes;
short biBitCount;

int biCompression;
u32 biSizeImage;
u32 biXPelsPerMeter;
u32 biYPelsPerMeter;
u32 biClrUsed;
u32 biClrImportant;
#pragma pack()

struct Bitmap
BitmapHeader header;
BitmapInfo info;
u32* quads;

int width;
int height;
RGBColor* buffer;

Bitmap(const char* fn)

int load(const char* fn)
int rc = -1;
char tmp[256];

FILE *f = fopen("testdata256", "wb");
if (NULL != f) {

FILE* fp = fopen(fn,"rb");
rc = 1;

u32 fileSize = ftell(fp);
u32 headerSize = sizeof(BitmapHeader) + sizeof(BitmapInfo);
if(fileSize > headerSize)



if(header.bfType == 19778 &&
header.bfReserved1==0 &&
header.bfReserved2==0 &&
info.biSize == 40 &&
info.biBitCount == 24 &&
info.biCompression == 0)
fileSize = ftell(fp);

width = info.biWidth;
height = info.biHeight;

//printf("width: %d, height:%d, bitsPerPixel:%d, biCompression:%d\n",
// width,height,info.biBitCount,info.biCompression);

//printf("sizeof color:%d\n",sizeof(Color));
int dataSize = width * height;
if(width > 0 && height > 0 && width {
buffer = new RGBColor[ dataSize ];
fread(buffer, dataSize,1,fp);

//int index = 0;
//for(int i=0; i //{
// for(int j=0; j // {
// RGBColor c;
// memcpy(&c,buffer+index,sizeof(RGBColor));

// //fread(&c,3,1,fp);
// if(c.r==0 && c.g==0 && c.b==0)
// {
// printf("_");
// }else{
// printf("#");
// }

// //if(c.r==0)
// //{
// // c.r=255;
// //}
// //if(c.g==0)
// //{
// // c.g=255;
// //}
// //if(c.b==0)
// //{
// // c.b=255;
// //}
// memcpy(buffer+index,&c,sizeof(RGBColor));

// index += sizeof(RGBColor);
// }
// printf("\t%d\n",i);

//FILE* fp2 = fopen( tmp, "wb");
// fwrite( &header,sizeof(BitmapHeader),1,fp2);
// fwrite( &info,sizeof(BitmapInfo),1,fp2);
// fwrite( buffer,dataSize,1,fp2);
// fclose(fp2);

return rc;



Map Format

I created the map format. Text based because I cant be bothered writing a map editor (for something that will be inferior to an artist created content anyway) , and not crucial for the end result only used for development.

12 20
Where # is a wall, . is a floor plane and S is a spawn location.

For rendering it simple, just place it into ogres static geometry (no problem). For my collison mesh I tried reading the data from the static geometry.

As the map grew in size this become too slow. I started writing an algorithm to batch the collison geometry into squares. After a while I realized it wasnt worth the effort of writing such an algorithm either that or I was too lazy.

The so called collison map.
CellType row, col, colspan, rowspan

W 0 0 12 1
W 1 0 1 8, F 1 1 10 9, W 1 11 1 8
W 9 0 4 2,F 9 4 4 2,W 9 8 4 2
W 11 0 1 8,F 11 1 10 9,W 11 11 1 8
W 19 0 12 1

Some screens:
This is an overhead view of the 'map'

Using stock art and some Alice textures until I get some real assets.

Here some shots of the Queen as she is being developed.

I will for more not ask for help until I have a demo.
I will for more not ask for help until I have a demo.



Let the bodies hit the floor

Whats good about using scripts (luabind) is I can actually work on two projects at the same time (fairly easily).

Prime Time and Life On The Line can both use the same code base.

>Prime Time
>Life On The Line

Another cool feature about youtube is that you can actually select music to add your to videos... meaning that you dont need to embed them while uploading (Hope there selection grows) but for now I hope you like "bodies" by slipknot

Supposedly you can add &fmt=18 to increase the quality but I am not so sure.




Sure hope you like pictures because I have another one for you.

Added basic CCD for my projectiles, made a "bouncy bullet" it bounces off the walls.




I have been banging my head for a while now, trying to get a simple server up, that I could host multiplayer games. I could not get around my router, tried opening my port, tried forwarding my ports but to no avail. I thought about getting a dedicated server to work as a facilitator for the NAT punch through... but that is so expensive (100 USD per month seemed too much for mucking about). Then I remembered about Hamachi, which solves the problem of connecting from behind a router. I didnt think that you could actually "connect" to the "Hamachi IP address", but turns out you can.

from the wiki


Sign in to follow this  
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!