your best option is to rather use the TUST library

here is something i am busy with

Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>

#define PRAGMA_PATH "tust"
///////////////////////////////
#include "tust.h"

//max units
#define population 21000/12

//step in units of unit_space
var unit_space=16;

typedef struct cluster_unit
{
	VECTOR pos;
	LPD3DXMESH mesh;
	int uid;
}cluster_unit;


//build the model from the cluster models
void build_cluster_units(List* cluster,DynamicModel *model)
{
	if(model!=NULL && cluster!=NULL)
	{
		memset(model,0,sizeof(DynamicModel));
		ListItem *it = cluster->first;
		for(it = cluster->first; it != NULL; it = it->next)
		{
			cluster_unit* mycluster=(cluster_unit*)it.data;
			dmdl_add_mesh(model,mycluster.mesh,mycluster.pos);
		} 
		list_end_iterate(it);
	}
}

//add a unit to the cluster
//the cluster model must be re-build with build_cluster_units
void add_cluster_unit(List *cluster,ENTITY *ent,int uid)
{
	cluster_unit *mycluster=malloc(sizeof(cluster_unit));
	
	vec_set(mycluster.pos,ent.x);
	mycluster.mesh=ent_getmesh(ent,0,0);
	mycluster.uid=uid;
	
	list_add(cluster,(cluster_unit*)mycluster);
	sys_free(mycluster);
}

//remove a unit from the cluster 
//the cluster model has to be re-build with build_cluster_units after
void remove_cluster_unit(List *cluster,int uid)
{
	ListItem *it = cluster->first;
	for(it = cluster->first; it != NULL; it = it->next)
	{
		cluster_unit* mycluster=(cluster_unit*)it.data;
		
		if(mycluster.uid==uid)list_remove(cluster,it.data);
	} 
	list_end_iterate(it);
}

function main()
{
	max_entities =50000;
	max_particles=50000;
	
	vec_set(screen_size,vector(800,600,0));
	vec_set(screen_color,vector(1,1,1)); // dark blue
	vec_set(sky_color,vector(1,1,1)); // dark blue
	
	video_window(NULL,NULL,0,"random generator");
	 
	level_load("");
	
	random_seed(500);
	
	while(total_frames<1)wait(1);
	camera.x=-100;
	//camera.z=1000;
	//camera.tilt-=90;
	def_debug();def_debug();def_move();


////////////////////////////////////////////////
//populate the cluster list with entity data

	//position of placement
	VECTOR pos;
	vec_set(pos,nullvector);
	int i;	

	DynamicModel *model =dmdl_create();
	List *cluster=list_create();
	

	for(i=0;i<population;i+=1)
	{
		
		ENTITY* cube=ent_create(CUBE_MDL,pos,NULL);
		
		//store cluster_unit in the list 
		add_cluster_unit(cluster,cube,i);
		
		//remove entity
		ptr_remove(cube);
		
		if(pos.x<unit_space * 50)pos.x+=unit_space;
		else 
		{
			pos.y+=unit_space;
			pos.x=0;
		}
		
	}


////////////////////////////////////////////////
//merge and re-build cluster units into single model 
	build_cluster_units(cluster,model);

	//create merged entity
	ENTITY *cluster_ent=dmdl_create_instance(model,nullvector,NULL);
	
////////////////////////////////////////////////


//remove some units from cluster
for(i=0;i<100;i++)	remove_cluster_unit(cluster,integer(random(population)) );

////////////////////////////////////////////////
//merge and re-build cluster units into single model 
	build_cluster_units(cluster,model);

	//create merged entity
	ENTITY *cluster_ent1=dmdl_create_instance(model,vector(0,-600,0),NULL);
	
////////////////////////////////////////////////


	//remove dynamic model
	sys_free(model);
	//remove list
	sys_free(cluster);
	
}



Last edited by Wjbender; 09/27/14 12:41.

Compulsive compiler