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!