Bad post... Sorry.

But here is a repost, complete EXCEPT that the frame-rate dependance still needs tuning.
But as I said before, I'll get to that tonight. I need to sleep, but thought of how to "control" the
entitys fluid from outside while driving home. Eureka!...ohshit.ohshit...Swerve!
With this edition, all you need to do is directly adjust one of the vertices,
and the action will now see it and react accordingly. See the loop in main for how its done.
Code:
#include <acknex.h>
#include <default.c>



#define	viscosity		skill1		//"thickness" of the fluid.  0=Water -> 100=EngineOil
#define	vertex_wide	skill2		//width of HMP in vertices
#define	vertex_high	skill3		//height of HMP in vertices

action fluid_action()
{
	if(!ent_status(my,2)||!ent_status(my,3))		return;		//not a terrain entity.
	var size_x=ent_status(my,2)+1, size_y=ent_status(my,3)+1;
	var x, y, f, tmp, ***data = malloc(sizeof(var)*2);
	for(f=0; f<2; f++)	
	{	data[f] = malloc(sizeof(var)*size_x);
		for(x=0; x<size_x; x++)	
		{	(data[f])[x] = malloc(sizeof(var)*size_y);
			for(y=0; y<size_y; y++)		
				((data[f])[x])[y]  = 0;
		}
	}
	my.viscosity	 = 0;
	my.vertex_wide   = size_x;
	my.vertex_high   = size_y;
	while(me)
	{	
		f = !f;
		for(y=1; y<(size_y-1); y++)   for(x=1; x<(size_x-1); x++)   
		{	
			CONTACT* c = ent_getvertex(my,NULL,(y*size_x)+x+1);    
			if((c.v.y!=((data[0])[x])[y])&&(c.v.y!=((data[1])[x])[y]))
				((data[f])[x])[y]  = c.v.y;
			else
			{
				tmp  = ((data[!f])[x-1])[y] + ((data[!f])[x+1])[y] + ((data[!f])[x])[y-1] + ((data[!f])[x])[y+1];
				((data[f])[x])[y]  = (tmp / 2 - ((data[f])[x])[y]) * 0.95;
				c.v.y = ((data[f])[x])[y];
				ent_setvertex(my,c,(y*size_x)+x+1);
			}
		}
		wait(-(25+my.viscosity)/1000);
	}	
	//cleanup
	for(x=0; x<size_x; x++)	{   free((data[0])[x]);   free((data[1])[x]);   }
	free(data[0]);		free(data[1]);	 	free(data);	 
}



ENTITY* waterent;

function main()
{
	video_mode = 10;
	video_screen = 1;
	level_load("");
	vec_set(camera.x,   vector(0,50,50));
	vec_set(camera.pan, vector(270,-45,0));
	waterent = ent_create("waterent.hmp", nullvector, fluid_action);
	while(1)
	{
		if(key_cuu)
		{
			CONTACT* c = ent_getvertex(waterent,NULL,210);    
			c.v.y += 5;	//YES .y IS correct in D3D terms
			ent_setvertex(waterent,c,210);
			while(key_cuu)	wait(1);
		}
		wait(1);
	}
}
//




"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial