speciesUnknown

LD18

My first entry

Hi,

This is going to be my first entry; here is where I declare in advance what libs and stuff im going to be using. Anything which I have written myself I will submit as a .zip file, alongside the bare-bones VS project I will be starting out with. (just a .sln with a single .proj which has the linker and build settings already done, but no code in it yet)

Graphics: OpenGL along with my very crude but functional 3d maths lib, and my wrapper class for loading a shader.
Image Loading: SOIL plus my Texture class which is a thin wrapper around it.
Sound: FMOD along with my simple wrapper code. (3 classes). I’ll use Sfxr for the sound; no music unless I have lots of time left, in which case I’ll use Musagi
Input / Window Creation: SDL. No need for wrapper libs here, I’ll make them on the fly.
Font Rendering: SDL_ttf plus my own “brute force” wrapper lib which basically just shoves text on the screen and takes around 1ms to do it…

For the graphics I’m targeting OpenGL 2.1 level hardware, which means I’ll be using fragment and vertex shaders, although probably nothing fancy this time around.

For sound, I have created a basic sound lib which wraps up FMOD’s context creation code, allowing me to create contexts and play sounds with only a few LOC.

One thing I am going to do, and I did ask if this was acceptable in the channel on afternet, is to create myself a VS project with all the third party stuff already setup in the linker / include settings. I wont add my own code to this until I have started, but I will include that code in the zip.

I wont be using any source control for this; it seems pointless for a 48 hour coding binge, I’ll just periodically backup the entire folder the project is in.

All my graphics will be drawn in paintbrush, because I’m so hardcore. Also I have no art skills and so the stylistic “paintbrush art” style is excusable.

Comments

20. Aug 2010 · 12:25 UTC
“I wont be using any source control for this; it seems pointless for a 48 hour coding binge, I’ll just periodically backup the entire folder the project is in.”
20. Aug 2010 · 14:58 UTC
Hey. You. Good luck.

What I will be starting with, plus a few last minute amendments

Hello again,

I’ve prepared the VS solution which I will be starting with, which includes the few bits of code of my own which I’ll be using. It can be accessed here,

http://members.gamedev.net/speciesunknown/LudemDare18-Copy.zip

I  have made my own build of tinyXML where the only difference is that everything is in a namespace (I have namespace OCD) but I’m classifying that as a third party lib which does not need to be announced.

If you open the zip and look at it, you will see a very crude framework – a bit of sound stuff, a bit of graphics stuff (i really hate dealing with low level stuff for shaders and textures, hence class Shader and class Texture).  I have done some basic cleanup of these libs (they are taken from another project) by removing dependencies on that project.  A few have already tried to build this in g++. You wont have any luck, its dirty msvc++ specific code. I promise to do an open source g++ compatible port at a later date.

I would be delighted if anybody used this crude framework for themselves, but it does rely on fmod, sdl, tinyxml and a few others which I’ve not included.

Necromancer

For a while now I’ve wanted to do a prototype RTS; i had this idea in my head for a very simple Baldaurs gate style RTS / RPG thing.

The protagonist is a necromancer! The player has only one attack of his own; the neck break. You have to creep up behind an enemy and break their neck. Very simple really. However, once you have a  corpse in your posession, you have the ability to resurrect that corpse to do your bidding, absorb the corpse to recharge your health, or divide the corpse’s energy between your other minions. The more minions you have, the less powerful each minion will be; when a minion dies, it cannot be resurrected again.

The levels will be tile based, viewed from a top down perspective, and all enemies will be viewed top down; enemies are either resurrected as zombies (who retain the abilities of the creature they were in life) or skeletons, which  are tough melee soldiers, but do not have the abilities of the creature they were in life.

I’ll take this basic set of gameplay mechanics and flesh it out as im working; my first task will be to get the renderer and animations working.

Comments

nathany
21. Aug 2010 · 01:01 UTC
Sounds like a good fit.

Lunch time / progress report

HI!

The last 12 hours have been rather productive – although I slept for 5 of them.

The engine is half done – I have yet to add animations, and picking, but animations are prototyped as a skeleton. I’m going to go with frame by frame animation, using multiple cells in one texture.
Here is what i had for lunch:
What I had for lunch

Its salad, with various leaves (the salad part is not important) with basil and chilli marinaded, pan seared salmon, a mustard and vinegar dressing of my own creation, a dollop of ceaser sauce, and a grating of chedadar cheese. I asked in the shop if they had salmon which was in the shape of an L and a D but they told me I would have to cut it myself, so I didnt bother.

Here is my desk:
My Desk
The monitor on the left is the one which im recording, the one on the right is currently dedicated to IRC (still a time sink even when you arent chatting :( )

[edit] fixed images. Stupid imageshack.

Comments

Martoon
21. Aug 2010 · 12:49 UTC
You’re just showing off with that lunch, aren’t you?

Second meal of the day

Progress is going well, the animation system is fully setup, the renderer is fully setup, I know that the sound system will take no time at all because of the preparation I did (see my initial post to a link to the framework I started with).

Right now I have zero assets, I do have placeholders for my animations, but they look like this:
Imageshack Gallery of some dodgy artwork

This is enough for testing the basics of the animation stack; I can confirm that when a creature is hit it plays its orange “pain” animation and then continues with the white “idle” or green “walk” animation, and that when it dies it plays the red “death” animation and then freezes on the last frame.

I’ll do some screenshots when ive done the HUD. I need a readout of the stats of what you currently have selected, and a row of buttons, one for each ability of the selected character, as well as a readout of mission objectives.

My second meal of the day is not as elaborate; boiled brown rice, chilli con carne out of a can, and my typical addition of grated cheese.


I added a ton of chilli powder though, because the stuff out of a tin is never spicy enough for my liking. Actually, this meal was so good, I ate it while still writing this post.

Comments

ciw1973
21. Aug 2010 · 23:54 UTC
Grated cheese is absolutely essential for such a meal.

Progress… not looking so good now

I’ve started doing the pathfinding: this is going to be difficult, ive never done pathfinding before.

The following things have been finished:
KB / Mouse input
Loading textures
Layout of GUI
renderer set up pre-shader
Animation(VERY IMPORTANT)
Picking (logic laid out as psudocode and partially implemented)
Tileset Rendering (brute force right now, with lots of glVertex calls. Will refine once game logic is working)
Moving around of camera
Placeholder artwork (everything is [1][2][3][4][5] images in various colours)

The following things have not been finished:

Detection of game conditions such as game over
Pathfinding (this might be the end of me)
Any real art ( :( Looks like it’ll be programmer art, but im not going to touch artwork until the game is playable)
Objectives in game
Sound (This wont take long, thanks to the framework I started out with)
Spells ( :( this is a problem, you need to resurrect / consume / Discard monsters)
Attacking (some enemies shoot, others are melee)
Loading of levels from disk; right now they are all solid blocks of passable terrain with random tiles set on them.

I’m thinking I should go with a procedural level generator, which goes through the following sequence:

Create a grid of streets with larger gaps in random places
Line each street with small buildings
In the larger gaps, put an enemy base

Here is a screenshot:

It’s not actually as bad as it looks; if I can get the pathfinding working, I’m on the home stretch.

I didnt finish in time, but here is where I got to

Playable Version, Windows

The problem was, I ran into a pathfinding bug, and while fixing that, didnt get time to do any artwork. I also didnt make use of any kind of level editor, the level is just a flat piece of ground. The picking is still a bit funny, if you select a minion you can’t select the necromancer without right clicking, but you can swap between monsters. I actually wrote this with support for multiple selections, but having run out of time, I didnt bother with it. You also can’t tell the difference between the types of enemy, because I only created one sprite.

I’m now going to submit this as a Jam entry, but I’m going to still stick to the rules of the compo, just without the time limit. Ready for the jam entry, I will complete the following, currently missing, things:

0) art for all 5 kinds of monster
1) Impassable terrain
2) upgraded camera with zooming, restriction of movement to the level only, and rotation (I planned for rotation at the start but didnt get around to it)
3) monsters rotate to face the direction they are heading in
4) group selection with a draggable box
5) the remaining 2 spells (absorb and consume) will be working
6) The level will be a small city with automatically respawning cops / civilians.
7) There will be a linear “tutorial” at the start.
8) The cursor will be replaced with a dynamic cursor with move, attack, select, and cast spell animations.

Controls:
Select a monster: left click
Clear selection: right click
Move screen around: drag with MMB

Move monster around: select it and then click the square you wish to move to
Make monster attack something: Select it and then click what you want it to attack
Hide / show the bottom menu: Click the blue border at the top

To cast a spell, select the necromancer (the guy at the top left who looks the same as all the other guys) and press S (to make a skeleton, which will look like all the other guys) or D (to make a zombie, which will look strikingly familiar to all the other guys) and then click a corpse (which will look like all the other guys except dead)

To cancel spell casting, right click.

Already got my starting framework for LD19

This is basically my framework from last time, with a few extra things added in from LD18. I spent some time during the competition re-inventing the wheel, and this time around I will be starting out with the following things pre-built;

  • Crude animation system. This is the animation system I invented for LD18 with anything remotely game specific removed. It supports an idle loop, temporarily “hitting” an animation so that when its done, it returns to the previous one; “terminating” on a given animation; that animation will run once and then the sprite will *not* return to its idle animation; andthis animation cannot be interrupted by any hits. This is useful, for example, with a death animation, which cannot be interrupted and is the final state.
  • Sprite Factory. A sprite is a set of animations; each animation has its own texture (although there’s no reason they cant share) but the sprite factory will instance a sprite for me. I may use XML for the sprites this time around, but last time, I just hard coded the prototypes for the factory (its that kind of factory) in the factory’s ctor.
  • My basic “lazy loading” resource table. The purpose of this class is to allow me to lazy load a resource by name and then grab an integer ID for it; no need for fancy streaming or additional threads, each resource to be loaded is loaded directly from disk, resulting in a blocking wait. I wont have the time to be messing with streaming files.
  • Crude pathfinding. Given a current square, and a destination square, this will decide what move the creature of object should move to next. There is no “creature” class as I don’t know if the game will even have creatures, so I’ll need to modify this when the competition starts.
  • Crude 2D Renderer. This has features such as “draw square” and “draw text”. I wasted time deciding how this should work in LD18; I should be able to dive right into gameplay this time around.

It also has the features of my previous starting framework;

  • Texture, and shader loading each into class Texture and class Shader. I never bothered with shaders last time; I may not this time, although its possible that I will have the time this time around.
  • Crude wrapper around fmod for playing sounds.
  • Windowing, keyboard and mouse input from SDL
  • Image loading (into textures) using SOIL

Here is a download link for anybody to use it; I cant see this hackish, undocumented and incomplete code being commercially viable, but don’t use it for anything commercial please. Thanks.

LD19 starting framework

LD19

Updated starting framework

I’ve made an updated version of my starting framework; anybody can use this for LD19 compo or the LD19 jam. The main differences are as follows:
1) I now have a polymorphic render list of self drawing items, each with a material
2) A material consists of a shader, a texture, and a load of properties.
3) When drawing, I iterate the render list, and tell each item to draw itself.

The framework I have linked includes some placeholder artwork which should be OK to use, but obviously due to the rules cannot be in the final version. Its just there to test that my tile map and animation are working.

Download from here (2.6mb)

Discovery – Ancient Ruins

I’ve decided that my game should be about discovering ancient ruins! Gameplay will go as follows;

1) You land from space and have to build your base. You are attacked by waves of enemies coming from points around the map.

2) You have to find where the ancient ruins on that map are: the main way to do this is to randomly explore, the the enemies around the map may make this difficult. Alternatively, you can destroy all the enemy bases and then the location will be revealed to you.

3) Fog of war! The fog of war covers the whole map and will grow back unless you post sentries nearby. Sentries have a relatively long line of sight. I’ll achieve the “fog of war” effect with a large texture and a post process effect, which blackens areas you didn’t yet find, and greys out areas where the fog of war has grown back.

I’m going to do this RTS in the C&C style: a panel on the right of the screen contains the controls for building structures and units.

Comments

Sparky
18. Dec 2010 · 00:51 UTC
Wow, ambitious! This is a neat idea, I hope you manage to design it in such a way that the scope isn’t too broad. This sounds neat, I look forward to seeing your progress.

Battle Plans:

My battle plan is as follows;

Hour 1: mess around to think of an idea *done*
Hour 3: Have a tile map loading from the editor Tiled with a basic set of tiles.
Hour 5: Have tanks appearing on the map, constructed by a factory (factory pattern).
Hour 6: Have tanks shooting at each other, and using the basic pathfinding my framework includes.
Hour 10: Have selection of single or multiple items working.
Hour 12: Have user placement of buildings on the map.
Hour 10: Mock up of basic GUI elements completed.
Hour 12: C&C style building of stuff and then placing it works.

By that time ill be in a position to plan the next few stages. I have left 6 hours in the first day for contingency, in the hope that day 2 can be mostly focused on content creation.

Progress report and screen shot

Progress report:

1) I have build the assets for 2 items: the tank, and the laser turret.
2) I can now load a tilemap from file, and build the map in the editor Tiled
3) Code for drawing vehicles is finished – along with a “team colours” shader which does a pallette replacement.
4) I have set up the state machines for the behaviour of objects
5) I have build my vehicles – which consist of a vehicle body and a turret. You put one on the map using the vehicle factory.

Here is an awesome screen shot:
Screenie of the game so far

Note how I can colour each tank in its team colours, Its pretty 😀

Comments

18. Dec 2010 · 12:14 UTC
Looks great. I especially like your working title there 😉

LD21

IM MOTHER FRICKEN IN!!!

i was too shy to do the IM IN video but this is me saying i’m in.

I’ve been challenged to do an FPS this time around. It will have to be in the style of wolfenstein, because that simplifies level design (I can use a tile editor) but I’ll be able to have articulated meshes for the enemies.

I’ll be using XNA this time around. The last two attempts were opengl / SDL / fmod / god knows how many small API’s plus I’m now bored with c++ for small games.

I’m constructing my starting framework over the next couple of days, it will support my usual “lazy loading” scheme for textures materials meshes and sound. I’m using tiled as the level editor – am going to release an XNA .tmx file loader in the next day or so for all to use.

Starting Framework for Doom Clone

Hey,
My game is going to be a doom clone. I got dared. I cannot resist a dare. Its a bit ambitious, but nowhere near as ambitious as my previous attempts, both of which were RTS games and unsurprisingly failed. I am determined that one day I will do a proper RTS though…

Anyway, my starting framework is XNA with some windows specific hacks I worked out, and a game state system. I also made a crude tiled file loader, but didn’t really test it with any kind of renderer, only inspected its results in the debugger. It seems to work.

http://dl.dropbox.com/u/7274197/LudumDare21StartingFramework.zip

There are two application projects. The first is code I ripped out of a real game, i wrote it for testing content pipeline extensions. Ive done this so I can stick breakpoints directly in the code and not worry about how VS insists on using msbuild on my content extensions. If you run it in the debugger you can put breakpoints in and test that the tiled map file is loaded correctly.

The other is a blank screen. Warning: it captures the mouse. This is because I plan to do a 3d FPS and capturing the mouse is necessary in this situation.

[edit]
I forgot to say what stuff I was using 😛 So yeah, here is a list:
XNA for everything code side
My own tmx map loader which I just wrote in the last few hours
tiled for building the worlds
paint.net for doing graphics
sfxr and audacity for sound stuff
VS 2010 express IDE
BEPU Physics engine for the vehicle sequences. Only joking. No vehicle sequences. That would probably suck, but i do need it for ray casting (shooting) and for the collision and stuff.
SVN, hosted on unfuddle, for backup (yes, source control is useful)
XACT for formatting the sound so XNA can use it.

XNA Camera Class

wazzup dawgs
For any of my fellow XNA using peeps, here is a 3D camera class


public class Camera
{
protected Vector3 position, target, up;
protected float fov;

public virtual Vector3 Position { get { return this.position; } set { this.position = value; } }

public virtual Vector3 Target { get { return this.target; } set { this.target = value; } }

public virtual Vector3 Up { get { return this.up; } set { this.up = value; } }

public virtual float FOV { get { return this.fov; } set { this.fov = value; } }

public Camera(Vector3 position, Vector3 target, Vector3 up, float fov)
{
this.Position = position;
this.Target = target;
this.Up = up;
this.FOV = fov;
}

public virtual void rotate(float xdeg, float ydeg)
{
Vector3 direction = (Target - Position);

Matrix yrot = Matrix.CreateFromAxisAngle(-up, MathHelper.ToRadians(ydeg));

Vector3 xaxis = Vector3.Cross(up, direction);

xaxis.Normalize();
xaxis = Vector3.Transform(xaxis, yrot);

Matrix xrot = Matrix.CreateFromAxisAngle(xaxis, MathHelper.ToRadians(xdeg));

direction = Vector3.Transform(direction, yrot);
direction = Vector3.Transform(direction, xrot);

Target = Position + (direction);
}

public virtual void forward(float distance)
{
Vector3 direction = (Target - Position);
direction.Normalize();

this.position += direction * distance;
this.target += direction * distance;
}

public virtual void left(float distance)
{
Vector3 direction = (Target - Position);
direction.Normalize();

Vector3 xaxis = -Vector3.Cross(up, direction);
xaxis.Normalize();

this.position += xaxis * distance;
this.target += xaxis * distance;
}

public virtual void upward(float distance)
{
this.position += this.up * distance;
this.target += this.up * distance;
}

public virtual void move(Vector3 direction)
{
forward(direction.Z);
left(direction.X);
upward(direction.Y);
}
}

Peace out

3

This entry was posted on Friday, August 19th, 2011 at 8:55 pm and is filed under LD #21. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Yay Escape!

So, i signed on to do a doom clone – i was hoping for escape, because now I can make a system of rising lava to act as a timer for getting out of each level. My game idea is pretty simple:

1) level is full of monsters which shoot or charge you
2) you must find keys to unlock doors. Expect ambushes.
3) When you get to the final switch, you must flick it to open the door
4) The lava starts to rise!
5) GTFO before you burn and die.

I plan to have 3 enemies:

1) Lava Monster – throws lava at you.
2) Sniper – static, hides behind cover, can only be hit when he is about to shoot you.
3) Flying Moustache – is a moustache which flies. Obviously.

I’m hoping I can make enough levels – I’m thinking it will be easier to do a few large levels than many small ones.

Who likes this plan? Any suggestions? I’ve already started.

Progress as of 3 hours in

Once again, I forgot to start chronolapse until 1 hour in. So my video will be missing a lot of setting up of boilerplate. Not that this is very interesting.

I have now got my internal architecture working, integrated the physics engine BEPU, set up the debug drawer and put a big box on as a temporary level, so I can start on getting a character to run around. Here is my main menu:
Main Menu

This should give you some idea of how terrible awesome my graphics will be. Yeah.

Flying Moustach of moustachery!

Yeah baby, this moustache is all like, flying and stuff. He flies around. And he is a moustache. How much more awesome could it get?

Flying Moustache in attack mode

Progress so far – physics complete, started working on real graphics

What the physics engine sees

This is the data in the physics engine, drawn using the BEPU physics debug drawer. I’m compressing my tiles into linear batches for the physics, and using a single block for each one.

For the graphics, I’ compressing things further, into a flat list of triangles for each type of tile. Since most levels are more lava than tiles, this should result in a very small number of actual triangles and thus decent performance on even weaker GPU’s.

4

This entry was posted on Saturday, August 20th, 2011 at 12:04 pm and is filed under LD #21. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Progress after approx 12 hours

I don’t yet have the pretty graphics I hoped for, but the physics is nearly finished, which is half the game anyway. The following things work

0) Character moving around the level and aiming FPS style (Thanks to the new release of BEPU physics with its character controller)
1) Floaty enemy who dies when you shoot him enough, and falls to the ground.
2) Physics debug renderer integrated, so I can see everything
3) Level loads from the tiled file format into linear batches of identical tiles
4) Physics side of weapon system finished, and waiting for me to code pickups