function buildDj01 {
	makedowntown(0,0,0,0,0,0);
	makedowntownfog(0,0,-1,0,0,0,true);
	makedowntownfog(0,0,-1,0,0,0,false);
}

function buildDj02 {
	makefog(0,0,-512,30,10,10);

	// covers
	makestraat(-4048,-352,-22528,90,0,0,straat3);
	makestraat(-4048,-352,-18432,90,0,0,straat3);
	makestraat(-4048,-352,-14336,90,0,0,straat3);
	makestraat(-4048,-352,-10240,90,0,0,straat3);
	makestraat(-4048,-352,-6144,90,0,0,straat3);
	makestraat(-4048,-352,-2048,90,0,0,straat3);

	makestraat(4048,-352,-22528,90,0,0,straat3);
	makestraat(4048,-352,-18432,90,0,0,straat3);
	makestraat(4048,-352,-14336,90,0,0,straat3);
	makestraat(4048,-352,-10240,90,0,0,straat3);
	makestraat(4048,-352,-6144,90,0,0,straat3);
	makestraat(4048,-352,-2048,90,0,0,straat3);	
	
	// real streets
	makestraat(-2048,-352,-22528,270,0,0,straat3);
	makestraat(-2048,-352,-18432,270,0,0,straat2);
	makestraat(-2048,-352,-14336,270,0,0,straat);
	makestraat(-2048,-352,-10240,270,0,0,straat3);
	makestraat(-2048,-352,-6144,270,0,0,straat2);
	makestraat(-2048,-352,-2048,270,0,0,straat);

	makestraat(2048,-352,-22528,90,180,0,straat3);
	makestraat(2048,-352,-18432,90,180,0,straat2);
	makestraat(2048,-352,-14336,90,180,0,straat);
	makestraat(2048,-352,-10240,90,180,0,straat3);
	makestraat(2048,-352,-6144,90,180,0,straat2);
	makestraat(2048,-352,-2048,90,180,0,straat);
	
	makestraat(0,-352,-22528,90,180,0,road3);
	makestraat(0,-352,-18432,90,180,0,road);
	makestraat(0,-352,-14336,90,180,0,road2);
	makestraat(0,-352,-10240,90,180,0,road3);
	makestraat(0,-352,-6144,90,180,0,road);
	makestraat(0,-352,-2048,90,180,0,road2);	
	
	// cross road
	makestraat(-4096,-352,-11264,90,0,90,road3);
	makestraat(-3072,-352,-11264,90,0,90,road3);

	makestraat(4096,-352,-11264,90,0,90,road3);
	makestraat(3072,-352,-11264,90,0,90,road3);	
	
	makekruis(0,-351,-11264,90,0,0);
	makekruis(0,-351,-23552,90,0,0);	
	
	// flats & apartments
	makeflat(-3328,128,-20480,0,90,0);	
	makeflat(-2048,128,-20480,0,90,0);
	makeflat(-3328,128,-8192,0,90,0);	
	makeflat(-2048,128,-8192,0,90,0);
	makeflat(4608,128,-20480,0,90,0);	
	makeflat(3072,128,-20480,0,90,0);
	makeflat(4608,128,-8192,0,90,0);	
	makeflat(3072,128,-8192,0,90,0);
	
	makeapart(-1536,128,-16384,0,90,0);
	makeapart(-1536,128,-4096,0,90,0);
	makeapart(2560,128,-16384,0,90,0);
	makeapart(2560,128,-4096,0,90,0);	

	makeflat(-3328,128,-13312,0,90,0);	
	makeflat(-2048,128,-13312,0,90,0);
	makeflat(-3328,128,-1024,0,90,0);	
	makeflat(-2048,128,-1024,0,90,0);
	makeflat(4608,128,-13312,0,90,0);
	makeflat(3072,128,-13312,0,90,0);	
	makeflat(4608,128,-1024,0,90,0);	
	makeflat(3072,128,-1024,0,90,0);	

	// Sky lights
	makeattentieflare(-2048,4736,-21504);
	makeattentieflare(-2048,4736,-19456);
	makeattentieflare(-2048,4736,-9216);
	makeattentieflare(-2048,4736,-7168);
	makeattentieflare(-4352,4736,-21504);
	makeattentieflare(-4352,4736,-19456);
	makeattentieflare(-4352,4736,-9216);
	makeattentieflare(-4352,4736,-7168);
	makeattentieflare(-2048,4736,-14336);
	makeattentieflare(-2048,4736,-12288);
	makeattentieflare(-2048,4736,-2048);	
	makeattentieflare(-2048,4736,0);	
	makeattentieflare(-4352,4736,-14336);
	makeattentieflare(-4352,4736,-12288);
	makeattentieflare(-4352,4736,-2048);	
	makeattentieflare(-4352,4736,0);		
	
	makeattentieflare(2048,4736,-21504);
	makeattentieflare(2048,4736,-19456);
	makeattentieflare(2048,4736,-9216);
	makeattentieflare(2048,4736,-7168);
	makeattentieflare(4480,4736,-21504);
	makeattentieflare(4480,4736,-19456);
	makeattentieflare(4480,4736,-9216);
	makeattentieflare(4480,4736,-7168);
	makeattentieflare(2048,4736,-14336);
	makeattentieflare(2048,4736,-12288);
	makeattentieflare(2048,4736,-2048);	
	makeattentieflare(2048,4736,0);	
	makeattentieflare(4480,4736,-14336);
	makeattentieflare(4480,4736,-12288);
	makeattentieflare(4480,4736,-2048);	
	makeattentieflare(4480,4736,0);		
	
	// city lanterns
	makedjlantern(-1024,1024,-17408,255,255,32);
	makedjlantern(-768,896,-17408,255,32,32);
	makedjlantern(-512,832,-17408,96,96,255);
	makedjlantern(-256,768,-17408,255,255,32);
	makedjlantern(0,736,-17408,255,32,32);
	makedjlantern(1024,1024,-17408,96,96,255);
	makedjlantern(768,896,-17408,255,32,32);
	makedjlantern(512,832,-17408,255,255,32);
	makedjlantern(256,768,-17408,96,96,255);	

	makedjlantern(-1024,1024,-14336,255,255,32);
	makedjlantern(-768,896,-14336,255,32,32);
	makedjlantern(-512,832,-14336,96,96,255);
	makedjlantern(-256,768,-14336,255,255,32);
	makedjlantern(0,736,-14336,255,32,32);
	makedjlantern(1024,1024,-14336,96,96,255);
	makedjlantern(768,896,-14336,255,32,32);
	makedjlantern(512,832,-14336,255,255,32);
	makedjlantern(256,768,-14336,96,96,255);		
	
	makedjlantern(-1024,1024,-5120,255,255,32);
	makedjlantern(-768,896,-5120,255,32,32);
	makedjlantern(-512,832,-5120,96,96,255);
	makedjlantern(-256,768,-5120,255,255,32);
	makedjlantern(0,736,-5120,255,32,32);
	makedjlantern(1024,1024,-5120,96,96,255);
	makedjlantern(768,896,-5120,255,32,32);
	makedjlantern(512,832,-5120,255,255,32);
	makedjlantern(256,768,-5120,96,96,255);		
	
	makedjlantern(-1024,1024,-2048,255,255,32);
	makedjlantern(-768,896,-2048,255,32,32);
	makedjlantern(-512,832,-2048,96,96,255);
	makedjlantern(-256,768,-2048,255,255,32);
	makedjlantern(0,736,-2048,255,32,32);
	makedjlantern(1024,1024,-2048,96,96,255);
	makedjlantern(768,896,-2048,255,32,32);
	makedjlantern(512,832,-2048,255,255,32);
	makedjlantern(256,768,-2048,96,96,255);	
	
	// flares for the lanterns
	makeflare(-1024,1024,-17408,5,255,255,32,80,true);
	makeflare(-768,896,-17408,5,255,32,32,80,true);
	makeflare(-512,832,-17408,5,96,96,255,80,true);
	makeflare(-256,768,-17408,5,255,255,32,80,true);
	makeflare(0,736,-17408,5,255,32,32,80,true);	
	makeflare(1024,1024,-17408,5,32,32,255,80,true);
	makeflare(768,896,-17408,5,255,32,32,80,true);
	makeflare(512,832,-17408,5,255,255,32,80,true);
	makeflare(256,768,-17408,5,32,32,255,80,true);
	
	makeflare(-1024,1024,-14336,5,255,255,32,80,true);
	makeflare(-768,896,-14336,5,255,32,32,80,true);
	makeflare(-512,832,-14336,5,96,96,255,80,true);
	makeflare(-256,768,-14336,5,255,255,32,80,true);
	makeflare(0,736,-14336,5,255,32,32,80,true);	
	makeflare(1024,1024,-14336,5,32,32,255,80,true);
	makeflare(768,896,-14336,5,255,32,32,80,true);
	makeflare(512,832,-14336,5,255,255,32,80,true);
	makeflare(256,768,-14336,5,32,32,255,80,true);
	
	makeflare(-1024,1024,-5120,5,255,255,32,80,true);
	makeflare(-768,896,-5120,5,255,32,32,80,true);
	makeflare(-512,832,-5120,5,96,96,255,80,true);
	makeflare(-256,768,-5120,5,255,255,32,80,true);
	makeflare(0,736,-5120,5,255,32,32,80,true);	
	makeflare(1024,1024,-5120,5,32,32,255,80,true);
	makeflare(768,896,-5120,5,255,32,32,80,true);
	makeflare(512,832,-5120,5,255,255,32,80,true);
	makeflare(256,768,-5120,5,32,32,255,80,true);

	makeflare(-1024,1024,-2048,5,255,255,32,80,true);
	makeflare(-768,896,-2048,5,255,32,32,80,true);
	makeflare(-512,832,-2048,5,96,96,255,80,true);
	makeflare(-256,768,-2048,5,255,255,32,80,true);
	makeflare(0,736,-2048,5,255,32,32,80,true);	
	makeflare(1024,1024,-2048,5,32,32,255,80,true);
	makeflare(768,896,-2048,5,255,32,32,80,true);
	makeflare(512,832,-2048,5,255,255,32,80,true);
	makeflare(256,768,-2048,5,32,32,255,80,true);
		
	// traffic lights and deco
	makestoplicht(256,512,-21504,180);
	makestoplicht(512,512,-21504,180);
	makestoplichtpaal(0,128,-21632,0,90,0);
	
	makestoplicht(-256,512,-13312,0);
	makestoplicht(-512,512,-13312,0);
	makestoplichtpaal(0,128,-13312,0,90,0);
	
	makestoplicht(256,512,-9216,180);
	makestoplicht(512,512,-9216,180);	
	makestoplichtpaal(0,128,-9344,0,90,0);
	
	makestoplicht(-256,512,-1024,0);
	makestoplicht(-512,512,-1024,0);
	makestoplichtpaal(0,128,-1024,0,90,0);

	makebord(384,512,-13282,0,0,0);
	makebord(384,512,-1000,0,0,0);
	
	maketelbox(1280,-32,-21504);
	maketelbox(1280,-32,-9216);	
	
	makestreetlant(-1152,0,-19528,0,0,0);
	makestreetlant(-1152,0,-14336,0,0,0);
	makestreetlant(-1152,0,-7168,0,0,0);
	makestreetlant(-1152,0,-2048,0,0,0);

	makestreetlant(1152,0,-19528,0,180,0);
	makestreetlant(1152,0,-14336,0,180,0);
	makestreetlant(1152,0,-7168,0,180,0);
	makestreetlant(1152,0,-2048,0,180,0);	
	
	/*
	// normal traffic
	makecar(768,-352,0,0,180,0,"normal");
	makecar(256,-352,1536,0,180,0,"race");

	// opposite traffic
	makecar(-300,-352,-22000,0,0,0,"race");
	
	makecar(-712,-352,-24000,0,0,0,"mitsu");
	makecar(-712,-352,-20000,0,0,0,"mitsu");
	*/
}

function buildDj03 {
	makefog(0,0,-512,30,10,10);

	// flats & apartments
	makeflat(-3328,128,-8192,0,90,0);	
	makeflat(-2048,128,-8192,0,90,0);
	makeflat(4608,128,-8192,0,90,0);	
	makeflat(3072,128,-8192,0,90,0);
	
	makeapart(-1536,128,-4096,0,90,0);
	makeapart(2560,128,-4096,0,90,0);	
	
	// backside wall for fog.
	makebeton(0,-352,-14336,0,180,0);
	
	makehallfloor(0,-352,-8254,90,0,0);
	makehallceiling(0,352,-8254,90,0,0);
	
	// hallway for the dome
	makehallway(384,0,-8256,0,90,0);
	makehallway(-416,0,-8256,0,90,0);
	makehallwaylay(384,0,-8256,0,90,0);
	makehallwaylay(-416,0,-8256,0,90,0);
	
	// walls for the dome
	makebeton(0,-352,-4160,90,180,0);
	
	makewallentry(0,128,-6200,0,180,0);
	makewallpiece(-1536,128,-6200,0,180,0);
	makewallpiece(1536,128,-6200,0,180,0);
	makewallpiece2(-1024,1024,-6200,0,180,0);
	makewallpiece2(1024,1024,-6200,0,180,0);
	
	// doors for the dome
	makedomedoor(384,-48,-6200,0,180,0,"left");
	makedomedoor(-384,-48,-6200,0,0,0,"right");
	
	// city lanterns
	makedjlantern(-1024,1024,-5120,255,255,32);
	makedjlantern(-768,896,-5120,255,32,32);
	makedjlantern(-512,832,-5120,96,96,255);
	makedjlantern(-256,768,-5120,255,255,32);
	makedjlantern(0,736,-5120,255,32,32);
	makedjlantern(1024,1024,-5120,96,96,255);
	makedjlantern(768,896,-5120,255,32,32);
	makedjlantern(512,832,-5120,255,255,32);
	makedjlantern(256,768,-5120,96,96,255);		
		
	// flares for the lanterns
	makeflare(-1024,1024,-5120,5,255,255,32,80,true);
	makeflare(-768,896,-5120,5,255,32,32,80,true);
	makeflare(-512,832,-5120,5,96,96,255,80,true);
	makeflare(-256,768,-5120,5,255,255,32,80,true);
	makeflare(0,736,-5120,5,255,32,32,80,true);	
	makeflare(1024,1024,-5120,5,32,32,255,80,true);
	makeflare(768,896,-5120,5,255,32,32,80,true);
	makeflare(512,832,-5120,5,255,255,32,80,true);
	makeflare(256,768,-5120,5,32,32,255,80,true);	
}

function buildDj04 {
	makebossvloer(0,-256,0,90,0,0);

	makebosslay(-1537,128,0,0,270,0,fogRed,fogGreen,fogBlue);
	makebosslay(1537,128,0,0,90,0,fogRed,fogGreen,fogBlue);
	makebosslay(0,128,1537,0,0,0,fogRed,fogGreen,fogBlue);
	makebosslay(0,128,-2049,0,180,0,fogRed,fogGreen,fogBlue);

	makebossmuur(1536,128,0,0,90,0);
	makebossmuur(-1536,128,0,0,90,0);
	makebossmuur(0,128,1536,0,0,0);
	makebossmuur(0,128,-2048,0,0,0);
	
	makebossplafond(-1536,256,0,90,0,180);
	makebossplafond(1536,256,0,90,0,180);
	makebossplafond(0,256,1536,90,0,90);

	makebosscrowd(-1281,458,1344,90,true);
	makebosscrowd(-1281,458,448,90,false);
	makebosscrowd(-1281,458,-448,90,true);
	makebosscrowd(-1281,458,-1344,90,false);
	makebosscrowd(1281,458,1344,90,true);
	makebosscrowd(1281,458,448,90,false);
	makebosscrowd(1281,458,-448,90,true);
	makebosscrowd(1281,458,-1344,90,false);
	makebosscrowd(1344,458,1281,180,true);
	makebosscrowd(448,458,1281,180,false);
	makebosscrowd(-448,458,1281,180,true);
	makebosscrowd(-1344,458,1281,180,false);

	makebosscrowd(-1281,-64,1344,90,true);
	makebosscrowd(-1281,-64,448,90,false);
	makebosscrowd(-1281,-64,-448,90,true);
	makebosscrowd(-1281,-64,-1344,90,false);
	makebosscrowd(1281,-64,1344,90,true);
	makebosscrowd(1281,-64,448,90,false);
	makebosscrowd(1281,-64,-448,90,true);
	makebosscrowd(1281,-64,-1344,90,false);
	makebosscrowd(1344,-64,1281,180,true);
	makebosscrowd(-1344,-64,1281,180,false);
			
	makebossbalkon(-1280,320,0,0,90,0);
	makebossbalkon(1280,320,0,0,90,0);
	makebossbalkon(0,320,1280,0,180,0);	
	
	makebossplafond2(-1024,832,0,45,90,0);	
	makebossplafond2(1024,832,0,45,270,0);	
	makebossplafond2(0,832,-1536,45,0,0);	
	makebossplafond2(0,832,1024,45,180,0);		
	
	makespot(-192,640,-1024,0,0,0,"rood",true);
	makespot(-64,640,-1024,0,0,0,"blauw",false);
	makespot(64,640,-1024,0,0,0,"groen",false);
	makespot(192,640,-1024,0,0,0,"geel",true);
	makespot(-192,512,-1024,0,0,0,"blauw",false);
	makespot(-64,512,-1024,0,0,0,"rood",true);
	makespot(64,512,-1024,0,0,0,"geel",true);
	makespot(192,512,-1024,0,0,0,"groen",false);	
	
	// links
	makespot(-1024,640,-192,0,90,0,"rood",true);
	makespot(-1024,640,-64,0,90,0,"blauw",false);
	makespot(-1024,640,64,0,90,0,"groen",false);
	makespot(-1024,640,192,0,90,0,"geel",true);
	makespot(-1024,512,-192,0,90,0,"blauw",false);
	makespot(-1024,512,-64,0,90,0,"rood",true);
	makespot(-1024,512,64,0,90,0,"geel",true);
	makespot(-1024,512,192,0,90,0,"groen",false);

	// rechts
	makespot(1024,640,-192,0,270,0,"rood",true);
	makespot(1024,640,-64,0,270,0,"blauw",false);
	makespot(1024,640,64,0,270,0,"groen",false);
	makespot(1024,640,192,0,270,0,"geel",true);
	makespot(1024,512,-192,0,270,0,"blauw",false);
	makespot(1024,512,-64,0,270,0,"rood",true);
	makespot(1024,512,64,0,270,0,"geel",true);
	makespot(1024,512,192,0,270,0,"groen",false);	
}

// Traffic light blink handler
task stoplichtControl(obj2,obj3) {
	while(!Obj_IsDeleted(obj2)) {
		ObjSprite3D_SetSourceDestRect(obj2,160,0,240,238);
		ObjSprite3D_SetSourceDestRect(obj3,0,0,128,128);
		wait(60);
		ObjSprite3D_SetSourceDestRect(obj2,0,0,0,0);
		ObjSprite3D_SetSourceDestRect(obj3,0,0,0,0);
		wait(60);
	}
}

// Sky light blink handler
task attentieFlareControl(obj) {
	let c = 0;
	let alph = 255;
	while(!Obj_IsDeleted(obj)) {
		ObjRender_SetAlpha(obj,alph);
		alph = 255*sin(c)/2;
		c+=2;
		yield;
	}
}

// Car movement handler
task carMovement(obj,pz,ay) {
	let carZpos = pz;
	while(!Obj_IsDeleted(obj)) {
		if(ay == 180) { 
			ObjRender_SetZ(obj,ObjRender_GetZ(obj) - 12);
			if(ObjRender_GetZ(obj) < carZpos - 24000) { ObjRender_SetZ(obj,carZpos); } 
		}
		if(ay == 0) { 
				ObjRender_SetZ(obj,ObjRender_GetZ(obj) + 128);
				if(ObjRender_GetZ(obj) > -carZpos + 8196) { ObjRender_SetZ(obj,carZpos); } 
		}
		yield;
	}
}

// Police Car movement handler
task polMovement(obj,pz) {
	let carSway = 0;
	let carF = 0;
	ascent(i in 0..384) { 
		ObjRender_SetZ(obj,ObjRender_GetZ(obj) - 8);
		ObjRender_SetX(obj,ObjRender_GetX(obj)+carSway);
		carSway = 16*sin(carF)/8;
		carF+=1;		
		yield;
	}
	ascent(i in 0..360) { 
		ObjRender_SetX(obj,ObjRender_GetX(obj)+carSway);
		carSway = 16*sin(carF)/32;
		carF+=1;	
		yield;
	}
	ascent(i in 0..128) { 
		ObjRender_SetZ(obj,ObjRender_GetZ(obj) - 16);
		yield;	
	}
	Obj_Delete(obj);
}

// Entrance door listener
task entryDoorListener(obj,ay,side) {
	let doorAngle = ay;
	while(!isMutatingStage) { yield; } 
	loop(80) {
		if(side == "left") { doorAngle--; }
		if(side == "right") { doorAngle++; }
		ObjRender_SetAngleXYZ(obj,0,doorAngle,0);
		yield;
	}
}

task carPolAnim(obj2,obj3) {
	while(!Obj_IsDeleted(obj2) && !Obj_IsDeleted(obj3)) {
		ObjRender_SetScaleXYZ(obj2,2,2,0);
		ObjRender_SetScaleXYZ(obj3,0,0,0);
		wait(15);
		ObjRender_SetScaleXYZ(obj2,0,0,0);
		ObjRender_SetScaleXYZ(obj3,2,2,0);	
		wait(15);		
	}
} 