// include lib:
#include <acknex.h>
#include <default.c>
// game paths:
#define PRAGMA_PATH "data"
// define test level's name:
STRING* levelStr = "";
// particle bmap:
BMAP* smoke_tga = "smoke.tga";
// helper function:
function vec_randomize(VECTOR* vec, var range){
vec_set(vec, vector(random(1) - 0.5, random(1) - 0.5, random(1) - 0.5));
vec_normalize(vec, random(range));
}
// fade particles:
function fadeSmoke(PARTICLE* p){
// decrease alpha:
p.alpha -= (2 + random(2)) * time_step;
// increase size:
p.size += (1 + random(2)) * time_step;
// if alpha is low enough, kill particle:
if(p.alpha < 0){ p.lifespan = 0; }
}
// simple smoke particle effect:
function smokeEffect(PARTICLE* p){
// vector for particle's movement:
VECTOR vTemp;
// randomize movement of smoke:
vec_randomize(vTemp, 1);
// add calculated movement to particle itself:
vec_add(p.vel_x, vTemp);
// define random size for smoke:
p.size = 1 + random(2);
// define random alpha for smoke:
p.alpha = 65 + random(10);
// define smoke bmap:
p.bmap = smoke_tga;
// define gravity for smoke:
p.gravity = 0.5; // play with this, or even remove
// setup some flags:
set(p, MOVE | BRIGHT | TRANSLUCENT);
// define fading event for smoke:
p.event = fadeSmoke;
}
// simple rocket going in circles:
action actRocket(){
// flags:
set(my, PASSABLE | BRIGHT | UNLIT);
// run this loop until we exist:
while(my){
// calulate new position each frame:
my.x = my.skill1 + fsin(total_ticks * 10, 200);
my.y = my.skill2 + fcos(total_ticks * 10, 200);
// spawn one smoke particle each frame from my position:
effect(smokeEffect, 1, my.x, nullvector);
// wait one frame:
wait(1);
}
}
// fog, sky color setup:
void fogSkySetup(){
// set camera positions/angles:
vec_set(camera.x, vector(-40, -444, 370));
vec_set(camera.pan, vector(85, -42, 0));
// lods:
vec_set(d3d_lodfactor, vector(12.5, 25, 50));
// sunlight:
sun_light = 100;
// camera clipping parameters:
camera.clip_near = 1;
camera.clip_far = 3000;
// fog parameters:
camera.fog_start = 250;
camera.fog_end = 2500;
// fog and sky colors:
fog_color = 4;
// change fog color:
vec_set(d3d_fogcolor4.blue, vector(120, 120, 120));
// change sky color:
vec_set(sky_color.blue, d3d_fogcolor4.blue);
}
// main game function:
void main(){
// disable v-sync:
d3d_triplebuffer = 1;
// turn doppler effect OFF:
doppler_factor = 0;
// preload in buffer all created models:
preload_mode = 3;
// show all errors:
warn_level = 6;
// set maximal framerate:
fps_max = 60;
// smooth time step:
time_smooth = 0.5;
// window title:
video_window(NULL, NULL, NULL, "Test");
// video modes:
video_set(800, 600, 16, 2);
video_set(0, 0, 16, 2);
// no wide-screen:
video_aspect = 1.333;
// freeze the game:
freeze_mode = 1;
// load the level:
level_load(levelStr);
// wait three frames:
wait(1);
// unfreeze the game:
freeze_mode = 0;
// adjust weather:
fogSkySetup();
// seed the random sequence:
random_seed(0);
// create a model:
ENTITY* testEnt = ent_create("bbox.mdl", nullvector, actRocket);
}