////////////////////////////////////////////////////////
// Water shader demo.
// Copyright 2010 by oP group Germany.
// Commercial Edition or above required for shaders
////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
#include <keys.c>
#include <level.c>
#include <entmove.c>
#include <mtlFx.c>
#include <mtlView.c>
#define PRAGMA_PATH "%EXE_DIR%\\templates\\levels";
////////////////////////////////////////////////////////
var water_height,water_ripple,water_scale,hdr_threshold;
FONT* fHelp = "Arial#16bi";
PANEL* pHelp =
{
digits(5,5,"[1]/[2] -> water level: %4.1f",fHelp,1,water_height);
digits(5,20,"[3]/[4] -> wave height: %3.0f",fHelp,1,water_ripple);
digits(5,35,"[5]/[6] -> wave scale: %3.0f",fHelp,1,water_scale);
digits(5,50,"[7]/[8] -> HDR threshold: %3.0f",fHelp,1,hdr_threshold);
digits(5,65,"Cursor,PgUp/Dn -> move camera",fHelp,0,0);
flags = SHOW;
}
action on_f1_event() { toggle(pHelp,SHOW); }
action water()
{
fx_mirrorWater();
while(1) {
if(key_hit("1")) terrain_raise(me,-0.5);
if(key_hit("2")) terrain_raise(me,0.5);
// skills are defined as var, but shaders use float values
// conversion is not automatic here, thus we need floatv/fixv
if(key_hit("3")) my.skill43 = floatv(fixv(my.skill43)-5);
if(key_hit("4")) my.skill43 = floatv(fixv(my.skill43)+5);
if(key_hit("5")) my.skill44 = floatv(fixv(my.skill44)-5);
if(key_hit("6")) my.skill44 = floatv(fixv(my.skill44)+5);
if(key_hit("7")) mtl_hdr.skill2 = floatv(fixv(mtl_hdr.skill2)+1);
if(key_hit("8")) mtl_hdr.skill2 = floatv(fixv(mtl_hdr.skill2)-1);
water_height = terrain_get_z(my,1);
water_ripple = fixv(my.skill43);
water_scale = fixv(my.skill44);
hdr_threshold = fixv(mtl_hdr.skill2);
wait(1);
}
}
action blob()
{
my.skill42 = floatv(30); // texture influence
fx_envBump();
ent_rotate(me,2,1.5,0.5);
}
function main()
{
if (d3d_shaderversion<2020)
error("Shaders require Commercial Edition!");
d3d_antialias = 4;
video_mode = 8;
fps_max = 60;
// load a level, and create sky, water, and a model :
level_load("small.hmp");
ent_createlayer("skycube+6.dds",SKY | CUBE | SHOW,1);
ent_create("water.hmp",vector(0,0,-5),water);
ent_create("blob.mdl",vector(0,0,30),blob);
vec_set(sun_color,vector(200,240,240));
// set up some parameters and a HDR effect for the camera
vec_set(camera.x,vector(-130,0,80));
camera.tilt = -20;
def_move(); // activate flythrough
mtl_hdr.skill3 = floatv(50); // exposure compensation factor
pp_set(camera,mtl_hdr);
}