{CTZDS1}

paths {
    object = resources/objects/;
    gfx = resources/graphics/;
    misc = resources/misc/;
    sound = resources/sound/;
    definition = resources/scripts/definitions/;
    shaders = resources/shaders/;
    video = resources/video/;
}

system {
    start = 00:00:000;
    stop = 03:00:000;
    texture_compression = false;
}

screen {
    width = 800;
    height = 600;
    bpp = 32;
    fullscreen = 0;
    near = 1.0;
    far = 898.0;
}

sound {
    play = 1;
    file = 80s_contraz.mp3;
}

objects {
    ghettoobj = BlasterFinal.vbo;
    tvobj = tvfbx++.vbo;
    discoballA = discoball.vbo;
    discoballB = lightrays.vbo;
    discoballC = lightray_bottom.vbo;
    cube = unit_cube.vbo;
}

graphics {
    // Outrun
    treetex = palmtree2.png; // outrun
    outrunbg = outrunbg.png; // outrun
    car_straight = OutrunStraight.png;
    car_straight_up = OutrunUp.png;
    car_straight_down = OutrunDown.png;
    car_left = OutrunLeft.png;
    car_right = OutrunRight.png;
    tape1 = tape1.png;
    tape2 = tape2.png;
    tape3 = tape3.png;
    tape4 = tape4.png;
    glow = light2.png;
    tvframe = tvframe.png;
    scanlines = stripes3+.png;

    groundlight = light.png;
    contrazlogo = contrazlogo2.png;
    introtext = Introtext+.png;

    // Intro
    ctzlogo = ctzlogo.png;
    ctzlogobg = ctzlogobg.png;
    presents = presents.png;
    presentsbg = presentsbg.png;
    trashin87 = trashin87.png;
    trashin87bg = trashin87bg.png;

    // Creds
    credsbg = creditsbg+.png;
    gangster1 = gangster6.png;
    gangster2 = gangster7.png;
    gangster3 = gangster8.png;
    gangster4 = gangster9.png;
    gangster5 = gangster11-2.png;
    phlaton = phlaton.png;
    enex = enex.png;
    dran = dran.png;
    gloom = gloom.png;
    micro = micro.png;

    // PixelCarpet
    neonbabe = neonbabe.png;

    // NeonRibbon
    particletex2 = particle.png;
    particletex = star+.png;
    checkerfloor = checkerfloor.png;
//    ribbontexPink = ribbongradientPink.png;
//    ribbontexBlue = ribbongradientBlue.png;

    // OceanEffect
    beach = beachoverlay.png;
    reflection = oceanreflection.png, GL_TEXTURE_2D, GEN_MIPMAP;
    leaf1 = palmleaf1.png;
    leaf2 = palmleaf2.png;
    
    // Discoball
    discolight = gradient.png;
}

animation {
    ghetto1anim = ghetto_new.anim;
//    ghetto1anim = ghetto1.anim;
    ghetto2anim = ghetto2.anim;
    equalizeranim = equalizer.anim;
    equalizer2anim = equalizer2.anim;
//    pixelcarpetanim = pixelcarpet.anim;
    pixelcarpetanim = start_pixelcarpet.anim;
    pixelcarpet2anim = zoom_pixelcarpet.anim;
    ghettogreet1anim = ghettogreet1.anim;
    ghettogreet2anim = ghettogreet2.anim;
}

binary {
    roadmap = roadmap3.raw;
    greets_map = greets+.raw;
}

video {
    // nada
}

shaders {
    oceanshader = Oceanwaves;
    blend = screen;
    //bump = normalmap;
    particlespriteshader = particlesprite;
    bloom = bloom;
    vmeters = vmeters;
    texturephong = texturephong;
    light = light;
}

framebuffers {
    blendsource = 512,512,COLOR_BUFFER;
    blenddestination = 512,512,COLOR_BUFFER;
    mirror = 256,256,COLOR_BUFFER,DEPTH_BUFFER;
    offscreen = 256,256,COLOR_BUFFER,DEPTH_BUFFER;
    tmp1 = 1024,1024,COLOR_BUFFER,DEPTH_BUFFER;
    tmp2 = 1024,1024,COLOR_BUFFER;
    cube1 = 512,512,COLOR_BUFFER;
    cube2 = 512,512,COLOR_BUFFER;
    bloom = 512,512,COLOR_BUFFER; //,DEPTH_BUFFER;
}

// --------------------
//  Effects (timeline)
// --------------------
timeline {

// ---- Rolig intro - 00:00:00 - 00:34:00 (34s) - Introduction (Logos + credits) ----

    Checkpoint 00:00:00;
//    overlay.start(00:00:00, 99);

    // Contraz
    fade.start(00:00:00, 86);
    fade.fade(00:00:00, 00:01:00, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:01:00);

//	particles.start(00:00:00, 30, blenddestination);

    ctzlogo.start(00:00:00, 10, blendsource);
    ctzlogobg.start(00:00:00, 20, blenddestination);
    blend.start(00:00:00, 50);
    blend.setBuffers(00:00:00, blendsource, blenddestination);

    ctzlogobg.setScaleValue(00:00:00, 1.5, 1.5);
    ctzlogobg.setPosition(00:00:00, -0.2, 0.2, -1.2);
    ctzlogobg.moveTo(00:00:00, 00:08:00, 0.0, -0.0, -1.0);

    ctzlogo.setPosition(00:00:00, 10.0, 0.0, -8.0);
    ctzlogo.easeIn (00:00:500, 00:02:500,  0.0,  0.0, -1.0);
    ctzlogo.setRotation(00:01:00, 0.0, 0.0, 1.2);
    ctzlogo.easeOut(00:03:500, 00:04:500,  0.0, 0.0, -1.5);
    ctzlogo.easeIn (00:04:500, 00:05:500,  0.0,  0.0, -2.0);
    ctzlogo.easeOut(00:06:400, 00:06:900,  -5.0, 0.0, -2.0);
    ctzlogobg.easeOut(00:07:300, 00:07:800, -5.0, 0.0, -1.0);

    ctzlogo.stop(00:07:300);
    ctzlogobg.stop(00:08:300);
    blend.stop(00:07:300);
   // Checkpoint 00:07:000;
    // Presents
    presents.start(00:07:300, 10, blendsource);
    presentsbg.start(00:07:300, 20, blenddestination);
    blend.start(00:07:300, 50);
    blend.setBuffers(00:07:300, blendsource, blenddestination);

    presentsbg.setScaleValue(00:07:300, 1.5, 1.5);
    presentsbg.setPosition(00:07:300, 5.0, -0.2, -1.2);
    presentsbg.easeIn(00:07:300, 00:07:800, 0.2, -0.2, -1.2);
    presentsbg.moveTo(00:07:800, 00:17:000, 0.0, 0.0, -1.0);

    presents.setPosition(00:07:300, -14.0, 0.0, -10.0);
    fade.start(00:08:300, 86);
    fade.fade(00:08:300, 00:08:800, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:08:800);
    presents.easeIn (00:08:300, 00:09:300,  0.0,  0.0, -1.2);
    fade.start(00:09:300, 86);
    fade.fade(00:09:300, 00:09:800, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:09:800);	
    presents.setRotation(00:08:800, 0.0, 0.0, -0.2);
    fade.start(00:11:500, 86);
    fade.fade(00:11:500, 00:12:000, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:12:000);
    presents.easeOut(00:12:000, 00:13:00,  0.0, 0.0, -2.0);
    presents.easeIn (00:13:00, 00:14:00,  0.0,  0.0, -2.8);
    fade.start(00:13:700, 86);
    fade.fade(00:13:700, 00:14:200, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:14:200);
    presents.easeOut(00:16:000, 00:16:500,  5.0, 0.0, -2.8);
    fade.start(00:15:900, 86);
    fade.fade(00:15:900, 00:16:400, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:16:400);
    presentsbg.easeOut(00:16:500, 00:17:00, 5.0, 0.0, -1.0);

    presents.stop(00:17:00);
    presentsbg.stop(00:17:00);
    blend.stop(00:17:00);

    // Trashin' 87
    trashin87.start(00:17:00, 10, blendsource);
    trashin87bg.start(00:16:500, 20, blenddestination);
    blend.start(00:17:00, 50);
    blend.setBuffers(00:17:00, blendsource, blenddestination);

    trashin87bg.setScaleValue(00:16:500, 1.5, 1.5);
    trashin87bg.setPosition(00:16:500, -5.0, 0.0, -1.5);
    trashin87bg.easeIn(00:16:500, 00:17:00, 0.0, 0.0, -1.5);
    trashin87bg.moveTo(00:17:00, 00:21:500, 0.0, -0.5, -1.0);

    trashin87.setPosition(00:17:00, 0.0, 0.0, -0.5);
    trashin87.setRotation(00:17:400, 0.0, 0.0, 0.1);
    fade.start(00:18:100, 86);
    fade.fade(00:18:100, 00:18:600, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:18:600);
    trashin87.easeIn(00:17:00, 00:19:00,  0.0, 0.0, -2.0);
    fade.start(00:20:300, 86);
    fade.fade(00:20:300, 00:20:800, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:20:800);
    trashin87bg.easeOut(00:21:500, 00:22:00, 0.0, -5.0, -1.0);
    trashin87.easeOut(00:21:500, 00:22:00, 0.0, -5.0, -2.0);
    trashin87.stop(00:22:00);
    trashin87bg.stop(00:22:00);
    blend.stop(00:22:00);

    // Credits
    Checkpoint 00:21:500;
    credsbg1.start(00:21:500);
    credsbg1.setPosition(00:21:500, 0.0, 5.0, -1.0);
    credsbg1.easeIn(00:21:500, 00:22:00,  0.0, 0.0, -1.0);
    credsbg1.setPosition(00:22:00, 0.0, 0.0, -1.0);
    credsbg1.scrollTexture(00:22:000, 0.0001, 0.0);
    fade.start(00:22:500, 86);
    fade.fade(00:22:500, 00:23:000, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:23:000);
    gangster1.start(00:22:00, 80);
    gangster1.setPosition(00:22:00, 2.5, 0.0, -1.5);
    gangster1.easeIn (00:22:00, 00:24:00, 0.0, -0.3, -3.0);
    gangster1.easeOut (00:28:500, 00:32:700, 0.0, -0.6, -3.0);
    enex.start(00:22:00, 80);
    enex.setPosition(00:22:00, -2.5, 0.0, -1.5);
    enex.setScaleValue(00:22:00, 1.0, 0.25);
//    enex.easeIn (00:22:00, 00:24:00, 0.0, -1.5, -4.0);
    enex.easeIn (00:22:00, 00:24:00, 0.0, -2.0, -4.0);

    gangster2.start(00:23:00, 81);
    gangster2.setPosition(00:23:00, -2.5, 0.0, -1.5);
    gangster2.easeIn (00:23:00, 00:25:00, -0.6,  -0.1, -2.5);
    gangster2.easeOut (00:28:500, 00:32:700, -0.6,  -0.3, -2.5);
    micro.start(00:23:00, 81);
    micro.setPosition(00:23:00, 2.5, -2.0, -1.5);
    micro.setScaleValue(00:23:00, 1.0, 0.25);
//    micro.easeIn (00:23:00, 00:25:00, -1.2, -1.8, -4.0);
    micro.easeIn (00:23:00, 00:25:00, -1.2, -2.0, -4.0);

    gangster3.start(00:24:00, 82);
    gangster3.setPosition(00:24:00, 2.5, 0.0, -1.5);
    gangster3.easeIn (00:24:00, 00:26:00, 0.6, -0.2, -2.5);
    gangster3.easeOut (00:28:500, 00:32:700, 0.6, -0.4, -2.5);
    dran.start(00:24:00, 82);
    dran.setPosition(00:24:00, -2.5, -2.0, -1.5);
    dran.setScaleValue(00:24:00, 1.0, 0.25);
//    dran.easeIn (00:24:00, 00:26:00, 1.2, -1.8, -4.0);
    dran.easeIn (00:24:00, 00:26:00, 1.2, -2.0, -4.0);

    gangster4.start(00:25:00, 83);
    gangster4.setPosition(00:25:00, -2.5, 0.0, -1.5);
    gangster4.easeIn (00:25:00, 00:27:00, -1.4, -0.1, -2.2);
    gangster4.easeOut (00:28:500, 00:32:700, -1.4, -0.2, -2.2);
    phlaton.start(00:25:00, 83);
    phlaton.setPosition(00:25:00, -2.5, -2.0, -1.5);
    phlaton.setScaleValue(00:25:00, 1.0, 0.25);
    phlaton.easeIn (00:25:00, 00:27:00, -3.0, -2.0, -4.0);

    fade.start(00:24:700, 86);
    fade.fade(00:24:700, 00:25:200, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:25:200);

    gangster5.start(00:26:00, 84);
    gangster5.setPosition(00:26:00, 2.5, 0.0, -1.5);
    gangster5.easeIn (00:26:00, 00:28:00, 1.5, -0.1, -2.2);
    gangster5.easeOut (00:28:500, 00:32:700, 1.5, -0.2, -2.2);
    gloom.start(00:26:00, 84);
    gloom.setPosition(00:26:00, 2.5, -2.0, -1.5);
    gloom.setScaleValue(00:26:00, 1.0, 0.25);
    gloom.easeIn (00:26:00, 00:28:00, 2.8, -2.0, -4.0);

    fade.start(00:26:850, 86);
    fade.fade(00:26:850, 00:27:350, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:27:350);

    fade.start(00:29:050, 86);
    fade.fade(00:29:050, 00:29:550, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:29:550);

    fade.start(00:31:200, 86);
    fade.fade(00:31:200, 00:31:700, 0.6, 0.6, 0.6, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:31:700);
    
    credsbg1.setRenderTarget(00:33:400, tmp1);

    credsbg1.stop(00:34:400);    

    gangster1.easeOut(00:32:700, 00:33:200, 0.0, -3.3, -3.0);
    gangster1.stop(00:33:200);
    enex.easeOut(00:32:700, 00:33:200, 0.0, -3.5, -4.0);
    enex.stop(00:32:700);
    gangster2.easeOut(00:32:700, 00:33:200, -0.6,  -3.1, -2.5);
    gangster2.stop(00:33:200);
    micro.easeIn (00:32:700, 00:33:200, -1.2, -3.8, -4.0);
    micro.stop(00:33:200);
    gangster3.easeOut(00:32:700, 00:33:200, 0.6, -3.2, -2.5);
    gangster3.stop(00:33:200);
    dran.easeOut(00:32:700, 00:33:200, 1.2, -3.8, -4.0);
    dran.stop(00:33:200);
    gangster4.easeIn (00:32:700, 00:33:200, -1.4, -3.1, -2.2);
    gangster4.stop(00:33:200);
    phlaton.easeOut(00:32:700, 00:33:200, -3.0, -4.1, -4.0);
    phlaton.stop(00:33:200);
    gangster5.easeIn (00:32:700, 00:33:200, 1.5, -3.1, -2.2);
    gangster5.stop(00:33:200);
    gloom.easeOut(00:32:700, 00:33:200, 2.8, -4.1, -4.0);
    gloom.stop(00:33:200);

    Checkpoint 00:33:000;
// ---- Transition ----
    cubetrans.start(00:33:400, 20);
    cubetrans.setBuffers(00:33:400, tmp1, tmp2);
    cubetrans.easeIn(00:33:400, 00:33:900, 0.0, 0.0, -3.0);
    cubetrans.rotateTo(00:33:450, 00:34:250, 0.0, 90.0);
    cubetrans.easeOut(00:34:000, 00:34:400, 0.0, 0.0, 0.0);
    cubetrans.stop(00:34:400);

// ---- Base melody - 00:34:00 - 00:52:00 (18s) - Outrun Effect ----
    fade.start(00:34:400, 86);
    fade.fade(00:34:400, 00:34:900, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(00:34:900);
    tvframe.start(00:34:400, 80);
    scanlines.start(00:34:400, 70);

    outrun.start(00:33:400, 20, tmp2);
    outrun.softSpeed(00:33:400, 00:38:00,  0.002, 0.005);
    outrun.setRenderTarget(00:34:400, NULL);

    contrazlogo.start(00:40:00, 10);
    contrazlogo.setPosition(00:40:00, 0.0, 0.39, -1.0);
    contrazlogo.setScaleValue(00:40:00, 1.0, 0.2);
    contrazlogo.fadeUp(00:40:00, 00:41:00);

    introtext.start(00:42:000, 21);
    introtext.setPosition(00:42:00, 0.0, -3.0, -1.5);
    introtext.easeIn (00:42:00, 00:43:00, 0.0, -0.54, -1.5);
    introtext.easeOut(00:49:00, 00:50:00, 3.0, -0.54, -1.5);
    introtext.stop(00:59:00);

    contrazlogo.fadeDown(00:50:00, 00:51:00);
    contrazlogo.stop(00:51:00);

    outrun.softSpeed(00:50:00, 00:52:00,  0.005, 0.008);

// ---- Takeoff     - 00:52:00 - 01:09:00 (17s) - Start Outrun Turning and Hill Climbing ----
    outrun.car_texture(00:52:00, car_straight);
    outrun.softTurn (00:52:00, 00:53:00, 0.0, -6.0);
    outrun.car_texture(00:52:500, car_right);
    outrun.softTurn (00:54:00, 00:55:00, -6.0, 0.0);
    outrun.softHill (00:54:00, 00:55:00,  0.0,  -6.0);
    outrun.car_texture(00:54:500, car_straight_up);
    outrun.softSpeed(00:54:500, 00:59:00,  0.008, 0.012);
    outrun.softHill (00:59:00, 01:00:00,  -6.0,  0.0);
    outrun.car_texture(00:59:800, car_straight);
    outrun.softSpeed(00:59:000, 01:01:00,  0.012, 0.008);
    outrun.softTurn (01:01:00, 01:02:00, 0.0, 6.0);
    outrun.car_texture(01:01:500, car_left);
    outrun.softTurn (01:03:00, 01:04:00, 6.0, 0.0);
    outrun.car_texture(01:03:800, car_straight);
    outrun.softHill (01:05:00, 01:06:00, 0.0, -6.0);
    outrun.car_texture(01:05:500, car_straight_up);
    outrun.softHill (01:07:00, 01:08:00, -6.0, 0.0);
    outrun.car_texture(01:07:800, car_straight);

    outrun.setRenderTarget(01:09:900, tmp1);

    scanlines.stop(01:09:900);
    tvframe.stop(01:09:900);

// ---- Transition ----
// No need, zoom out transition in GhettoblasterEffect.
    fade.start(01:09:900, 86);
    fade.fade(01:09:900, 01:10:400, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(01:10:400);

    Checkpoint 01:07:00;
// ---- Roligere    - 01:09:900 - 01:27:00 (18s) - Ghettoblaster ----
//    ghettolayer.start(01:09:900, 50);
    ghetto.start(01:09:900);
	ghetto.setCasetteLocation(01:09:900, -99.2, 19.3, -36.2);
	ghetto.setPanelLocation(01:09:900, 26.0, 6.6, 0.5); //36.24);

    ghetto.noShowGreets(01:09:900);
    ghetto.setCameraAnim(01:09:900, ghetto1anim);
    ghetto.startCamera(01:09:900, 01:24:00);
//    ghetto.setCameraAnim(01:13:00, ghetto2anim);
//    ghetto.startCamera(01:18:00, 01:23:00);

    ghetto.stop(01:24:00);
    outrun.stop(01:24:00);

    fade.start(01:24:000, 99);
    fade.fade(01:24:000, 01:25:000, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(01:25:000);

    Checkpoint 01:20:00;
// ---- Transition - Equalizer ----
    equalizertrans.start(01:24:00, 50, tmp1);
    equalizertrans.setCameraAnim(01:24:000, equalizeranim);
    equalizertrans.startCamera(01:24:000, 01:27:400);
    bloom.start(01:24:000, 60);
	bloom.setBuffers(01:24:000, tmp1, bloom);
	bloom.setBrightness(01:24:000, -1.0);
	bloom.setContrast(01:24:000, 1.0);
	bloom.stop(01:27:400);
    equalizertrans.stop(01:27:400);

    fade.start(01:27:400, 99);
    fade.fade(01:27:400, 01:28:400, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(01:28:400);

    Checkpoint 01:27:00;
// ---- Takeoff     - 01:27:00 - 01:44:00 (17s) - Pixelcarpet ----
    neonbabe.start(01:27:400, 88);
    neonbabe.setPosition(01:27:400, -1.7, 0.0, -1.7);
	neonbabe.easeIn(01:27:400, 01:28:400, -0.7, 0.0, -1.7);
    neonbabe.fadeUp(01:27:400, 01:28:400);
    pixelcarpet.start(01:27:400, 87);
    pixelcarpet.setCameraAnim(01:27:400, pixelcarpetanim);
    pixelcarpet.startCamera(01:27:400, 01:44:900);
    frequency.start(01:27:400, 88);
    pixelcarpet.setCameraAnim(01:44:400, pixelcarpet2anim);
    pixelcarpet.startCamera(01:44:400, 01:44:950);
    pixelcarpet.stop(01:44:950);
    frequency.stop(01:44:950);
    neonbabe.stop(01:44:950);
    fade.start(01:44:950, 99);
    fade.fade(01:44:950, 01:45:950, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(01:45:950);

// ---- Transition ----
// No need, zoom transition in PixelcarpetEffect

    Checkpoint 01:44:900;
// ---- Sax ---- - 01:44:900 - 02:19:00 (35s) - < Discoball > 
	disco.start(01:44:950, 10, tmp1);
	bloom.start(01:44:950);
	bloom.setBuffers(01:44:950, tmp1, bloom);
	bloom.setBrightness(01:44:950, -0.2);
	bloom.setContrast(01:44:950, 2.0);
	bloom.stop(02:02:400);
	disco.stop(02:02:400);
	
    fade.start(02:02:400, 99);
    fade.fade(02:02:400, 02:03:400, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade.stop(02:03:400);

// ---- Transition ----
//    cubetrans.start(01:59:000, 50);
//    cubetrans.setBuffers(01:59:000, cube1, cube2);
//    cubetrans.easeIn(01:59:000, 02:00:00, 0.0, 0.0, -1.5);
//    cubetrans.easeOut(02:00:00, 02:01:000, 0.0, 0.0, 0.0);
//    cubetrans.stop(02:01:000);

	Checkpoint 02:02:00;
// ---- Ocean ----
    ocean.start(02:02:400, 12); //, cube2);
    ocean.stop(02:19:00);

    fade2.start(02:18:500, 99);
    fade2.fade(02:18:500, 02:19:00, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
    fade2.stop(02:19:00);

    Checkpoint 02:19:00;
// ---- Rolig ---- - 02:19:00 - 02:57:00 (35s) - Greetings
    equalizertrans.start(02:19:00, 50, tmp1);
    equalizertrans.setCameraAnim(02:19:000, equalizer2anim);
    equalizertrans.startCamera(02:19:000, 02:28:300);
    bloom.start(02:19:000, 60);
	bloom.setBuffers(02:19:000, tmp1, bloom);
	bloom.setBrightness(02:19:000, -1.0);
	bloom.setContrast(02:19:000, 1.0);
	bloom.stop(02:28:300);
    equalizertrans.stop(02:28:300);

    fade2.start(02:28:300, 99);
    fade2.fade(02:28:300, 02:29:300, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0);
    fade2.stop(02:29:300);

    ghetto.start(02:28:300);
    ghetto.setCameraAnim(02:28:300, ghettogreet1anim);
    ghetto.startCamera(02:28:300, 02:54:00);
    ghetto.showGreets(02:32:500);
    ghetto.stop(03:00:00);

// ---- Fade to black ----
    fade2.start(02:50:00, 99);
    fade2.fade(02:50:00, 02:58:00, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
    fade2.stop(03:00:00);
}

// ---------------------
//  Effect definitions
// ---------------------

disco * DiscoBallEffect {
    discoballA = objects[discoballA];
    discoballB = objects[discoballB];
    discoballC = objects[discoballC];
    lighttex =  graphics[discolight];
	discoball_shader = shaders[light];
    particlespriteshader = shaders[particlespriteshader];
    particletex = graphics[particletex];
}

blend * BlendEffect {
    shader = shaders[blend];
}

outrun * OutrunEffect {
    roadmap = binary[roadmap];
    treetex = graphics[treetex];
    outrunbg = graphics[outrunbg];
    car_straight = graphics[car_straight];
    car_straight_down = graphics[car_straight_down];
    car_straight_up = graphics[car_straight_up];
    car_left = graphics[car_left];
    car_right = graphics[car_right];
}

ghetto * GhettoblasterEffect {
    ghettoobj = objects[ghettoobj];
    tvobj = objects[tvobj];
    bass_shader = shaders[light];
    box_shader = shaders[texturephong];
    ground_texture1 = graphics[checkerfloor];
    tape1 = graphics[tape1];
    tape2 = graphics[tape2];
    tape3 = graphics[tape3];
    tape4 = graphics[tape4];
    glow = graphics[glow];
    greets_map = binary[greets_map];
    mirror = framebuffers[mirror];
    trans_buffer = framebuffers[tmp1];
}

equalizertrans * EqualizerTransitionEffect {
    glowtrans = graphics[glow];  
}

pixelcarpet * PixelCarpetEffect {
    dummy = dummy;
}

cubetrans * CubeTransitionEffect {
    dummy = dummy;
}

frequency * FrequencyEffect {
    dummy = dummy;
}

fade * FadeEffect {
    dummy = dummy;
}

fade2 * FadeEffect {
    dummy = dummy;
}

ocean * OceanEffect {
    beach = graphics[beach];
    leaf1 = graphics[leaf1];
    leaf2 = graphics[leaf2];
    reflection = graphics[reflection];
    oceanshader = shaders[oceanshader];
    bloom_shader = shaders[bloom];
    bloom_buffer = framebuffers[bloom];
}

bloom * BloomEffect {
	bloom_shader = bloom;
}

// ----- Textures ------

overlay * DisplayTexture {
    alphablend = true;
    texture = graphics[tvframe];
    ypos = -0.13 ; zpos = -1.0;
    xscale = 1.2;
    yscale = 0.7;
}

ctzlogo * DisplayTexture {
    texture = graphics[ctzlogo];
    zpos = -1.0;
    alphablend = true;
}

ctzlogobg * DisplayTexture {
    texture = graphics[ctzlogobg];
    zpos = -1.0;
}

presents * DisplayTexture {
    texture = graphics[presents];
    zpos = -1.0;
    zrot = 0.9;
}

presentsbg * DisplayTexture {
    texture = graphics[presentsbg];
    zpos = -1.0;
}

trashin87 * DisplayTexture {
    texture = graphics[trashin87];
    zpos = -1.0;
    zrot = -0.8;
}

trashin87bg * DisplayTexture {
    texture = graphics[trashin87bg];
    zpos = -1.0;
}

credsbg1 * DisplayTexture {
    texture = graphics[credsbg];
    zpos = -1.0;
}

credsbg2 * DisplayTexture {
    texture = graphics[credsbg];
    zpos = -1.0;
}

gangster1 * DisplayTexture {
    texture = graphics[gangster1];
    zpos = -1.0;
    alphablend = true;
}

gangster2 * DisplayTexture {
    texture = graphics[gangster2];
    zpos = -1.0;
    alphablend = true;
}

gangster3 * DisplayTexture {
    texture = graphics[gangster3];
    zpos = -1.0;
    alphablend = true;
}

gangster4 * DisplayTexture {
    texture = graphics[gangster4];
    zpos = -1.0;
    alphablend = true;
}

gangster5 * DisplayTexture {
    texture = graphics[gangster5];
    zpos = -1.0;
    alphablend = true;
}

phlaton * DisplayTexture {
    texture = graphics[phlaton];
    zpos = -1.0;
    alphablend = true;
}

dran * DisplayTexture {
    texture = graphics[dran];
    zpos = -1.0;
    alphablend = true;
}

enex * DisplayTexture {
    texture = graphics[enex];
    zpos = -1.0;
    alphablend = true;
}

micro * DisplayTexture {
    texture = graphics[micro];
    zpos = -1.0;
    alphablend = true;
}

gloom * DisplayTexture {
    texture = graphics[gloom];
    zpos = -1.0;
    alphablend = true;
}

contrazlogo * DisplayTexture {
    texture = graphics[contrazlogo];
    zpos = -1.0;
    alphablend = true;
}

introtext * DisplayTexture {
    texture = graphics[introtext];
    zpos = -1.0;
    yscale = 0.85;
    xscale = 0.85;
    alphablend = true;
}

scanlines * DisplayTexture {
    texture = graphics[scanlines];
    zpos = -1.0;
    alphablend = true;
}

tvframe * DisplayTexture {
    texture = graphics[tvframe];
    zpos = -1.0;
    yscale = 0.5625;
    alphablend = true;
}

//ghettolayer * DisplayTexture {
//    texture = graphics[ghettolayer];
//    zpos = -1.0;
//    xscale = 0.5;
//    yscale = 0.4;
//    alphablend = true;
//}

neonbabe * DisplayTexture {
    texture = graphics[neonbabe];
    zpos = -1.0;
    alphablend = true;
}