//
void LB_spawn(VECTOR* Start, VECTOR* Finish, long Div, float Branch, long Depth, long Size, COLOR* Core, COLOR* Flare, var Seed)
{ if(Div<3) return;
if(!Seed) Seed = timer();
VECTOR A, B, C, D, tmpV, corec, flarec, *fine=0, *crude=0; vec_zero(flarec);
vec_set(A, Start); vec_set(B, Finish); vec_set(corec, Core);
if(Flare) vec_set(flarec, Flare);
wait(1);
long i, cnt, seg_size = vec_dist(A,B)/Div; random_seed(Seed);
LB_divide(A, B, Div, vec_dist(A,B)/(Div+1), crude);
me = ent_create(NULL, NULL, NULL); me.skill2 = Size;
vec_set(me.skill3, corec); vec_set(me.skill6, flarec);
for(i=1; i<Div; i++)
{ LB_divide(crude[i-1],crude[i],Div/2,vec_dist(crude[i-1],crude[i])/Div/2+1,fine);
for(cnt=1; cnt<(Div/2); cnt++)
{ vec_set(tmpV, fine[cnt]); vec_sub(tmpV, fine[cnt-1]);
if(vec_length(tmpV))
vec_scale(tmpV, vec_length(tmpV)/vec_length(tmpV));
if(vec_length(flarec)) effect(LB_segment_flare, 1, fine[cnt-1], tmpV);
effect(LB_segment_core, 1, fine[cnt-1], tmpV); }
if((Depth>1)&&(random(1)<Branch)&&(i<(Div-1)))
{ vec_diff(C, crude[i], crude[i-1]);
vec_diff(D, crude[i], crude[i+1]);
vec_lerp(tmpV, D, C, random(1)+0.35);
vec_normalize(tmpV, random(seg_size*(Div-i))*0.6); vec_add(tmpV,crude[i]);
LB_spawn(crude[i], tmpV,Div*0.6,Branch,Depth-1,Size*0.6, corec, flarec, Seed+random(15));
} }
wait(1); ent_remove(me); free(crude); free(fine);
}
//