#include "../winuser.h"
#include <stdlib.h>


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3createEmitter
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d I F [I [F F F] [F F F]]]	H3d
int M3createEmitter(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}




//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setEmitter
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d I [I [F F F] [F F F]]]	I
int M3setEmitter(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}





//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getEmitter
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] [I F [I [F F F] [F F F]]]
int M3getEmitter(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setEmitterState
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d I] I
int M3setEmitterState(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getEmitterState
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] I
int M3getEmitterState(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setEmitterTimestep
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d F] F
int M3setEmitterTimestep(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getEmitterTimestep
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] F
int M3getEmitterTimestep(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setParticleFather
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d H3d] I
int M3setParticleFather(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}









//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setEmitterSpeed
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d [F F F]] I
int M3setEmitterSpeed(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getEmitterSpeed
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] [F F F]
int M3getEmitterSpeed(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3createParticle
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d I F F F F F F] HPart3d
int M3createParticle(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setParticle
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d Hpart3d H3d I F F F F F F] I
int M3setParticle(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}




//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getParticle
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d]	 [H3d I F F F F F F]
int M3getParticle(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3linkParticleList
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d [HPart3d r1]]	I
int M3linkParticleList(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getLinkedParticleList
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] [HPart3d r1]
int M3getLinkedParticleList(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		make_rgba
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [I I I I] I
int make_rgba(mmachine m)
{	
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////
///		get_rgba
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [I] [I I I I]
int get_rgba(mmachine m)
{	
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setParticleColors
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d [[I F] r1]] I
int M3setParticleColors(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getParticleColors
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d]	[[I F] r1]
int M3getParticleColors(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setParticleSizes
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d [[F F] r1]] I
int M3setParticleSizes(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getParticleSizes
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d]	[[F F] r1]
int M3getParticleSizes(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setParticleSpins
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d [[I F] r1]] I
int M3setParticleSpins(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getParticleSpins
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d]	[[F F] r1]
int M3getParticleSpins(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3createEffect
//////////////////////////////////////////////////////////////////////////////////////////////
//fun	
int M3createEffect(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}






//////////////////////////////////////////////////////////////////////////////////////////////
///		M3setEffect
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HEffect3d I [F F F] [F F F] [F F F]]	I
int M3setEffect(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}



//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getEffect
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HEffect3d] [I [F F F] [F F F] [F F F]]
int M3getEffect(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3linkEffectList
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d [HEffect3d r1]] I
int M3linkEffectList(mmachine m)
{
	MMpull(m);
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getLinkedEffectList
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d H3d] [HEffect3d r1]
int M3getLinkedEffectList(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3delPart3d
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HPart3d] I
int M3delPart3d(mmachine m)
{

	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////
///		M3delEffect3d
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d HEffect3d] I
int M3delEffect3d(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getHPart3d
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d S] HPart3d
int M3getHPart3d(mmachine m)
{
	MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3HPart3dName
//////////////////////////////////////////////////////////////////////////////////////////////
/// fun [S3d HPart3d] S
int M3HPart3dName(mmachine m)
{
    MMpull(m);
	MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3renameHPart3d
//////////////////////////////////////////////////////////////////////////////////////////////
/// fun [S3d HPart3d S] I
int M3renameHPart3d(mmachine m)
{
    MMpull(m);
    MMpull(m);
	MMset(m,0,NIL);
	return 0;}

//////////////////////////////////////////////////////////////////////////////////////////////
///		M3getHEffect3d
//////////////////////////////////////////////////////////////////////////////////////////////
//fun [S3d S] HEffect3d
int M3getHEffect3d(mmachine m)
{
	MMpull(m);
    MMset(m,0,NIL);
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////
///		M3Heffect3dName
//////////////////////////////////////////////////////////////////////////////////////////////
/// fun [S3d HEffect3d] S
int M3HEffect3dName(mmachine m)
{
    MMpull(m);
    MMset(m,0,NIL);
	return 0;
}


//////////////////////////////////////////////////////////////////////////////////////////////
///		M3renameHEffect3d
//////////////////////////////////////////////////////////////////////////////////////////////
/// fun [S3d HEffect3d S] I
int M3renameHEffect3d(mmachine m)
{
    MMpull(m);
    MMpull(m);
    MMset(m,0,NIL);
	return 0;
}


/////////////////////////////////////////////////////// DEFINITIONS
#define NPCLPKG 59

char* PCLname [ NPCLPKG ] = 
{
	"HPart3d",							// HPart3d
	"HEffect3d",						// HEffect3d

	"EFFECT_CONSTANT",					// Constant force
	"EFFECT_ELECTRIC",					// Electric charge
	"EFFECT_MAGNETIC",					// Electric charge
	"EFFECT_HELICOID",					// Helicoidal trajectory
	"EFFECT_CHAOTIC0",					// Chaotic influance
	"EFFECT_PLANCOLL",					// Helicoidal trajectory
	"EFFECT_CHAOTIC1",					// Chaotic influance

	"VOLUME_CONE",		
	"VOLUME_SPHERE",	
	"VOLUME_PLAN",		
	"VOLUME_LINE",
	"VOLUME_CYLINDER",
	"VOLUME_DISC",		
	"VOLUME_BOX",
	
	"PCL_ACTIVE",		
	"PCL_ENABLE",		
	"PCL_RESTART",
	"PCL_DISABLE",
	
	"PCL_BILLBOARD",
	"PCL_RAINBOW",
	"PCL_INFINIT",

	"make_rgba",						// make_rgba,
	"get_rgba",							// get_rgba,

	"M3createEmitter",					// M3createEmitter
	"M3setEmitter",						// M3setEmitter
	"M3getEmitter",						// M3getEmitter
	"M3setEmitterState",				// M3setEmitterState
	"M3getEmitterState",				// M3getEmitterState
	"M3setEmitterTimestep",				// M3setEmitterTimestep
	"M3getEmitterTimestep",				// M3getEmitterTimestep
	"M3setParticleFather",				// M3setParticleFather
	"M3setEmitterSpeed",				// M3setEmitterSpeed
	"M3getEmitterSpeed",				// M3getEmitterSpeed

	"M3createParticle",					// M3createParticle
	"M3setParticle",					// M3setParticle
	"M3getParticle",					// M3getParticle
	"M3setParticleColors",				// M3setParticleColors
	"M3getParticleColors",				// M3getParticleColors,

	"M3setParticleSizes",				// M3setParticleSizes
	"M3getParticleSizes",				// M3getParticleSizes,
	"M3setParticleSpins",				// M3setParticleSpins
	"M3getParticleSpins",				// M3getParticleSpins,

	"M3linkParticleList",				// M3linkParticleList
	"M3getLinkedParticleList",			// M3getLinkedParticleList

	"M3createEffect",					// M3createEffect
	"M3setEffect",						// M3setEffect
	"M3getEffect",						// M3getEffect
	"M3linkEffectList",					// M3linkEffectList
	"M3getLinkedEffectList",			// M3getLinkedEffectList

	"M3HPart3dName",					// M3HPart3dName
	"M3renameHPart3d",					// M3renameHPart3d
	"M3delPart3d",						// M3delPart3d
	"M3getHPart3d",						// M3getHPart3d
	
	"M3HEffect3dName",					// M3HEffect3dName
	"M3renameHEffect3d",				// M3renameHEffect3d
	"M3delEffect3d",					// M3delEffect3d
	"M3getHEffect3d",					// M3getHEffect3d	
} ;

char * PCLtype [ NPCLPKG ] = 
{
	NULL,													// HPart3d
	NULL,													// HEffect3d

	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",
	"I",

	"fun [I I I I] I",										// make_rgba,
	"fun [I] [I I I I]",									// get_rgba,

	"fun [S3d I F [I [F F F] [F F F]]] H3d",				// M3createEmitter
	"fun [S3d H3d I F [I [F F F] [F F F]]] I",				// M3setEmitter
	"fun [S3d H3d] [I F [I [F F F] [F F F]]]",				// M3getEmitter
	"fun [S3d H3d I] I",									// M3setEmitterState
	"fun [S3d H3d] I",										// M3getEmitterState
	"fun [S3d H3d F] F",									// M3setEmitterTimestep
	"fun [S3d H3d] F",										// M3getEmitterTimestep
	"fun [S3d H3d H3d] I",									// M3setParticleFather
	"fun [S3d H3d [F F F]] I",								// M3setEmitterSpeed
	"fun [S3d H3d] [F F F]",								// M3getEmitterSpeed

	"fun [S3d H3d I F F F F F F] HPart3d",					// M3createParticle
	"fun [S3d HPart3d H3d I F F F F F F] I",				// M3setParticle
	"fun [S3d HPart3d] [H3d I F F F F F F] I",				// M3getParticle
	"fun [S3d HPart3d [[I F] r1]] I",						// M3setParticleColors
	"fun [S3d HPart3d]	[[I F] r1]",						// M3getParticleColors,

	"fun [S3d HPart3d [[F F] r1]] I",						// M3setParticleSizes
	"fun [S3d HPart3d]	[[F F] r1]",						// M3getParticleSizes
	"fun [S3d HPart3d [[F F] r1]] I",						// M3setParticleSpins
	"fun [S3d HPart3d]	[[F F] r1]",						// M3getParticleSpins


	"fun [S3d H3d [HPart3d r1]] I",							// M3linkParticleList
	"fun [S3d H3d] [HPart3d r1]",							// M3getLinkedParticleList

	"fun [S3d I [F F F] [F F F] [F F F]] HEffect3d",		// M3createEffect
	"fun [S3d HEffect3d I [F F F] [F F F] [F F F]]	I",		// M3setEffect
	"fun [S3d HEffect3d] [I [F F F] [F F F] [F F F]]",		// M3getEffect
	"fun [S3d H3d [HEffect3d r1]] I",						// M3linkEffectList
	"fun [S3d H3d] [HEffect3d r1]",							// M3getLinkedEffectList

	"fun [S3d HPart3d] S",									// M3HPart3dName
	"fun [S3d HPart3d S] I",								// M3renameHPart3d
	"fun [S3d HPart3d] I",									// M3delPart3d
	"fun [S3d S] HPart3d",									// M3getHPart3d
	
	"fun [S3d HEffect3d] S",								// M3HEffect3dName
	"fun [S3d HEffect3d S] I",								// M3renameHEffect3d
	"fun [S3d HEffect3d] I",								// M3delEffect3d
	"fun [S3d S] HEffect3d",								// M3getHEffect3d	
} ;


int PCLnarg [ NPCLPKG ] = 
{
	TYPTYPE,			// HPart3d
	TYPTYPE,			// HEffect3d


	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,
	TYPVAR,

	4,					// make_rgba,
	1,					// get_rgba,

	4,					// M3createEmitter
	5,					// M3setEmitter
	2,					// M3getEmitter
	3,					// M3setEmitterState
	2,					// M3getEmitterState
	3,					// M3setEmitterTimestep
	2,					// M3getEmitterTimestep
	3,					// M3setParticleFather
	3,					// M3setEmitterSpeed
	2,					// M3getEmitterSpeed

	9,					// M3createParticle
	10,					// M3setParticle
	2,					// M3getParticle
	3,					// M3setParticleColors
	2,					// M3getParticleColors,

	3,					// M3setParticleSizes
	2,					// M3getParticleSizes,
	3,					// M3setParticleSpins
	2,					// M3getParticleSpins,

	3,					// M3linkParticleList
	2,					// M3getLinkedParticleList

	5,					// M3createEffect
	6,					// M3setEffect
	2,					// M3getEffect
	3,					// M3linkEffectList
	2,					// M3getLinkedEffectList

	2,					// M3HPart3dName
	3,					// M3renameHPart3d
	2,					// M3delPart3d
	2,					// M3getHPart3d
	
	2,					// M3HEffect3dName
	3,					// M3renameHEffect3d
	2,					// M3delEffect3d
	2,					// M3getHEffect3d
};


int (*PCLfun[NPCLPKG])(mmachine m)= 
{
	NULL,
	NULL,

	(int (*)(struct Mmachine *))2,				// Constant force			0x000001
	(int (*)(struct Mmachine *))4,				// Electric charge			0x000002
	(int (*)(struct Mmachine *))6,				// Magnetic charge			0x000003
	(int (*)(struct Mmachine *))8,				// Helicoidal trajectory	0x000004
	(int (*)(struct Mmachine *))10,			// Chaotic influance		0x000005
	(int (*)(struct Mmachine *))12,			// Helicoidal trajectory	0x000006
	(int (*)(struct Mmachine *))14,			// Chaotic influance		0x000007

	(int (*)(struct Mmachine *))2,				// VOLUME_CONE"
	(int (*)(struct Mmachine *))4,				// VOLUME_SPHERE"
	(int (*)(struct Mmachine *))6,				// VOLUME_PLAN"		
	(int (*)(struct Mmachine *))8,				// VOLUME_LINE"
	(int (*)(struct Mmachine *))10,			// VOLUME_CYLINDER"
	(int (*)(struct Mmachine *))12,			// VOLUME_DISC"
	(int (*)(struct Mmachine *))14,			// VOLUME_BOX"

	(int (*)(struct Mmachine *))32,			// PCL_ACTIVE",	
	(int (*)(struct Mmachine *))2,				// PCL_ENABLE",	
	(int (*)(struct Mmachine *))6,				// PCL_RESTART",
	(int (*)(struct Mmachine *))4,				// PCL_DISABLE",

	(int (*)(struct Mmachine *))2,				// PCL_BILLBOARD
	(int (*)(struct Mmachine *))32,			// PCL_RAINBOW
	(int (*)(struct Mmachine *))512,			// PCL_INFINIT

	make_rgba,						// make_rgba
	get_rgba,						// get_rgba,

	M3createEmitter,				// M3createEmitter
	M3setEmitter,					// M3setEmitter
	M3getEmitter,					// M3getEmitter
	M3setEmitterState,				// M3setEmitterState
	M3getEmitterState,				// M3getEmitterState
	M3setEmitterTimestep,			// M3setEmitterTimestep
	M3getEmitterTimestep,			// M3getEmitterTimestep
	M3setParticleFather,			// M3setParticleFather
	M3setEmitterSpeed,				// M3setEmitterSpeed
	M3getEmitterSpeed,				// M3getEmitterSpeed

	M3createParticle,				// M3createParticle
	M3setParticle,					// M3setParticle
	M3getParticle,					// M3getParticle
	M3setParticleColors,			// M3setParticleColors
	M3getParticleColors,			// M3getParticleColors,

	M3setParticleSizes,				// M3setParticleSizes
	M3getParticleSizes,				// M3getParticleSizes
	M3setParticleSpins,				// M3setParticleSpins
	M3getParticleSpins,				// M3getParticleSpins


	M3linkParticleList,				// M3linkParticleList
	M3getLinkedParticleList,		// M3getLinkedParticleList

	M3createEffect,					// M3createEffect
	M3setEffect,					// M3setEffect
	M3getEffect,					// M3getEffect
	M3linkEffectList,				// M3linkEffectList
	M3getLinkedEffectList,			// M3getLinkedEffectList

	M3HPart3dName,					// M3HPart3dName
	M3renameHPart3d,				// M3renameHPart3d
	M3delPart3d,					// M3delPart3d
	M3getHPart3d,					// M3getHPart3d
	
	M3HEffect3dName,				// M3HEffect3dName
	M3renameHEffect3d,				// M3renameHEffect3d
	M3delEffect3d,					// M3delEffect3d
	M3getHEffect3d,					// M3getHEffect3d
};


extern "C" int SCOLloadZooParticle(mmachine m)
{
	return PKhardpak(m,"ParticleEngine",NPCLPKG,PCLname,PCLfun,PCLnarg,PCLtype);
}
