Here is the level Code:


///////////////////////////////////////////////////////////////////////////////////
// GameStudio main script
////////////////////////////////////////////////////////////////////////////
// Files to over-ride:
// * logodark.bmp - the engine logo, include your game title
// * horizon.pcx - A horizon map displayed over the sky and cloud maps
////////////////////////////////////////////////////////////////////////////
// The PATH keyword gives directories where game files can be found,
// relative to the level directory
path "C:\\Programme\\GStudio6\\template"; // Path to WDL templates subdirectory

////////////////////////////////////////////////////////////////////////////
// The INCLUDE keyword can be used to include further WDL files,
// like those in the TEMPLATE subdirectory, with prefabricated actions
include <movement.wdl>;
include <messages.wdl>;
include <menu.wdl>; // must be inserted before doors and weapons
include <particle.wdl>; // remove when you need no particles
include <doors.wdl>; // remove when you need no doors
include <actors.wdl>; // remove when you need no actors
include <weapons.wdl>; // remove when you need no weapons
include <war.wdl>; // remove when you need no fighting
//include <venture.wdl>; // include when doing an adventure
include <lflare.wdl>; // remove when you need no lens flares
include <bloom.wdl>;
////////////////////////////////////////////////////////////////////////////
// The engine starts in the resolution given by the follwing vars.
var video_mode = 6; // screen size 640x480
var video_depth = 16; // 16 bit colour D3D mode

/////////////////////////////////////////////////////////////////
// Strings and filenames
// change this string to your own starting mission message.
string mission_str = "Fight your way through the level. Press [F1] for help";
string level_str = <test.WMB>; // give file names in angular brackets

/////////////////////////////////////////////////////////////////
// define a splash screen with the required A4/A5 logo
bmap splashmap = <logodark.pcx>; // the default logo in templates
panel splashscreen {
bmap = splashmap;
flags = refresh,d3d;
}

////////////////////////////////////////////////////////////////////////////
// The following script controls the sky
sky horizon_sky {
// A backdrop texture's horizontal size must be a power of 2;
// the vertical size does not matter
type = <horizon.pcx>;
tilt = -10;
flags = scene,overlay,visible;
layer = 3;
}

/////////////////////////////////////////////////////////////////
// The main() function is started at game start
function main()
{
// set some common flags and variables
// warn_level = 2; // announce bad texture sizes and bad wdl code
tex_share = on; // map entities share their textures

// center the splash screen for non-640x480 resolutions, and display it
splashscreen.pos_x = (screen_size.x - bmap_width(splashmap))/2;
splashscreen.pos_y = (screen_size.y - bmap_height(splashmap))/2;
splashscreen.visible = on;
// wait 3 frames (for triple buffering) until it is flipped to the foreground
wait(3);

// now load the level
level_load(level_str);
// freeze the game
freeze_mode = 1;

// wait the required second, then switch the splashscreen off.
sleep(1);
splashscreen.visible = off;
bmap_purge(splashmap); // remove splashscreen from video memory

// load some global variables, like sound volume
load_status();

// display the initial message
msg_show(mission_str,10);

// initialize lens flares when edition supports flares
ifdef CAPS_FLARE;
lensflare_start();
endif;

// use the new 3rd person camera
move_view_cap = 1;

// un-freeze the game
freeze_mode = 0;

// client_move(); // for a possible multiplayer game
// call further functions here...
//dllfunction render_backbuffer(entity);

}


/////////////////////////////////////////////////////////////////
// The following definitions are for the pro edition window composer
// to define the start and exit window of the application.
WINDOW WINSTART
{
TITLE "3D GameStudio";
SIZE 480,320;
MODE IMAGE; //STANDARD;
BG_COLOR RGB(240,240,240);
FRAME FTYP1,0,0,480,320;
// BUTTON BUTTON_START,SYS_DEFAULT,"Start",400,288,72,24;
BUTTON BUTTON_QUIT,SYS_DEFAULT,"Abort",400,288,72,24;
TEXT_STDOUT "Arial",RGB(0,0,0),10,10,460,280;
}

/* no exit window at all..
WINDOW WINEND
{
TITLE "Finished";
SIZE 540,320;
MODE STANDARD;
BG_COLOR RGB(0,0,0);
TEXT_STDOUT "",RGB(255,40,40),10,20,520,270;

SET FONT "",RGB(0,255,255);
TEXT "Any key to exit",10,270;
}*/
var_nsave effects_handle;

/////////////////////////////////////////////////////////////////
//INCLUDE <debug.wdl>;




Here is the fx file:



float4x4 matWorldViewProj;



struct VS_OUTPUT

{

float4 Pos : POSITION;

float2 Tex : TEXCOORD0;

};



VS_OUTPUT mainVS( float4 Pos : POSITION,

float2 Tex : TEXCOORD0 )

{

VS_OUTPUT Out = (VS_OUTPUT) 0;

Out.Pos = mul(Pos,matWorldViewProj );

Out.Tex = Tex;

return Out;

}



texture mtlSkin1;



sampler basemap = sampler_state

{

Texture = <mtlSkin1>;

MinFilter = Linear;

MagFilter = Linear;

MipFilter = Linear;

AddressU = clamp;

AddressV = clamp;

};





// Simple blur filter

float4 mainPS(float2 Tex: TEXCOORD0) : COLOR {



//float4 darken={0.025,0.02,0.02,1};

float4 darken={0.025,0.025,0.025,1};



float4 Color=0;


float2 tap1 = {Tex.x+0.008,Tex.y-0.008};

float2 tap2 = {Tex.x-0.008,Tex.y+0.008};

float2 tap3 = {Tex.x+0.008,Tex.y+0.008};

float2 tap4 = {Tex.x-0.008,Tex.y-0.008};


float2 tap5 = {Tex.x+0.008,Tex.y};

float2 tap6 = {Tex.x-0.008,Tex.y};

float2 tap7 = {Tex.x,Tex.y+0.008};

float2 tap8 = {Tex.x,Tex.y-0.008};


float2 tap9 = {Tex.x+0.016,Tex.y-0.016};

float2 tap10 = {Tex.x-0.016,Tex.y+0.016};

float2 tap11 = {Tex.x+0.016,Tex.y+0.016};

float2 tap12 = {Tex.x-0.016,Tex.y-0.016};


float2 tap13 = {Tex.x+0.016,Tex.y};

float2 tap14 = {Tex.x-0.016,Tex.y};

float2 tap15 = {Tex.x,Tex.y+0.016};

float2 tap16 = {Tex.x,Tex.y-0.016};


float2 tap17 = {Tex.x+0.032,Tex.y-0.032};

float2 tap18 = {Tex.x-0.032,Tex.y+0.032};

float2 tap19 = {Tex.x+0.032,Tex.y+0.032};

float2 tap20 = {Tex.x-0.032,Tex.y-0.032};


float2 tap21 = {Tex.x+0.032,Tex.y};

float2 tap22 = {Tex.x-0.032,Tex.y};

float2 tap23 = {Tex.x,Tex.y+0.032};

float2 tap24 = {Tex.x,Tex.y-0.032};


Color = tex2D( basemap, Tex.xy);



Color += tex2D( basemap, tap1);

Color += tex2D( basemap, tap2);

Color += tex2D( basemap, tap3);

Color += tex2D( basemap, tap4);


Color += tex2D( basemap, tap5);

Color += tex2D( basemap, tap6);

Color += tex2D( basemap, tap7);

Color += tex2D( basemap, tap8);


Color += tex2D( basemap, tap9);

Color += tex2D( basemap, tap10);

Color += tex2D( basemap, tap11);

Color += tex2D( basemap, tap12);


Color += tex2D( basemap, tap13);

Color += tex2D( basemap, tap14);

Color += tex2D( basemap, tap15);

Color += tex2D( basemap, tap16);


Color += tex2D( basemap, tap17);

Color += tex2D( basemap, tap18);

Color += tex2D( basemap, tap19);

Color += tex2D( basemap, tap20);


Color += tex2D( basemap, tap21);

Color += tex2D( basemap, tap22);

Color += tex2D( basemap, tap23);

Color += tex2D( basemap, tap24);


float cutoff=8;



if (Color.r < cutoff && Color.g < cutoff && Color.b < cutoff)

{Color-=((cutoff/Color))*0.3;}


// if (Color.r > cutoff && Color.g > cutoff && Color.b > cutoff)

// {Color+=((Color*0.1);}



// return ((Color)*darken)*0.5; //0.6

return ((Color)*darken)*0.5;


}



technique blur

{



pass Object

{

alphablendenable=true;

srcblend=destalpha;

destblend=srcalpha;

ZENABLE = TRUE;

VertexShader = compile vs_1_1 mainVS();

PixelShader = compile ps_2_0 mainPS();

}



}



and here is the Bloom.wdl:


material mat_blur{}
var_nsave effects_handle;






entity glow_quad

{

type = <bloom_tga.tga>; //128*128 works best but can be any size

//this entity is always invisible..

}



entity glow_quad_view

{

type = <bloom_tga.tga>;

layer = 2; // display above view entities with layer 1

view = CAMERA; // same camera parameters as the default view

// set the x position according to the texture size..

// x = 36; // for 32

// x = 72; // for 64

x = 145; // for 128

y = 0; //center horzontally

z = 0; // and center vertically

}


starter ini(){

effect_load(mat_blur,"blur.fx");
effects_handle = dll_open("render_view.dll");
dll_handle = effects_handle;
dllfunction render_backbuffer(entity);
screengrab();
}

//then you need two functions:Code:

function map_glow()

{

me=glow_quad_view;

my.ambient=100;

my.transparent=on;

my.bright=on;

my.alpha=10;

my.visible=on;

my.material=mat_blur;

my.scale_x=1.33; //this scales it to screen proportions..

while(1)

{

//sets material skin1 to the rendered view tex

mat_blur.skin1=bmap_for_entity(glow_quad,0);

wait(1);

}

}



function screengrab()

{

wait(20);

me=glow_quad;

map_glow();

while(1)

{
dll_handle = effects_handle;
render_backbuffer(my);

wait(1);

}

}




//now in your main function or whereever just call screengrab();

//now here is a material that can be used for the bloom effect, it may not be the best shader, but i have found it works well for me..


//first define your material:
//material mat_blur{}

//now ins a starter function put this:
//effect_load(mat_blur,"blur.fx");




Thanks!