Brainstorming done

Power to stage one emitters in three...two...one

8-bit is quite a bit of a challenge if one wants to use a 3D engine like Panda3D, one could go mad trying to do that... so I've gone mad before the start just to save myself some time.

The idea I had is to use 3D graphics, just like I would do normally and then use a filter to make it look like in the olden days. Here's a mock-up on how it should work (in GIMP for now, but the shader shouldn't be that difficult to make- even for me):

pyweek1

As far as gameplay goes I decided to do a caveman beat'em-up. I don't know where the idea came from, but when I think of old games I think of titles like Cadillacs and Dinosaurs(not 8-bit but well...) and Prehistorik... the Iron Maiden track 'Quest for Fire' could also be blamed.

The plan for today is:

Wish me luck.

(log in to comment)

Comments

Thats one of the things I thought of when I heard 8-Bit > outdated > cavemen, but we're probably not going to do anything related to that. :) Good luck. -M0dem

I don't mind if someone is doing the exact same thing as I do, in fact that makes me feel I'm doing the right sort of thing ;)

Anyways... I think I'm done for today. Thanks to MakeHuman I've got a player model ready(even with some animations!), a basic environment, a shader that makes things look 8-bitish. This is a in game screenshot:

The loader-setup thing isn't yet functional, but I think I got it looking bad enough (in a good, 8-bit sort of way):

setup

Didn't find any music I like yet, but I got a nice font. It's called PressStart2P and it's under the SIL Open Font License, 1.1, so it should be ok to use. If anyone is in need of a font like this, here's a link:

http://www.dafont.com/press-start-2p.font

Cool - I think you need the "posterize" shader as well though - the colour palette looks a little too high-def :)
Music? How about 8-bit Iron Maiden, uh.. cover? I guess there are copyright/spirit of competition issues. In any case.. Up the irons!
The posterize shader can be customized, the above screen has made with (I think) 16 color 'areas', but if you crank it down to 4 you get this: screen2
The 'crt' effect can be replaced with a 'dot matrix' or droped, the pixels can be bigger: screen3

screen4

I think that's 8-bit enough.

For the music I found a Iron Maiden 'Quest for Fire' midi file, and it sounds not bad at all. But the midi file has an unknown legal status and I don't think I should use it. :(

That is so cool! Awesome shader work. I am glad that pyweek rules requires to show source code. I am looking forward of reading this shader's implementation :)

The shader is very simple, and the techniques are just straight from the interweb.

Pixelization:
http://coding-experiments.blogspot.com/2010/06/pixelation.html
Posterization:
http://www.geeks3d.com/20091027/shader-library-posterization-post-processing-effect-glsl/

The last effect is just multiplying by a texture that simulates a old monitor.

//Cg
//Cg profile arbvp1 arbfp1

void vshader(float4 vtx_position : POSITION, 
             float2 vtx_texcoord0 : TEXCOORD0,
             out float4 l_position : POSITION,
      	     out float2 l_texcoord0 : TEXCOORD0,
			 uniform float4 texpad_tex0,
             uniform float4x4 mat_modelproj)
{
  l_position=mul(mat_modelproj, vtx_position);
  l_texcoord0 = vtx_position.xz * texpad_tex0.xy + texpad_tex0.xy;
}

void fshader(float2 l_texcoord0 : TEXCOORD0,
			uniform float4 k_param1,
             out float4 o_color : COLOR,
             uniform sampler2D tex0 : TEXUNIT0,
             uniform sampler2D scanline : TEXUNIT1)
{
	    
    float dx = k_param1.z;
    float dy = k_param1.w;    
    vec2 coord = vec2(dx*floor(l_texcoord0.x/dx), dy*floor(l_texcoord0.y/dy));  
    
    float nColors = k_param1.x; 
	float gamma = k_param1.y; 
	float4 texCol = tex2D(tex0, coord);
	float3 tc = texCol.xyz;
	tc = pow(tc, gamma);
	tc = tc * nColors;
	tc = floor(tc);
	tc = tc / nColors;
	tc = pow(tc,1.0/gamma);
    
    float4 scaneline_effect = tex2D(scanline, l_texcoord0);    
    o_color.xyz  = tc*scaneline_effect.xyz;
    o_color.w = 1;        
}