Games @ Scene Parties
Posted on September 7, 2008, under Uncategorized.
Today, I’ve taken a look at the ‘Games’ on Pouet.net and made a selection of the ones I liked.
Here they are, in no particular order … yeah, my arse! I won’t post any links only “production name” + “team name”, you can find them at Pouet.net
Please note that I’m running them under Linux using Wine, just in case you didn’t noticed
I will also include a small analysis on the technologies I believe they are using. Reverse engineering is one of my older hobbies … lol
London Game by Team Fragment
This is a lovely GTA 3 clone. It’s one of the most impressive game demos I’ve seen @ a Scene Party … correct me, if I’m wrong
Game Engine: in-house game engine ( proof GSystem.dll ) . A closer exanimation of the DLL Imports revealed that it’s using Direct Input (DINPUT8) for input, and OpenGL (also GLU32 is imported) for rendering.
Sound System: FMod ( proof fmodex.dll )
Physics: NVidia PhysX ( proof PhysXLoader.dll )
Other Notes: Uses Zlib for virtual filesystem (proof zwlibapi.dll — which is probably a wrapper )
PAK files have GS extension. This doesn’t seem to be a complex format, because I checked out one of the files with a hex editor, and the file “signatures” were there, possibly followed by the offsets to the “real meat” … You know, data is a sleeping monster, and code is a living monster
The 1st part seems to be the table of contents.
There are two data files “data.gs” and “london.gs” as of now.
Signature: GS10 — this means GS v1.0 most probably
The sounds are in WAV format. Most of the textures seem to be either PNG or DDS. There are also “.font” with associated DDS files, which most probably contain the dimensions, positions, etc. of the letters used for text rendering.
There are scripts which have the “.script” extension, vertex and pixel shaders have “.vertex”, and “.fragment” respectively.
Material (script) files have the extension “.material” .
At the end of the PAK files, there is a text which says: “If you are reading this, you have no life!” .
This amused me a lot … lol, now I’m scared to death … haha!
It has an external configuration utility named Config.exe, but it definitely worths checking out the “userdata/settings.script”, especially if you wanna enable “debug” mode and a few other interesting stuff, though setting “motion blur” to true, didn’t take any effect.
I didn’t go any further, and waiting for new updated versions as promised in the “readme” file
Sylph Wind by Pieslice Productions
This is a really cool shoot-em up arcade game, really immersing, nice graphics, very good music, and good game-play .
Game Engine: in-house game engine, statically linked, so there is no separate engine dynamic library. Analyzing the imports, this also seems to be using Direct Input for Input (DINPUT8) and OpenGL (also GLU32 is imported ) for rendering.
Sound System: FMod ( proof fmodex.dll, and also credited in the “Manual.html” )
Other Notes: Uses the Cg Shader Technology from NVidia ( proof cg.dll and cggl.dll, and also credited in the “Manual.html” ) instead of pure GLSL .
Some of the resources are exposed like …
The “devscripts” directory contains the “script” files which manipulate different variables, setup “spawn points” or facilitate the loading of content arrays with predefined presets.
The “devshaders” directory obviously contains the “Cg Shader” script files.
The level file have “lvl” extension and seems to have a long signature “pie_sylphengine_level3Ddata_v001d” .
Other resources like textures, sounds reside in the “data” directory as PAK files with “pr” extension. The signature of these files is “_PieResource02″ . At the 1st glance i couldn’t indentify any clearly visible patterns like file headers, etc.
It also imports the ChooseColor, GetOpenFileName and GetSaveFileName from comdlg32, which makes me think that a some sort of “level editor” is also included somewhere, but that’s just a guess, because as always, I didn’t go any further
This is a good game, worth playing
Kiuasturvat feat Vastaisku by Sx Cracked by Taat
This is the typical “rag-doll” type game. No strings attached.
Game Engine: Irrlicht
Sound System: Bass
Other Notes: N/A
Flipout by Mikkosoft Productions
Flipout is breakout game with pinball style controls. This is an innovative concept, IMHO … but at first it’s a bit difficult to control.
It has a Linux port, and obviously uses a great deal of open source libraries.
Game Engine: in-house game engine. Obviously it uses OpenGL for rendering. ( no GLU32 this time )
Sound System: OpenAL with Ogg Vorbis (proof libvorbis-0.dll, OpenAL32.dll, wrap_oal.dll )
Other Notes: Uses DevIL ( DevIL.dll ) for (image) texture loading loading. Also uses libsigc++ (proof libsigc-2.0-0.dll) which is typesafe callback system for standard C++ .
Uses a virtual filesystem to store most of it’s data. The extension of the PAK file is “.data” . There aren’t any clearly identifiable signatures, etc. inside, but again I didn’t go any further
Frontal Assault by Eturintama
No comments, but not X-rated, neverthless interesting and spicy
Game Engine: in-house game engine. It uses GLUT32 ( proof glut32.dll ) and obviously OpenGL for rendering.
Sound System: FMod ( proof fmod.dll )
Other Notes: there is no virtual file system, so all the data files are exposed.
A Tribute To The Rolling Boulder by Kloonigames
This is a nice 2D platform game.
Game Engine: in-house game engine, uses SDL for rendering.
Sound System: SDL_mixer
Physics: Box2D
Other Notes: Uses SDL_Image for texture loading, and SDL_rotozoom for texture manipulation. There is no virtual filesystem all the data can be found in the “data” directory.
It has a nice “autoexec.txt” script file, which setups key bindings, pre-loads sound effects, etc. It also seems to have it’s own in-house GUI framework. ( some of these is mentioned in the “readme.html” )
Dust by Sandbox Software
I was talking about no particular order, but I should have mentioned this one right after the 1st two as a 3rd.
Game Engine: in-house game engine. Uses SDL + OpenGL for rendering ( imports GLU32 ). It seems to import GLUT just for gluSolidSphere , also uses GLEW for extension handling. There are lots of XML files, because of the Collada file format ( proof FColladaR.dll, FColladaD.dll ) .
Sound System: FMod (proof fmodex.dll, and fmod_event.dll )
Physics: Ode ( proof ode.dll )
Networking: Raknet a cross-platform C++ game networking engine. ( proof RakNet.dll )
Other Notes: uses SDL_image for (image) texture loading. The config.ini worth checking
No virtual file system this time either, so everything is there at your own mercy. I think that Maya was used for modeling, hence the “Maya 8.5 | ColladaMaya v3.02 | FCollada v3.2″ in content/scenes/alien.xml
The shaders are GLSL, textures mostly in PNG, sounds and effects in MP3 and WAV. Alos there are few FMOD specific files for sounds / sound effects.
Again, as always I didn’t go any further.
TTS Demo by Aukiogames
This is another GTA clone, with a huge playable level, and lovely graphics.
Game Engine: in-house game engine, using DirectX8 for rendering and input, it also seems to be written in Delphi 7 which means that it’s Object Pascal
niceeee
… just check those nice TParticleSystem, etc. with an hex editor
Sound System: Fmod ( proof fmod.dll )
Other Notes: again there is no virtual filesystem, but it does have a proprietary model format, with the generic “obj” extension.
Textures are in DDS, sounds and music in WAV, MP3 and OGG … Scripts have the extension “tsl” and the language seems to be a subset of Pascal, combined with some PHP.
I stopped right here!
Uffff, this was a long long journey, it took my whole Sunday afternoon …
There were a few other games, but mostly they were seriously lacking quality or just failed to run reasonably.
I think that these prove that Indie Game Development do exists, and it is possible for a small team to create really nice games, even if some are just “tech demos”, showcasing the engines behind
Also, this post has more than 1285 words now, so probably I should stop!!!
Be nice, and happy coding or gaming !!!
Moved to Eclipse …
Posted on July 27, 2008, under Uncategorized.
I’ve been living with GEdit + a few plugins, but today I moved my project to Eclipse with the C/C++ extensions. It took a bit longer to setup everything, but in the end, I got everything plus a lot more.
I also customized the color scheme a bit and changed the font to Bitstream Vera Sans Mono .
Programming Tip #0
Posted on June 5, 2008, under Programming, c++, tip.
I’ll start a series of programming tips and tricks in various languages, and this will be the first one
These are very rare, strange and uncommon stuff for the normal mortals … oK enough chit-chat let’s see some code.
What’s wrong with the following code snippet?
template <class T>
class obj
{
public:
obj(){};
virtual ~obj()
{
map<unsigned long, T*>::iterator it;
//...
//...
};
//...
//...
//...
private:
map<unsigned long,T*> items;
};
Well this will fail, at this line map<unsigned long, T*>::iterator it; giving a rather confusing and cryptic error message which looks something like this error: expected `;’ before ‘it’ . Hmmm …
This can be solved by putting the typename keyword at the beginning of that line. It took me some time to figure out what was the problem
Happy coding, and may the source be with you!
Logging & Filters … etc
Posted on May 21, 2008, under Uncategorized.
I think that is extremely beneficial for every desktop application having an flexible yet powerful logging system.
This can “log” to a file, to a console (internal or not) or both. Anyway, the most important thing are the different log levels, and filters.
Let’s say that we have Text, Info, Warning, Error … each represents an level. Then we can setup a filter to “show” only the Warnings, or the Errors supressing all the other messages. This is extremly useful if you have bunch messages showing up in your log file / console.
Now let’s see some code
#define SAFE_ARRAY_DELETE(x) if(x) {delete [] x; x=NULL;}
#define INRANGE(x,min,max) ( (x >= min) && (x < max) )
namespace Log
{
const int Text = 0;
const int Info = 1;
const int Warning = 2;
const int Error = 3;
// used only by the filtering
const int Any = 4;
};
static int g_logFilter = Log::Any;
void setConsoleLogFilter( const int logFilter )
{
if( INRANGE(logFilter,0,5) )
{
g_logFilter = logFilter;
return;
}
g_logFilter = Log::Any;
}
void consoleLog( const int logLevel, const char *msg, ... )
{
va_list ap;
// is filtering turned on?
if( g_logFilter != Log::Any && g_logFilter != logLevel )
{
return;
}
char *text = new char[ 2048 ];
assert( text );
memset(text,0,sizeof(text));
va_start(ap, msg);
vsprintf(text, msg, ap);
va_end(ap);
switch( logLevel )
{
case Log::Info:
printf( "INFO: %s\n", text );
break;
case Log::Warning:
printf( "WARNING: %s\n", text );
break;
case Log::Error:
printf( "ERROR: %s\n", text );
break;
default:
printf( "%s\n", text );
break;
}
SAFE_ARRAY_DELETE( text );
}
This is very very straightforward … it’s C++, but it can be adapted to C, by replacing the memory managment stuff … new with malloc, delete [] with free
and moving out the constants into an enum
It works out great for me, and I use something very very similar to this on a day to day basis
Happy coding!










