Ohhhh!!! this is a lot like the snowflakes I made for a stage...
inside a txt file I have this... (I hope it's easy to understand... those are basically arrays for each snowflake... this makes 9 snowflakes but it's easy to make more by just adding to the arrays)
let rotxarr=[rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359)];
let rotyarr=[rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359)];
let rotzarr=[rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359), rand(0, 359)];
let rotxbarr=[rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3)];
let rotybarr=[rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3)];
let rotzbarr=[rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3), rand(1, 3)];
let typearr=[rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8), rand_int(1, 8)];
let xarr=[-rand(210, 1000), -rand(300, 700), -rand(100, 500), -rand(210, 600), -rand(150, 800), -rand(500, 890), -rand(40, 100), -rand(50, 300), -rand(60, 300)];
let yarr=[rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220), rand(150, 220)];
let zarr=[rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600), rand(0, 600)];
let xmovarr=[-rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2)];
let ymovarr=[-rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2), -rand(0.5, 2)];
let zmovarr=[-rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2), -rand(1, 2)];
sub snowflake
{
ascent(i in 0..9)
{
let rotx=rotxarr[i]; //setting variables for each individual snowflake
let roty=rotxarr[i];
let rotz=rotxarr[i];
let rotxb=rotxbarr[i];
let rotyb=rotybarr[i];
let rotzb=rotzbarr[i];
let type=typearr[i];
let x=xarr[i];
let y=yarr[i];
let z=zarr[i];
let xmov=xmovarr[i];
let ymov=ymovarr[i];
let zmov=zmovarr[i];
SetTexture(a_img_snow);
if(type<=3) //I had different snowflakes so I randomized them instead of just using one flake design
{
SetGraphicRect(type*89-89, 0, type*89, 86);
}else if(type<=6){
SetGraphicRect((type-4)*89, 86, (type-3)*89, 172);
}else{
SetGraphicRect((type-7)*89, 172, (type-6)*89, 259);
}
SetGraphicScale(1, 1);
SetGraphicAngle(rotx, roty, rotz);
DrawGraphic3D(x, y, z);
rotxarr[i]=rotx+rotxb;
rotyarr[i]=roty+rotyb;
rotzarr[i]=rotz+rotzb;
xarr[i]=x+xmov;
yarr[i]=y+ymov;
zarr[i]=z+zmov;
if(y<4) //if the flake has reached underground, return it to a random position at the top
{
yarr[i]=rand(150, 220);
xarr[i]=-rand(100, 1000);
zarr[i]=rand(0, 1000);
}
}
}
then just load the graphic in your script, use #include_function and put snowflake; somewhere in @BackGround...