Page 1 of 6

The game with no name

Posted: Thu Apr 16, 2009 8:29 pm
by Valmond
Post updated 27 may 2010

If you want to test the game:

Registration (Account, Character Name and Password):
http://94.23.57.36/index.php
(new since the beginning of 2011)


Now, this is really pre-proto stuff so there are a Lot of things that doesn't work, are ugly etc. etc. but I'm working on it.

And yeah, ingame everything is in French(!), I'm Swedish so I have made the necessary
for 'other language support' but I haven't translated everything and as I'm living
in France well that is how it ended up (great for testing non-ASCII languages though).
The server is also in France (Paris) so I guess overseas clients will have crazy ping etc.

If you are on a 'non french' computer you can edit the shortcuts in the ingame menu (hit ESCAPE).
You can also change screen resolution (game doesn't check if it is supported though) and try fullscreen.

How to play:
directionnal keys (and QZSD on AZERTY keyboard for example) moves you around
Space = jump
If you are stuck, just turn and walk backwards (a debug thing, you can climb any mountain this way for example)

Right click = buy, sell, equip...
Left click = Information

Attack: select enemy and use the shortcuts

If you slide an object out of the backpack onto 'nowhere' it will be destroyed (with a "Do you want to destroy : Shoes" popup).


[edit] some new screenshots:
Image

Image

Image








Original post:

Hi everybody!

First of all, who I am: I'm Swedish but left for France at
the age of 24 and that was in -95 so I'm one of the dinosaurs yes.

Game programming has always been my big hobby and even after a full days work of programming
I'm happy to continue at home (but on My game Just like I want it :) ) so when I found Irrlicht I just
adopted it, a million kudos to the developers, so easy to use and full with features!


So, what's my Project then?

A persistent multiplayer game offcourse!

Well, don't forget it's just a weekend/hobby thing so the goal is to have a very basic "gamelike" app running and not like the next killer MMORPG ;)


Technology:

A simple WAMP server installed on my Windows machine (so it's MySQL for the database) with text in UTF-8
XML and TinyXML for the static data (and mysqldump to export easily from the database to xml with just a click)
C++ (at the moment I just wrote up a PHP site for the registering stuff so I guess PHP too)
Sockets and threads
a millisecond timer
and offcourse Irrlicht!
Freeworld3D for the heightmaps and a SplatShader (+some tools to make the atlas map)
the B3D pipeline for meshes and animations


Here are a couple of screens of the work in progress:

I'm using the really excellent terrain editor (Ridiculously cheap too, like 30$!) FreeWorld3D by Soconne
Image

and the terrain ingame:
Image

You can buy and sell things:
Image


Fight monsters
Image


and loot objects to equip:
Image



Well that's all for today (and probably for some time as the project is going forward quite slowly)!

Posted: Thu Apr 16, 2009 9:15 pm
by Cloudef
This looks like a "next killer MMORPG" for me already :lol:
Seriously really impressing and motivating for me also :wink:
I personally really hate programming with sockets and let others do the dirty work :twisted:

Oh yes, question!
How does that terrain editor export? And is it how hard to adapt optimizations and cullings to the terrain with code?

Posted: Fri Apr 17, 2009 2:18 pm
by Valmond
Thanks!

It exports map layers one by one (Baselayer, any painted layer + alphamasks + lightmap) and the heightmap (you can use anything between 8bits bmp to 32bits raw)

So for this map I have
a BaseLayer of stone
several layers of Grass,Sand,red sand etc
an alphamask for each layer
one lightmap
one heightmap

I have a crude (but working) set of small tools (mainly to rotate and paste images together) to make the atlas map with a batch.

Then a shader that uses the atlas map in combination with the Irrlicht HeightMap (it using the exported heightmap) which means
all culling code is already done (well except for big worlds where you'll need to load up and de-load terrains you've got insight / no longer sees).

The for now not yet overcome problem is the lack of mipmap support (it could be done using shaders 3.0+ but it's
a lot of work and hopefully we will be granted access to mipmaps from inside the engine in a not too far future which will resolve the problem).


for example, here is the atlas map seen in the screenshots:
(reduced, normally it is a 3MB bmp)
Image

Posted: Fri Apr 17, 2009 2:24 pm
by BlindSide
The for now not yet overcome problem is the lack of mipmap support (it could be done using shaders 3.0+ but it's
a lot of work and hopefully we will be granted access to mipmaps from inside the engine in a not too far future which will resolve the problem).
Sounds like you've been reading Ysaneya's dev reports :wink:

Posted: Fri Apr 17, 2009 5:49 pm
by Saumane
Wait, terrain splatting which supports more than 3 textures? Have you considered sharing it with us? :)

Posted: Fri Apr 17, 2009 8:18 pm
by Steel Style
It's just one atlas texture I think ^^.

Posted: Fri Apr 17, 2009 8:34 pm
by Valmond
>Sounds like you've been reading Ysaneya's dev reports

A google search told me I have read at least one of his pages (one of the 'Journal of Ysaneya') even if I opted for a slight different
method (maybe that's not the page you refer to, if it isn't I'd love a link to it, he's writing interresting stuff) using alphamaps (well I did that because Freeworld3D does it that way :) ).


>Wait, terrain splatting which supports more than 3 textures? Have you considered sharing it with us?

No problem, how can I share this in a good way?

It is quite automatic but some thing must be made 'by hand', the setup ofcourse and the tiling of the textures in the shader (just copy some numbers ).

It goes like this:

Layers are named Base,1.2.3 etc

Freeworld->Custom export which exports
.bmp files for layers
.raw for alpha layers
.raw for the heightmap
.bmp for the lightmap (must be named "Lightmap0")

I got some tools (small .exe:s) that rotate etc those files and pastes them on the final atlas map.
Those tools are about 100% incomplete for other things (than with the Freeworld custom export) but
I'll happily share the projects for them so anyone can change them for their need (MSVC and really small).

then I got this .bat file which 'compiles' the alpha map.
This file also needs to be changed if you want like 11 textures (if you want more than that you'll probably have to squeeze a bit), or 4...


So what kind of terrain editor do you folks use and what do they export?

I can put all of my 'stuff' up on the web but it would be better if it was a bit 'arranged' so it
could suit other exporters too (not necessarily arranged by me ;) ) and in a sort of tutorial form maybe...

Posted: Fri Apr 17, 2009 8:35 pm
by Valmond
@Steel Style

Exact :wink:

Posted: Sat Apr 18, 2009 7:47 am
by Dorth
I am deeply moved and impressed by all newcommers who come here and start giving back almost immediately. It seems the time they are a changing ^^

Thank you for your good work and willingness to share back ^^

Posted: Sat Apr 18, 2009 9:36 am
by Nadro
Hi, If You need 7 textures for Your terrain You don't need atlases. This is the best solution for it, I think:
7 - color textures
7 - normals for color textures
1 - selector texture
In fixed pipeline We have acces for 8 textures (4 in Irrlicht), but in shader pipeline We have 16 textures, so it's ok ;) I will release IrrCg example with them today or tomorrow.

Posted: Sat Apr 18, 2009 9:23 pm
by Valmond
@Dorth

I'll do what I can :)

@Nadro

I see forward to that !
(can you use 16 textures with irrlicht if you go with a shader?)

Posted: Sat Apr 18, 2009 10:21 pm
by Nadro
Valmond wrote:@Nadro

I see forward to that !
(can you use 16 textures with irrlicht if you go with a shader?)
Yes I have got worked code for it. In Irrlicht code You have to add only minor changes in SMaterial.h, this is *.patch file for it:

Code: Select all

Index: SMaterial.h
===================================================================
--- SMaterial.h	(revision 2335)
+++ SMaterial.h	(working copy)
@@ -143,6 +143,7 @@
 
 	//! Maximum number of texture an SMaterial can have.
 	const u32 MATERIAL_MAX_TEXTURES = 4;
+	const u32 MATERIAL_MAX_TEXTURES2 = 16;
 
 	//! Struct for holding parameters for a material renderer
 	class SMaterial
@@ -163,7 +164,7 @@
 		SMaterial(const SMaterial& other)
 		{
 			// These pointers are checked during assignment
-			for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+			for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 				TextureLayer[i].TextureMatrix = 0;
 			*this = other;
 		}
@@ -186,7 +187,7 @@
 			MaterialTypeParam = other.MaterialTypeParam;
 			MaterialTypeParam2 = other.MaterialTypeParam2;
 			Thickness = other.Thickness;
-			for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+			for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 			{
 				TextureLayer[i] = other.TextureLayer[i];
 			}
@@ -208,7 +209,7 @@
 		}
 
 		//! Texture layer array.
-		SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES];
+		SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES2];
 
 		//! Type of the material. Specifies how everything is blended together
 		E_MATERIAL_TYPE MaterialType;
@@ -336,7 +337,7 @@
 		\return Texture matrix for texture level i, or identity matrix for levels larger than MATERIAL_MAX_TEXTURES. */
 		const core::matrix4& getTextureMatrix(u32 i) const
 		{
-			if (i<MATERIAL_MAX_TEXTURES)
+			if (i<MATERIAL_MAX_TEXTURES2)
 				return TextureLayer[i].getTextureMatrix();
 			else
 				return core::IdentityMatrix;
@@ -347,7 +348,7 @@
 		\param mat Texture matrix for texture level i. */
 		void setTextureMatrix(u32 i, const core::matrix4& mat)
 		{
-			if (i>=MATERIAL_MAX_TEXTURES)
+			if (i>=MATERIAL_MAX_TEXTURES2)
 				return;
 			TextureLayer[i].setTextureMatrix(mat);
 		}
@@ -357,16 +358,16 @@
 		\return Texture for texture level i, if defined, else 0. */
 		ITexture* getTexture(u32 i) const
 		{
-			return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0;
+			return i < MATERIAL_MAX_TEXTURES2 ? TextureLayer[i].Texture : 0;
 		}
 
 		//! Sets the i-th texture
-		/** If i>=MATERIAL_MAX_TEXTURES this setting will be ignored.
+		/** If i>=MATERIAL_MAX_TEXTURES2 this setting will be ignored.
 		\param i The desired level.
 		\param tex Texture for texture level i. */
 		void setTexture(u32 i, ITexture* tex)
 		{
-			if (i>=MATERIAL_MAX_TEXTURES)
+			if (i>=MATERIAL_MAX_TEXTURES2)
 				return;
 			TextureLayer[i].Texture = tex;
 		}
@@ -396,23 +397,23 @@
 					FrontfaceCulling = value; break;
 				case EMF_BILINEAR_FILTER:
 				{
-					for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+					for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 						TextureLayer[i].BilinearFilter = value;
 				}
 				break;
 				case EMF_TRILINEAR_FILTER:
 				{
-					for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+					for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 						TextureLayer[i].TrilinearFilter = value;
 				}
 				break;
 				case EMF_ANISOTROPIC_FILTER:
 				{
 					if (value)
-						for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+						for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 							TextureLayer[i].AnisotropicFilter = 0xFF;
 					else
-						for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+						for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 							TextureLayer[i].AnisotropicFilter = 0;
 				}
 				break;
@@ -422,7 +423,7 @@
 					NormalizeNormals = value; break;
 				case EMF_TEXTURE_WRAP:
 				{
-					for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
+					for (u32 i=0; i<MATERIAL_MAX_TEXTURES2; ++i)
 						TextureLayer[i].TextureWrap = (E_TEXTURE_CLAMP)value;
 				}
 				break;
@@ -511,7 +512,7 @@
 				NormalizeNormals != b.NormalizeNormals ||
 				AntiAliasing != b.AntiAliasing ||
 				ColorMask != b.ColorMask;
-			for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
+			for (u32 i=0; (i<MATERIAL_MAX_TEXTURES2) && !different; ++i)
 			{
 				different |= (TextureLayer[i] != b.TextureLayer[i]);
 			}
I don't replace standard MATERIAL_MAX_TEXTURES variable, so other Irrlicht core function work fine, based on standard 4 textures in fixed pipeline. But now I have bigger array with textures, and I can use them in my shader via IrrCg (I implemented in it, functions for support more than 4 textures). In my engine I will use 12 color textures + 12 normal textures + 3 selector textures (need 2 passes).

Posted: Mon Apr 20, 2009 8:45 am
by Valmond
This is very interesting, would this work with shaders lower than 2.0?

(and how do you apply the patch? I'v already done one patch for the meshbuffer copy but I did it by hand :p)

Posted: Mon Apr 20, 2009 9:23 pm
by Nadro
OK, I've done short example, You can download it from:
http://www.sendspace.com/file/8k34gi
Image

It's require SM2.0+ (a or b), because it need 16 registers, standard version of SM2.0 support up to 12 registers, so up to 12 textures, eg 3 selectors + 9 colors, so it's enought in many situations. I don't

Here I have 4 selector textures (I don't use alpha channel only RGB, and 12 color textures, so 16 textures in one pass on one node). Of course, textures can be blurring on edges, I have sharp edges because I don't have much time and I create texture selectors very quick :) Pixel Shader 1.4 support up to 6 textures, so it isn't enought, I think.

I send new version of IrrCg on SVN, examples etc. I will send tomorrow.

Posted: Tue Apr 21, 2009 1:13 am
by grumpymonkey
looks great! just make sure it doesnt turn into a runescape clone or anything like that for two reaons:
1. runescape sucks
2. runescape has a lot of features which will take up a lot of your time and in the end, no one will play your game since they will have to download it whereas runescape can be played online.(it still sucks though >:O)

still. by the screenshots I give it a 4.5/6, good job :D