Jump to content
  • Advertisement
  • entries
    112
  • comments
    236
  • views
    136014

About this blog

Still making games...

Entries in this blog

 

Avatar Man...

is out now! If you want to give it a try go here or download it in the Xbox marketplace.

Demosthenes

Demosthenes

 

...One more time.

Avatar Man is back in Peer Review. If you have a creators club account, you can check it out here.

The reason it failed peer review the first time was that I didn't load the correct avatar when two gamepads were used. Hope it passes this time.

I'm happy with the way Avatar Man turned out because of the three games I completed this was the one it took me less time to finish and the one I cared less about. Both Bennu And Attack of the 50ft Verbose Dinosaur were attempts at using new concepts but turned out to be either not that acessible or fun. Avatar Man is a bit trashy in the sense that there's very little of new in it and the graphics and sound are only there to serve the gameplay, but it's forgettable fun all the way.

Demosthenes

Demosthenes

 

Avatar Man

Avatar Man is back in peer review. I forgot some debug code when submitting the first time around, I also did some tweaks here and there:

- Changed intro message to warn player of enemy avatars.
- Added texture to indicate in which square the enemy player is currently in.
- Step count is now shown again during the level.
- Level 9 changed to remove enemy avatar that cycled through 3 slabs.

Demosthenes

Demosthenes

 

Avatar Man....

Avatar Man is back in playtest. If you have a creator's club account (this is starting to sound like I'm sponsored by Microsoft or something. I wish.) you can test it here.

Also, here's the (final?) game cover:


Demosthenes

Demosthenes

 

Avatar Man

So we just finished our first game with avatars, called Avatar Man:



It's a pacman-like game where you must press each tile in a labyrinth while avoiding enemy avatars. Here's a ">video of the game in action. The video was taken on a PC, where you can't display Xbox avatars, but thankfully Ubergeek wrote an avatar wrapper class that amongst other things displays the avatars as skeletons on the PC.

This is the first game I completed where I didn't try to come up with an original concept. It's not a straightforward pacman clone, since the enemies move in preset patterns and there are special titles that when pressed alter the enemies' behaviour (either making them fast or releasing them from their patterns). In fact, it feels more like a hide-and-seek game than a pacman game.

It's also my first completed 3D game. There is still a lot of stuff I don't understand well about shaders, lighting, etc. The most complicated part was the effect that morphs textures as you walk over the tiles. This was done using a shader adapted from a couple of Creators Club examples.

As for the art, my brother did all the textures for the walls and floors.

If you want to give it a try and you have a Creators Club account, Avatar Man is in playtest now.

Demosthenes

Demosthenes

 

Attack of the Verbose Dinosaur...

...The update is finally out. It should fixe the garbage collector slowdowns that occurred from time to time.

Also, although it passed peer review, two people mentioned a crash but couldn't tell how to reproduce it. If you find it please tell me. :)

Demosthenes

Demosthenes

 

Status update...

...Just a quick status update.

- Attack of the 50ft Verbose Dinosaur is now in peer review, if you have an XNA Creators Club membership you can check it out here.

- One Man Armada is currently in hiatus because I started a quick game with avatars. It's a pac-man-like game, set in mazes where you have to run through every empty space and avoid other avatars. It should be done within a month or so and them I'm resuming OMA.

Demosthenes

Demosthenes

 

Oma - First gameplay video

Here's the ">first development video for One Man Armada. Basically the destroyer ship spawns the fighter ships that chase the player ship. Each fighter ship tries to avoid the other fighter ships and the destroyer ship. The box2d.xna engine provides a raycast mechanism that helps to prevent collisions.

Demosthenes

Demosthenes

 

Box2D.XNA and ear clipping...

The first difficulty I ran across in OMA was importing polygons into the game. The polygons in Box2D.XNA must be convex and are limited to 8 vertexes (for performance reasons), which means that when using complex polygons you have to divide them into simpler polygons. One of the authors of Box2D.XNA suggested ear clipping, an algorithm to divide polygons into triangles. The algorithm described in that paper is more optimized than the implementation I went with, because since I only partition the polygons during game initialization, performance isn't that important.

As mentioned in the paper, "an ear of a polygon is a triangle formed by three consecutive vertices Vi0, Vi1, and Vi2 for which no other
vertices of the polygon are inside the triangle." The basic algorithm consists of taking the initial polygon vertex list and removing ears one by one until only one triangle remains. The paper suggests using a double-linked list to store the polygon vertexes because it's a data structure that allows quick access to both current, previous and next elements when iterating the list, as well as fast removal and insertion.

Additionally, a circular list would be even more useful so that no boundary checks would be necessary. In the .Net C# framework, the double-linked list implementation doesn't allow for circular lists, meaning that the last element on the list will always be null, instead of the first element. You also can't change this pointer on the list, because a node can only be inserted in the list once. So I did my own generic circular list implementation, which is basically the same as all circular list implementations: :)


public class CircularListNode
{
public CircularListNode previous, next;
public T value;
}

public class CircularList
{
public CircularListNode first, last;

public void Add(T value)
{
CircularListNode node;

node = new CircularListNode();
node.value = value;

if(first == null)
{
first = node;
last = node;
}
else
{
last.next = node;
node.previous = last;

last = node;
first.previous = last;
last.next = first;
}
}

public void Remove(CircularListNode node)
{
if(first == null)
{
return;
}

node.previous.next = node.next;
node.next.previous = node.previous;

if(node == first)
{
first = node.next;
}

if(node == last)
{
last = node.next;
}
}
}


(Note that this implementation in particular isn't meant to be used outside of this context: the node removal doesn't check if the list is empty because in our particular case it should never be.)

Next, the ear clipping algorithm:


public class GeometryFactory
{
public static List> EarClip(CircularList vertices)
{
List> ears;
CircularListNode node1, node2;
bool isEar;

ears = new List>();

node1 = vertices.first;
while(node1.previous.previous != node1.next)
{
isEar = (InternalAngle(ref node1.previous.value, ref node1.value, ref node1.next.value)
if(isEar)
{
node2 = node1.next.next;
while(node2 != node1.previous)
{
if(PointInsideTriangle(ref node2.value,
ref node1.previous.value, ref node1.value, ref node1.next.value))
{
isEar = false;
break;
}

node2 = node2.next;
}

if(isEar)
{
ears.Add(new List { node1.previous.value, node1.value, node1.next.value });

node2 = node1.next;
vertices.Remove(node1);
node1 = node2;
}
}

if(!isEar)
{
node1 = node1.next;
}
}

ears.Add(new List { node1.previous.value, node1.value, node1.next.value });

return ears;
}


The EarClip function receives the vertex circular list (The vertexes must be ordered in anti-clockwise order). It then iterates it, looking for ears. The first check is done by the InternalAngle function, which verifies if the angle formed by the current vertex and its siblings is convex or concave. If it's concave, it can't be an ear and there's no need to do the next step: verifying if any of the other vertexes is inside the triangle formed by the current vertex (the "ear tip") and its siblings (which is done using the PointInsideTriangle function). Each time a ear is found the triangle it forms is added to the output ear list. The "ear tip" vertex is removed and the iteration continues. The iteration stops when there are only 3 elements on the list, which are the final triangle.

The InternalAngle function:

private static float InternalAngle(ref Vector2 v1, ref Vector2 v2, ref Vector2 v3)
{
Vector2 a, b;
float angle;

a = v2 - v1;
b = v3 - v2;

angle = (float)Math.Atan2(b.Y, b.X) - (float)Math.Atan2(a.Y, a.X);
if(angle {
angle += (float)Math.PI * 2;
}

return angle;
}



The PointInsideTriangle function (if you're interested in how it's derived go here):

private static bool PointInsideTriangle(ref Vector2 p, ref Vector2 a, ref Vector2 b, ref Vector2 c)
{
Vector2 v0, v1, v2;
float dot00, dot01, dot02, dot11, dot12,
invDenom, u, v;

// Compute vectors
v0 = c - a;
v1 = b - a;
v2 = p - a;

// Compute dot products
Vector2.Dot(ref v0, ref v0, out dot00);
Vector2.Dot(ref v0, ref v1, out dot01);
Vector2.Dot(ref v0, ref v2, out dot02);
Vector2.Dot(ref v1, ref v1, out dot11);
Vector2.Dot(ref v1, ref v2, out dot12);

// Compute barycentric coordinates
invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
u = (dot11 * dot02 - dot01 * dot12) * invDenom;
v = (dot00 * dot12 - dot01 * dot02) * invDenom;

// Check if point is in triangle
return (u > 0) && (v > 0) && (u + v }


The List> returned by the EarClip function can be used to add each triangle to a Box2D.Xna shape:


Body body;
BodyDef bd;
PolygonShape shape;
Fixture f;

CircularList vertices;
List> triangles;

vertices = new CircularList();
// Build the polygon vertex list here

bd = new BodyDef();
// Set additional body properties here

triangles = GeometryFactory.EarClip(vertices);
foreach(List triangle in triangles)
{
shape = new PolygonShape();
shape.Set(triangle.ToArray(), triangle.Count);
f = body.CreateFixture(shape, 1.0f);
// Set additional fixture properties here
}


And that's it.

Demosthenes

Demosthenes

 

One Man Armada...

So I submitted Attack of the 50ft Verbose Dinosaur to the DreamBuildPlay contest. There are some impressive entries (at least graphically) this year, so I'm not that confident, but hope dies last. :)

In the meantime, I started a new game, One Man Armada (OMA), with a different physics engine, Box2D.Xna. My first impression, when compared to the Farseer Physics Engine, is that Box2D.Xna is much, much faster (it is optimized for the Xbox 360), but has less features. Farseer is close to releasing a new version, but right now I'd recommend Farseer for a PC game (or an Xbox game where you really need the more advanced features) and Box2D.Xna for an Xbox game where performance is essential.

All my games start with a basic gameplay idea that evolves according to whatever I think is working best as I playtest the game. :) I guess it's mostly the same for everyone.

OMA's basic idea is what would happen 9 months after Geometry Wars got drunk and had a foursome with Peggle, Breakout and Freespace. It's a dual-thumbstick shooter (with ships, not abstract stuff) where you shoot balls, like in Breakout, that bounce off ships, causing more damage with each bounce. So you must try to hit as many ships as possible with each shot while avoiding enemy fire.

Right now I'm working on a basic prototype and getting to grips with the physics engine. If the game is fun I'll follow up with it; if not I'll think of some other game. I did a logo anyway:


Demosthenes

Demosthenes

 

Trailer!

">Here's a trailer for attack of the 50ft Verbose Dinosaur!

Also, my brother redid the cover:


Demosthenes

Demosthenes

 

Quick update...

EDIT: Here's a video of the latest build.

Just a quick update, Attack of the 50ft Verbose Dinosaur is back in playtest, here are the changes since the last version:

Bugs fixed:
- Chopper collided with bubbles that weren't shot.
- Credits only showed once.
- Stack overflow when many bubbles were attached to the same building.
- Sometimes the fireball effect kept appearing on the dinosaur's head.
- The chopper appeared immediately if you paused the game for some time.

Modifications:
- Vowels no longer include W and Y (only a,e,i,o,u)
- Letters not shown when level is paused to avoid cheating
- Chopper moves slower in the easier modes.
- Easy time limit increased again due to popular demand.
- Font size increased when time is running out.
- Font colors changed in credits for improved readability.
- Contrast increased for the letters on the dinosaur's back.
- More information about letter power added to the tutorial.
- If the helicopter comes when you destroy a building, it crashes but returns almost immediately with the same bonus.
- Formed words are no longer desselected when the chopper is hit with a bubble.
- Parallax scrolling on the background.

If you are an Xna Creators Club Member and want to give it a try, click here.

Demosthenes

Demosthenes

 

Playtest....

Attack of the 50ft Dinosaur is now in playtest. If you are an Xna Creators Club member and you have nothing better to do, give it a try here.

Here's the game cover, I'm not sure if it's the final one:

EDIT - The second image should be the final one, my brother changed it to make the dinosaur look even more deranged.



Demosthenes

Demosthenes

 

Attack of the 50ft Verbose Dinosaur!

It's been a while since the last post.

I've been very busy on our latest game, Attack of the 50ft Verbose Dinosaur (AOT5VD).



AOT5VD is, basically, Scrabble meets Rampage. You play as a dinosaur that throws letters at buildings. When the letters form a word you can explode the word, causing damage to the buildings. The bigger the letter the bigger the damage. I came up with the concept and did all the programming, my middle brother did almost all the art.



You can view a gameplay video here.

Once in a while a helicopter comes by with a word missing the first letter. If you complete the word you get a bonus. More on that later.

But why is the dinosaur doing this?

Any comments/suggestions appreciated (stuff you'd like to see on the game, things that seem wrong to you, etc).

Demosthenes

Demosthenes

 

Another game...

...Super Ninja Kung-Fu Extra Pow Pow was put on hold because I had an idea for a game that would be quick to make. For me, "quick" means 2-3 months. :)

Here's the first screenie and a poem, that doesn't even rhyme, to describe it:




Paved roads, walkways and bricks
The city sleeps in a moonlit bed
Untroubled by the lamp posts and HEY!
Is that a dinosaur on the way?



Demosthenes

Demosthenes

 

Joints...

I now set limits on the joint rotation, making the ninja a proper rag-doll. Video here. The Farseer Engine provides the AngleLimitJoint, so it was quite easy. :)

Demosthenes

Demosthenes

 

Super Ninja Kung-Fu Puzzle Extra Pow Pow

Me and my brother started working this weekend on our next game after Bennu:

Super Ninja Kung-Fu Puzzle Extra Pow Pow

After Bennu, we're working on a game with many similarities but much more accessible. The main ninja character will be animated in the same way as the frog boss in Bennu (sort of a cardboard puppet). My brother drew the main character parts and I'm currently working on a character editor to position the parts, create joints to bind them together and set the limits of those joints. Video here.

We want to participate in DreamBuildPlay '09. The submission date is the 6th of August, less than a month from now. Will we make it? Stay tuned.

P.S.: The name of the journal changed to "Once a Bird". That's our group name, since there isn't a company to speak of. It's just me (main concept/programming/programmer art), my middle brother (decent art / suggestions), my cousin (music) and my older brother (general math and physics help / other suggestions).

Demosthenes

Demosthenes

 

Review...

A very positive review from IGN.

I've been getting some complaints about the controls. The controls in Bennu are definitely not intuitive, because they simulate a ball and chain, and so you have to gain impulse to swing around. Most people expect to be able to just point the ball to wherever they want within the limits of the chain and so get frustrated quickly. I'm doing an update with an alternative control system to update this, but it will be a little too late.

Like IGN says in the review, the more you play the more you like it, but I don't think anyone will like Bennu after playing only 2 minutes.

Demosthenes

Demosthenes

 

Status update...

Bennu is currently at 75% of the Peer Review process. This doesn't exclude the possibility of someone finding a bug that resets the whole process, but still, it's closer.

In the meantime, Bennu was featured in the IndieGames.com Weblog and in Co-Optimus.

Demosthenes

Demosthenes

 

Peer review again...

Bennu is back in peer review.

Here's a list of what changed since the last version:
- My cousin did all of the songs for Bennu, but one of them was originally written for a "Master of Orion"-style game I never finished. It had a singing part that I removed because the lyrics had nothing to do with Bennu.
- Instead of pressing "down" to roll on the ground, now you use "B", which is easier to do than moving the thumbstick. Many of these version changes were suggested by the guy who did "Weapon of choice" and is currently doing "Grapple Buggy", which is looking totally awesome.
- Now there's music playing on the tutorial.

Bugs fixed:
- Game no longer crashes on storage selection when playing with the second controller.
- All "key" references replaced by "button" (a vestigial mark from when Bennu was destined for the PC).
- The reason why you lost the level is now much more visible.
- The "New Game" button no longer asks for confirmation when no progress has been made.

Hope it passes this time, if it does please try it. :P

Demosthenes

Demosthenes

  • Advertisement
×

Important Information

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

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!