Cubme

Posted By: MTD

Cubme - 09/22/09 22:49

Hi everyone,

I'm presenting my first "finished" game - Cubme.

It's a game for everyone with puzzle elements where You need to complete different puzzles and tasks to complete the level.
Some levels have secret "hidden" items which You need to find to get a better score - so watch out.
(some items become only visible when You do something special)

Shortly whats in the game:
- Lots of snow cubes
- Puzzles form easy to confused ?
- Chance to drive a sledge from hill
- Play a Free mode (You get a big space where You can write something in snow)
- Funny kids that cheer You up wink
- Levels where You need to run against time
- And many other things that are included in Cubme web page

Cubme Trailer:
http://www.youtube.com/watch?v=JTW847PfZaQ

There's also a demo version which You can download here

Thanks for reading.
Suggestions and comments are welcome. smile


Attached picture BPicture1.jpg
Attached picture BPicture3.jpg
Attached picture BPicture4.jpg
Attached picture BPicture10.jpg
Attached picture BPicture7.jpg
Attached picture BPicture6.jpg
Posted By: ratchet

Re: Cubme - 09/22/09 23:35

Impressive laugh
Simple ,but really really good design !
Great cartoon animations.
Professionnal work.

Some suggestion : make a bigger and more stylised and cartoon HUD !
Like in Nintendo games, it would suit better your game style i think personnaly.

Nintendo HUD

Posted By: Superku

Re: Cubme - 09/23/09 01:23

Very well done, nice and clean style!
As mentioned before the HUD could need some work, though.
Posted By: Germanunkol

Re: Cubme - 09/23/09 10:32

Very awesome work. The trailer is great!!
Posted By: MTD

Re: Cubme - 09/23/09 10:40

Thank You.
I will keep that in mind(on paper) about the HUD
Posted By: Uhrwerk

Re: Cubme - 09/23/09 21:17

Tried to download and install your demo version. Installation went fine, but when starting the application an error message popped up complaining about a missing .wdl file.
Posted By: MTD

Re: Cubme - 09/24/09 00:21

It's possible, because You have changed the game folder name.
The game folder should be named : "Cubme Demo" or it throws a .wdl error. Will update a new demo version installation file where user can't change the install folder name.
Thanks for info wink


Update - Installer Updated (Fixed)
Posted By: Guardian

Re: Cubme - 09/24/09 05:57

Hi MTD,

I played the demo and liked it very much.

I did find a kind of serious bug in the game-play though. It happens if you push or hold down the arrow keys at the same time you try to shovel snow. It usually drops the snow on top of your player so that it can't move.

Or sometimes the snow flies off out of camera and the player model will not move or respond to keyboard input.

If you would add a reset player position key, or make the snow not able to land on squares where player is it might solve the problem.

Just trying to help, really like the game. laugh

Guardian
Posted By: Cowabanga

Re: Cubme - 09/24/09 12:26

This game looks seriously great, and the trailer rocks!
Oh well, my internet is really slow this week, the download speed is 2-4kb/s. confused
Posted By: MTD

Re: Cubme - 09/24/09 17:11

Thanks Guardian for the found bug.
Fixed and uploaded new Demo version smile

Link: Cubme Demo

Thanks everybody for comments.
Posted By: MTD

Re: Cubme - 10/08/09 12:53

New video for Cubme
Level 6 step by step. Try to get a key from dog + Find a secret. wink

Cubme - Level 6
Posted By: mpdeveloper_B

Re: Cubme - 10/08/09 15:59

The game looks pretty good. Very professional. The only thing I recommend is a good toon shader, here's my modification of BoH_Havoc's toon shader:

Code:
/******************************************************************************************************
Toon-Shader by Wolfgang "BoH_Havoc" Reichardt Modified by MangaPage

Entity Textures:
	Skin1 = Colormap 
	Skin2 = Normalmap (RGB) + Hatchmap (A)

Material Textures:
	Skin1 = Toon Lookupmap (not used yet)
	
Usage:
	Uncomment/Comment the #defines to add/remove an effect.
	vecSkill1.x sets the diffuse shadow alpha (mtl.skill1)
	vecSkill1.y sets the specular power (mtl.skill2)
	
******************************************************************************************************/

/***************************************TWEAKABLES*****************************************************/

// Default Values (will be used if vecSkill1, vecSkill5 or vecSkill9 hasn't been set): 
float specularExp = 30; // vecSkill1.y | sharpness of the specular lighting
float shadowAlpha = 0.5; // range: 0-1 | 0 = pure black shadow | 1 = no shadow at all
float brightness = 1.5; //0-inf 0 = black recommended betweeen 1 and 2
float diffusecoverage = 3;
//

//misc
float3 specColor = {0.4, 0.4, 0.4}; // <--- this is new. Sets the specular color. Range 0-1
float outlineStr = 0.15; //outline shadow strength -1 to 1 : -1=off 1=full coverage
float colorRamp = 2; //sets the colorramp, low values result in a more cartoony look
float bumpStrength = 2; // bumpmapping strength
float hatchTile = 10; //tilingof hatch texture
//

// UNCOMMENT/COMMENT TO ACTIVATE/DEACTIVATE

//Use Diffuse Lighting
#define DIFFLIGHT

//Use Specular Lighting
#define SPECLIGHT

//Use Normalmapping
//#define NORMALMAPPING

//Use Hatching Effect
//#define HATCHING

//Create black outline
#define OUTLINE

//Create black shadow
//#define OUTLINESHADOW

//Above Effects will react to sunlight (only needed if you have dynamic lights in your level)
#define DOSUN

//Diffuse Lighting will react to 5 additional dynamic lights including the sun
#define DYNLIGHTS

//Use PixelShader 2.a | set this if you get an errormessage ("code uses too many many arithmetic instruction slots")
//#define PS2A


/***************************************SHADER*CODE****************************************************/

// Matrices
float4x4 matWorldViewProj;
float4x4 matWorldInv;
float4x4 matViewInv;
float4x4 matWorld;

// Passed by the engine
float4 vecTime;
float4 vecFog;
float4 vecViewPos;
float4 vecViewDir;
float4 vecLight;
float4 vecSunPos;
float4 vecSunColor;
float4 vecLightPos[8];
float4 vecLightColor[8];
float4 vecSkill1;
float4 vecSkill5;
float4 vecSkill9;
float4 vecSkill41;

//Textures
texture entSkin1; // Colormap
texture entSkin2; // Lookup-Map
texture entSkin3; // Normalmap

// Color map sampler
sampler ColorMapSampler = sampler_state 
{ 
   Texture = <entSkin1>; 
   MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
}; 

//Toon Map
sampler1D lookupSampler = sampler_state 
{ 
   Texture = <entSkin2>;
   MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};

//NormalMap
sampler NormalMapSampler = sampler_state 
{ 
   Texture = <entSkin3>;
   MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};

 
 
// Vertex Shader
void DiffuseVS( 
   in float4 InPos: POSITION, 
   in float3 InNormal: NORMAL, 
   in float2 InTex: TEXCOORD0,
   in float3 InTangent : TEXCOORD0,
   in float2 InShadow : TEXCOORD1,
   out float4 OutPos: POSITION, 
   out float4 OutTex: TEXCOORD0, 
   out float4 OutLight: TEXCOORD1,
   out float3 OutViewDir: TEXCOORD2,
   out float3 OutWorldNormal	: TEXCOORD3,
	out float3 OutWorldTangent	: TEXCOORD4,
	out float3 OutWorldBinorm	: TEXCOORD5,
	out float3 OutWorldPos	: TEXCOORD6,
   out float OutFog : FOG) 
{ 
	// Transform the vertex from object space to clip space: 
   OutPos = mul(InPos, matWorldViewProj); 
	// Pass the texture coordinate to the pixel shader: 
   OutTex.xy = InTex;
   // Pass the shadow coordinate to the pixel shader: 
   OutTex.zw = InShadow;
   
   float3 PosWorld = mul(InPos, matWorld);
  	
   //Light
   #ifdef DOSUN
   OutLight.xyz = vecSunPos - PosWorld;;
   OutLight.w = 100000;//distance(PosWorld,vecLightPos[0])/vecLightPos[0].w;
   #else
   OutLight.xyz = vecLightPos[0] - PosWorld;
   OutLight.w = 0;
   if(vecLightPos[0].w < 100000) OutLight.w = 1-distance(PosWorld,vecLightPos[0])/vecLightPos[0].w;
   #endif
  	//

	//Specular Lighting
	#ifdef DOSUN
	OutViewDir = (vecSunPos) - mul(InPos, matWorld);
	#else
	OutViewDir = (vecLightPos[0]) - mul(InPos, matWorld); 
	#endif
	//
	
	//Environment Mapping
	float3 Binormal = cross(InNormal,InTangent);
	OutWorldNormal.xyz = mul(InNormal, matWorld).xyz;
	OutWorldTangent.xyz = mul(InTangent, matWorldInv).xyz;
	OutWorldBinorm.xyz = mul(Binormal, matWorldInv).xyz;
	OutWorldPos = PosWorld;
	//
	
	//Fog
	OutFog = 1 - (distance(PosWorld, vecViewPos) - vecFog.x) * (vecFog.z);
   //
}

// Pixel Shader: 
float4 DiffusePS( 
   in float4 InTex: TEXCOORD0, 
   in float4 InLight : TEXCOORD1,
   in float4 InViewDir: TEXCOORD2,
   in float3 InWorldNormal	: TEXCOORD3,
	in float3 InWorldTangent	: TEXCOORD4,
	in float3 InWorldBinorm	: TEXCOORD5,
	in float3 InWorldPos	: TEXCOORD6
): COLOR 
{ 
	float3 Ln = normalize(InLight.xyz);
   float3 Nn = normalize(InWorldNormal);
   float3 Tn = normalize(InWorldTangent);
   float3 Bn = normalize(InWorldBinorm);
   float3 Nb = 0;
   float3 Vn = 0;
   float3 Hn = 0;
   float4 lighting = 0;

	//check if vecSkill1 has been set. If not, use default values
	#ifdef DIFFLIGHT
		if(vecSkill1.x == 0) vecSkill1.x = shadowAlpha;
	#endif
	#ifdef SPECLIGHT
		if(vecSkill1.y == 0) vecSkill1.y = specularExp;
	#endif
 
 	//get color
 	float4 Color = tex2D(ColorMapSampler,InTex.xy)*brightness; 
   
   float3 Light1 = Color.xyz;
   
   float3 bumpNormal = 0;
   #ifdef NORMALMAPPING
   	bumpNormal= bumpStrength * (tex2D(NormalMapSampler,InTex.xy).xyz-(0.5).xxx);
   #endif
   
   #ifdef DIFFLIGHT
   	Nb = Nn + (bumpNormal.x * Tn + bumpNormal.y * Bn);
   	Nb = normalize(Nb);
   	Vn = normalize(InViewDir);
   	Hn = normalize(Vn + Ln);
   	lighting = lit(dot(Ln,Nb),dot(Hn,Nb),vecSkill1.y);
   #else
   	#ifdef SPECLIGHT
   		Nb = Nn + (bumpNormal.x * Tn + bumpNormal.y * Bn);
   		Nb = normalize(Nb);
   		Vn = normalize(InViewDir);
   		Hn = normalize(Vn + Ln);
   		lighting = lit(dot(Ln,Nb),dot(Hn,Nb),vecSkill1.y);
   	#else
   		#ifdef HATCHING
   			Nb = Nn + (bumpNormal.x * Tn + bumpNormal.y * Bn);
   			Nb = normalize(Nb);
   			Vn = normalize(InViewDir);
   			Hn = normalize(Vn + Ln);
   			lighting = lit(dot(Ln,Nb),dot(Hn,Nb),vecSkill1.y);
   		#endif
   	#endif
   #endif
   
     //float4 gooch = lerp(float4(0,1,0,1), float4(0,0,1,1) , 1+dot(Nn,Ln)*0.95); //Gooch Shading
      
   #ifdef DIFFLIGHT
   #ifdef DOSUN
   	Light1.xyz *= round(clamp((lighting.y*vecSunColor*diffusecoverage),shadowAlpha,1)*colorRamp)/colorRamp;
   #else
   	Light1.xyz *= round(clamp((lighting.y*vecLightColor[0]*2*InLight.a),shadowAlpha,1)*colorRamp)/colorRamp;
   #endif
   #endif
   
   #ifdef SPECLIGHT
   	#ifdef DOSUN
     		Light1.xyz += (round(lighting.z*colorRamp)/colorRamp)*specColor;
     	#else
     		Light1.xyz += (round((lighting.z*InLight.a)*colorRamp)/colorRamp)*specColor;
     	#endif
   #endif
   
   
   #ifdef HATCHING
   
   	float2 Tile = InTex.xy*hatchTile;
		Tile = frac(Tile)*(float2(0.5,0.5)-2*0.004)+0.004;
		
		float hatchFactor = lighting.y * 4.0;
		float3 weight0 = 0.0;
		float3 weight1 = 0.0;
		if (hatchFactor>3.0) { weight0.x = 1.0; }
		else if (hatchFactor>2.0)
		{
			weight0.x = 1.0 - (3.0 - hatchFactor);
			weight0.y = 1.0 - weight0.x;
		}
		else if (hatchFactor>1.0)
		{
			weight0.y = 1.0 - (2.0 - hatchFactor);
			weight0.z = 1.0 - weight0.y;
		}
		else if (hatchFactor>0.0)
		{
			weight0.z = 1.0 - (1.0 - hatchFactor);
			weight1.x = 1.0 - weight0.z;
		}
		float4 hatchTex0 = tex2D(NormalMapSampler,Tile).a * weight0.x;
		float4 hatchTex1 = tex2D(NormalMapSampler,Tile+float2(0.5, 0.0)).a * weight0.y;
		float4 hatchTex2 = tex2D(NormalMapSampler,Tile+float2(0.0, 0.5)).a * weight0.z;
		float4 hatchTex3 = tex2D(NormalMapSampler,Tile+float2(0.5, 0.5)).a * shadowAlpha;
		float4 hatchColor = hatchTex0 + hatchTex1 + hatchTex2 + hatchTex3;
   	Light1.xyz *= hatchColor.xyz;
		
   #endif
      
   #ifdef OUTLINESHADOW
   	Vn = normalize(matViewInv[3].xyz - InWorldPos);
   	half3 velvety1;
   	float vdn = outlineStr-dot(Vn,Nn);
   	float3 vecColor = float4(vdn.xxx,1.0);
   	velvety1 = float4((vecColor).xyz,1);
   	velvety1 = clamp(velvety1,0,1);
   	Light1 *= pow(1-velvety1,400);
   #endif
   
   return float4(Light1,Color.a);
} 



//----------------------------------------------------------------------------------------------------------------
// LIGHTS
//----------------------------------------------------------------------------------------------------------------

struct VS_LIGHTS0
{
    float4 Pos  : POSITION;

    float4 Light1 : TEXCOORD0;
    float4 Light2 : TEXCOORD1;
    float4 Light3 : TEXCOORD2;
    float4 Light4 : TEXCOORD3;
    float4 Light5 : TEXCOORD4;
    
    float2 Tex : TEXCOORD5;
    float Fog : FOG;
};

VS_LIGHTS0 LightsVS(float4 Pos : POSITION, float3 texcoord0 : TEXCOORD0, float3 Normal : NORMAL, float3 Tangent : TEXCOORD0  )
{
    VS_LIGHTS0 Out = (VS_LIGHTS0)0;
    Out.Pos = mul(Pos, matWorldViewProj);	// transform Position
    
    // compute the 3x3 tranform matrix 
    // to transform from world space to tangent space
    float3x3 worldToTangentSpace;
    worldToTangentSpace[0] = mul(Tangent, matWorld);
    worldToTangentSpace[1] = mul(cross(Tangent, Normal), matWorld);
    worldToTangentSpace[2] = mul(Normal, matWorld);
        
    float3 PosWorld = mul(Pos, matWorld);
	
    //Light1	 
    float3 Light1 = PosWorld - vecLightPos[0].xyz  ; 
    Out.Light1.xyz = normalize(mul(worldToTangentSpace, -Light1));
    Out.Light1.xyz = saturate(dot(1, Out.Light1.xyz));
    Out.Light1.w = distance(PosWorld,vecLightPos[0])/vecLightPos[0].w;
    Out.Light1.xyz *= 1-saturate(dot(Out.Light1.w, Out.Light1.w));
    
    //Light2	 
    float3 Light2 = PosWorld - vecLightPos[1].xyz  ; 
    Out.Light2.xyz = normalize(mul(worldToTangentSpace, -Light2));
    Out.Light2.xyz = saturate(dot(1, Out.Light2.xyz));
    Out.Light2.w = distance(PosWorld,vecLightPos[1])/vecLightPos[1].w;
    Out.Light2.xyz *= 1-saturate(dot(Out.Light2.w, Out.Light2.w));
    
    //Light3	 
    float3 Light3 = PosWorld - vecLightPos[2].xyz  ; 
    Out.Light3.xyz = normalize(mul(worldToTangentSpace, -Light3));
    Out.Light3.xyz = saturate(dot(1, Out.Light3.xyz));
    Out.Light3.w = distance(PosWorld,vecLightPos[2])/vecLightPos[2].w;
    Out.Light3.xyz *= 1-saturate(dot(Out.Light3.w, Out.Light3.w));
    
    //Light4	 
    float3 Light4 = PosWorld - vecLightPos[3].xyz  ; 
    Out.Light4.xyz = normalize(mul(worldToTangentSpace, -Light4));
    Out.Light4.xyz = saturate(dot(1, Out.Light4.xyz));
    Out.Light4.w = distance(PosWorld,vecLightPos[3])/vecLightPos[3].w;
    Out.Light4.xyz *= 1-saturate(dot(Out.Light4.w, Out.Light4.w));
    
    //Light5	 
    float3 Light5 = PosWorld - vecLightPos[4].xyz  ; 
    Out.Light5.xyz = normalize(mul(worldToTangentSpace, -Light5));
    Out.Light5.xyz = saturate(dot(1, Out.Light5.xyz));
    Out.Light5.w = distance(PosWorld,vecLightPos[4])/vecLightPos[4].w;
    Out.Light5.xyz *= 1-saturate(dot(Out.Light5.w, Out.Light5.w));
    
    float ofog = 1 - (distance(PosWorld, vecViewPos) - vecFog.x) * (vecFog.z);
    Out.Fog = ofog;
    
    Out.Tex = texcoord0.xy;
    
    return Out;
}

struct PS_LIGHTS0
{
    float3 Light1 : TEXCOORD0;
    float3 Light2 : TEXCOORD1;
    float3 Light3 : TEXCOORD2;
    float3 Light4 : TEXCOORD3;
    float3 Light5 : TEXCOORD4;
    
    float2 Tex : TEXCOORD5;
};

float4 LightsPS( float4 Light1 : TEXCOORD0,
    float4 Light2 : TEXCOORD1,
    float4 Light3 : TEXCOORD2,
    float4 Light4 : TEXCOORD3,
    float4 Light5 : TEXCOORD4,
    float2 Tex : TEXCOORD5
     ):COLOR0
{
	float3 color = tex2D(ColorMapSampler,Tex);

    float4 shadow1 = Light1;
    float4 shadow2 = Light2;
    float4 shadow3 = Light3;
    float4 shadow4 = Light4;
    float4 shadow5 = Light5;
 
    float3 result =
   	(shadow1*vecLightColor[0])+
   	(shadow2*vecLightColor[1])+
   	(shadow3*vecLightColor[2])+
   	(shadow4*vecLightColor[3])+
   	(shadow5*vecLightColor[4]);
   
   result *= color;
   result *= 4;     
   
//-------------------------------------------
//Finalize
//-------------------------------------------

    return float4(result,8.0);

}



 
technique t01
{ 

   pass P0 
   {
		VertexShader = compile vs_2_0 DiffuseVS();
   	#ifdef PS2A
      	PixelShader  = compile ps_2_a DiffusePS();
      #else
      	PixelShader  = compile ps_2_0 DiffusePS();
      #endif
   }
 	
 	#ifdef DYNLIGHTS
   pass P1 //lights
    {
    	
    	 alphablendenable=true;
   	 srcblend=one;
    	 destblend=one;
       VertexShader = compile vs_1_0 LightsVS();
       PixelShader  = compile ps_1_4 LightsPS();
    }
    #endif
    
	#ifdef OUTLINE
	pass p1 // do a real outline
	{
		alphablendenable=false;
		shademode = Flat;
		CULLMODE=CW;
		vertexShaderConstant[0]=<matWorldViewProj>;
		vertexShaderConstant[16]=<vecSkill41.x>; // outline thickness
		vertexShader =	asm
		{
			vs_1_0
			dcl_position v0
			dcl_normal v3
			dcl_texcoord v7
			mov r0,v0
			mul r1,c16.x,v3
			// Scale the normal
			add r0.xyz,r0.xyz,r1.xyz
			m4x4 oPos,r0,c0
			// Transorm position to clip space
			mov oD0, c0
			mov r0,c0
		};
	}
	#endif
}



edit: sorry i didn't notice it was released, but hey there's always room for a patch grin
Posted By: MTD

Re: Cubme - 10/08/09 17:11

Big thanks.
Will try out and post results.
laugh
Posted By: ratchet

Re: Cubme - 10/09/09 09:23

It is positive for your mind
I agree with that said on the site, a fresh and fun game, changes a lot from all today zombies, blood and violence.

It don't concern me and my Nvidia video card , but :
why not having toon shader on options : to allow even old hardware ro laptops to run the game ?
I like the game like that, with simpel shading it gives it a good and simple style, perhaps toon shader will destroy the overall style and perfect integration of scene and characters ?

Yeah , the HUD now is really cool ,great job laugh


Posted By: Crazykins

Re: Cubme - 10/16/09 05:54

MTD the demo is awesome! Though I wanted to buy the full game but www.plimus.com will not let me have it though they have already charged me. If I was you in order not to loose customers I would go with sharit.com or someone else. They will not provide me with a phone number to call them but want to call me before they give me the game. lol I had no issue buying 3dgs A7 from sharit. Hopefully I will get to play the game sometime this year.

Good job on the development though. laugh

Update: They rejected my order but still charged me. Shouldn't that be stealing. They wont let me download the game but will not give me a refund and sent me an email stating my order was rejected. LMFAO!
Posted By: sPlKe

Re: Cubme - 10/16/09 07:06

i agree to go with share-it instead. I use share-it and i am very happy with it laugh
Posted By: MTD

Re: Cubme - 10/16/09 23:15

Wow. Really sorry Creazykins.
Hope that the Plimus guys will refund and explain why they do so, because i have no information about such thing. If I can help anyway, send me an PM or e-mail.

Updated the web page and added Share*it

New Buy options at: Cubme Full Version
Posted By: Crazykins

Re: Cubme - 10/17/09 00:17

Cool... Now I can get the game grin

Thanks!
Posted By: Crazykins

Re: Cubme - 10/17/09 09:40

You should think about adding your game to Steam (Valves game client). I think it would do very well. www.steampowered.com

Got the full game now and it is very fun. grin
Posted By: gfxExp

Re: Cubme - 10/21/09 12:12

Looks well made! I saw the trailer. I'll definitely download the demo and check it out laugh
Posted By: ratchet

Re: Cubme - 10/21/09 21:13

Great it was showed in Gametrailers laugh

http://www.gametrailers.com/video/beware-of-cubme/57897#comments_top

Don't put attention to comments , there are hard core gamers that just like AAA Games and graphics like COD4, Uncharted 2 etc ...
Posted By: Crazykins

Re: Cubme - 10/22/09 02:45

Ya don't listen to those trolls. They have never even played the game and just want to troll every game that is not the run of the mill FPS. They are no more than 12 years old mentally and need to try and malign others in order to make themselves feel better.

I love this game and it is a great break from the everyday crap you see in gaming now.

Keep up the great work. I can't wait till the Christmas version comes out. grin
Posted By: mpdeveloper_B

Re: Cubme - 11/02/09 18:16

Originally Posted By: Crazykins
You should think about adding your game to Steam (Valves game client). I think it would do very well. www.steampowered.com


Agreed, from the look of the game I think it would make it. Check the steamworks website: http://www.steampowered.com/steamworks/

they have all their contact information (available to non-liscensees) on that site. You should have a good chance I think. It's worth a try.
Posted By: Redeemer

Re: Cubme - 11/11/09 15:42

Excellent work! I'm tempted to download a demo and try it out.

On a side note, this game reminds me a lot of Clonk. Anybody here played that game?
© 2023 lite-C Forums