/* ScummVM - Scumm Interpreter
 * Copyright (C) 2003 The ScummVM project
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header$
 *
 */

#include "stdafx.h"
#include "sky/sky.h"
#include "sky/skydefs.h"

//CD intro file defines
#define cdv_00	59500
#define cd_pal	59501
#define cd_1_log	59502
#define cd_1	59503
#define cdv_01	59504
#define cdv_02	59505
#define cd_2	59506
#define cdv_03	59507
#define cdv_04	59508
#define cd_3	59509
#define cdv_05	59510
#define cdv_06	59511
#define cd_5	59512
#define cdv_07	59513
#define cdv_08	59514
#define cdv_09	59515
#define cd_7	59516
#define cdv_10	59518
#define cd_11	59519
#define cdv_11	59520
#define cd_11_pal	59521
#define cd_11_log	59522
#define cdv_12	59523
#define cd_13	59524
#define cdv_13	59525
#define cdv_14	59527
#define cdv_15	59528
#define cd_15_pal	59529
#define cd_15_log	59530
#define cdv_16	59531
#define cd_17_log	59532
#define cd_17	59533
#define cdv_17	59534
#define cdv_18	59535
#define cdv_19	59536
#define cd_19_pal	59537
#define cd_19_log	59538
#define cdv_20	59539
#define cd_20_log	59540
#define cdv_21	59541
#define cd_21_log	59542
#define cdv_22	59545
#define cdv_23	59546
#define cd_23_pal	59547
#define cd_24_log	59550
#define cdv_24	59551
#define cdv_25	59554
#define cdv_26	59556
#define cd_27	59557
#define cdv_27	59558
#define cd_27_pal	59559
#define cd_27_log	59560
#define cdv_28	59561
#define cdv_29	59562
#define cdv_30	59563
#define cdv_31	59565
#define cdv_32	59566
#define cdv_33	59567
#define cdv_34	59568
#define cd_35	59569
#define cdv_35	59570
#define cd_35_pal	59571
#define cd_35_log	59572
#define cdv_36	59574
#define cd_37	59575
#define cdv_37	59576
#define cd_37_pal	59577
#define cd_37_log	59578
#define cdv_38	59579
#define cdv_39	59581
#define cdv_40	59583
#define cd_40_pal	59584
#define cd_40_log	59585
#define cdv_41	59587
#define cdv_42	59588
#define cd_43	59589
#define cdv_43	59590
#define cd_43_pal	59591
#define cd_43_log	59592
#define cdv_44	59594
#define cd_45	59595
#define cdv_45	59596
#define cd_45_pal	59597
#define cd_45_log	59598
#define cdv_46	59600
#define cdv_47	59602
#define cd_47_pal	59603
#define cd_47_log	59604
#define cd_48	59605
#define cdv_48	59606
#define cd_48_pal	59607
#define cd_48_log	59608
#define cd_49	59609
#define cdv_49	59610
#define cd_50	59611
#define cdv_50	59612
#define cdv_51	59613
#define cdv_52	59614
#define cdv_53	59615
#define cdv_54	59616
#define cdv_55	59618
#define cd_55_pal	59619
#define cd_55_log	59620
#define cdv_56	59621
#define cdv_57	59622
#define cd_58	59623
#define cdv_58	59624
#define cd_58_pal	59625
#define cd_58_log	59626
#define cdv_59	59627
#define cdv_60	59628
#define cdv_61	59629
#define cdv_62	59630
#define cdv_63	59631
#define cdv_64	59632
#define cdv_65	59633
#define cdv_66	59635
#define cd_66_pal	59636
#define cd_66_log	59637
#define cdv_67	59639
#define cd_67_pal	59640
#define cd_67_log	59641
#define cdv_68	59642
#define cd_69	59643
#define cdv_69	59644
#define cd_69_pal	59645
#define cd_69_log	59646
#define cdv_70	59647
#define cdv_71	59648
#define cdv_72	59649
#define cd_72_pal	59650
#define cd_72_log	59651
#define cd_73_pal	59652
#define cd_73_log	59653
#define cdv_73	59654
#define cdv_74	59655
#define cdv_75	59656
#define cd_76_pal	59657
#define cd_76_log	59658
#define cdv_76	59659
#define cdv_77	59660
#define cd_78_pal	59661
#define cd_78_log	59662
#define cdv_78	59663
#define cdv_79	59664
#define cdv_80	59665
#define cdv_81	59666
#define cdv_82	59667
#define cdv_83	59668
#define cdv_84	59669
#define cdv_85	59670
#define cdv_86	59671
#define cdv_87	59672
#define cd_100	60087
#define cd_101_log	60088
#define cd_101	60099
#define cd_102_log	60090
#define cd_102	60091
#define cd_103_pal	60092
#define cd_103_log	60093
#define cd_103	60094
#define cd_104_pal	60095
#define cd_104_log	60096
#define cd_104	60097
#define cd_105	60098

#define START_VOICE	( delay(200), _skySound->playVoice(vocBuffer, loadedVocSize) )
#define START_BG	( _skySound->playBgSound(bgVocBuffer, bgVocSize) )
#define LOAD_NEW_VOICE(num)	( free (vocBuffer), vocBuffer = _skyDisk->loadFile(num, NULL), loadedVocSize = _skyDisk->_lastLoadedFileSize ) 
#define LOAD_NEW_BG(num)	( free (bgVocBuffer), bgVocBuffer = _skyDisk->loadFile(num, NULL), bgVocSize = _skyDisk->_lastLoadedFileSize )
#define WAIT_VOICE	while (_skySound->_voiceHandle != 0) { delay(50); CHECK_ESC }
#define WAIT_SEQUENCE	while (_tseqFrames != 0) { delay(50); CHECK_ESC }
#define CHECK_ESC	if (_key_pressed == 27) { _tseqFrames = 0; return; }
#define WAIT_RELATIVE(x)	( delay(20 * (x)) )
#define COPY_SCREEN	( memcpy(_workScreen, workScreen2, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT) )

void SkyState::doCDIntro() {

	uint32 loadedVocSize, bgVocSize;
	byte *vocBuffer, *bgVocBuffer, *cd2_seq_data_1, *cd2_seq_data_2;

	assert(isCDVersion(_gameVersion));
	
	vocBuffer = _skyDisk->loadFile(cdv_00, NULL);
	loadedVocSize = _skyDisk->_lastLoadedFileSize;

	_tempPal = _skyDisk->loadFile(cd_pal, NULL);
	_workScreen = _skyDisk->loadFile(cd_1_log, NULL);
	
	cd2_seq_data_1 = _skyDisk->loadFile(cd_1, NULL);
	bgVocBuffer = _skyDisk->loadFile(59499, NULL);
	bgVocSize = _skyDisk->_lastLoadedFileSize;

	delay(2000); //keep gibbons screen up for 2 seconds
	fnFadeDown(0); //and fade out

	START_VOICE;
	START_BG; 
	free (vocBuffer);

	vocBuffer = _skyDisk->loadFile(cdv_01, NULL);
	loadedVocSize = _skyDisk->_lastLoadedFileSize;
	
	WAIT_VOICE; //wait for the voice to finish
	START_VOICE;
	START_BG; 
	showScreen();
	paletteFadeUp(_tempPal);
	startTimerSequence(cd2_seq_data_1);
	LOAD_NEW_VOICE(cdv_02);
	WAIT_VOICE;
	START_VOICE;
	START_BG; 
	cd2_seq_data_2 = _skyDisk->loadFile(cd_2, NULL); //load seq 2 while 1 is playing
	LOAD_NEW_VOICE(cdv_03);
	//WAIT_SEQUENCE;
	WAIT_VOICE;
	startTimerSequence(cd2_seq_data_2); //start second sequence
	START_VOICE; //03
	START_BG;
	
	LOAD_NEW_VOICE(cdv_04);
	
	WAIT_VOICE; //03
	START_VOICE; //04
	START_BG;

	free(cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_3, NULL);
	LOAD_NEW_VOICE(cdv_05);
	
	WAIT_SEQUENCE; //2
	WAIT_VOICE; //4

	START_VOICE; //5
	START_BG;
	
	WAIT_RELATIVE(100); 

	startTimerSequence(cd2_seq_data_1);
	LOAD_NEW_VOICE(cdv_06);
	WAIT_VOICE; //5
	START_VOICE; //6
	START_BG;

	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_5, NULL);
	LOAD_NEW_VOICE(cdv_07);

	WAIT_SEQUENCE; //3
	WAIT_VOICE; //6

	START_VOICE; //7
	startTimerSequence(cd2_seq_data_2); //5
	START_BG;

	LOAD_NEW_VOICE(cdv_08);
	WAIT_VOICE; //7
	START_VOICE; //8
	START_BG;
	LOAD_NEW_VOICE(cdv_09);
	WAIT_VOICE; //8
	START_VOICE; //9
	START_BG;

	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_7, NULL);
	LOAD_NEW_VOICE(cdv_10);

	WAIT_SEQUENCE; //5
	WAIT_VOICE; //9

	START_VOICE; //10
	startTimerSequence(cd2_seq_data_1); //7
	START_BG;
	
	_skyDisk->loadFile(cd_11_pal, _tempPal);
	byte *workScreen2 = _skyDisk->loadFile(cd_11_log, NULL); //need an extra screen or else the sequence will get messed up
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_11, NULL);
	LOAD_NEW_VOICE(cdv_11);

	WAIT_VOICE; //10
	START_VOICE; //11
	START_BG;

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_12);
	WAIT_SEQUENCE; //7
	WAIT_VOICE; //11
	START_VOICE; //12
	START_BG;

	WAIT_RELATIVE(80);
	startTimerSequence(cd2_seq_data_2); //11

	LOAD_NEW_VOICE(cdv_13);
	WAIT_VOICE; //12
	START_VOICE; //13
	START_BG;

	free(cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_13, NULL);
	LOAD_NEW_VOICE(cdv_14);

	LOAD_NEW_BG(59498);

	WAIT_SEQUENCE; //11
	WAIT_VOICE; //13

	START_VOICE; //14
	startTimerSequence(cd2_seq_data_1); //13
	START_BG;

	LOAD_NEW_VOICE(cdv_15);
	_skyDisk->loadFile(cd_15_pal, _tempPal);
	_skyDisk->loadFile(cd_15_log, workScreen2);

	WAIT_SEQUENCE; //13
	WAIT_VOICE; //14

	START_VOICE; //15
	START_BG;
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_16);
	WAIT_VOICE; //15
	START_VOICE; //16
	START_BG;

	_skyDisk->loadFile(cd_17_log, workScreen2);
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_17, NULL);
	LOAD_NEW_VOICE(cdv_17);

	WAIT_VOICE; //16
	START_VOICE; //17

	WAIT_RELATIVE(40);
	COPY_SCREEN;
	showScreen();

	LOAD_NEW_VOICE(cdv_18);
	LOAD_NEW_BG(59497); //Loud heli
	
	WAIT_VOICE; //17
	startTimerSequence(cd2_seq_data_2); //17
	START_VOICE; //18
	START_BG;

	LOAD_NEW_VOICE(cdv_19);
	_skyDisk->loadFile(cd_19_pal, _tempPal);
	_skyDisk->loadFile(cd_19_log, workScreen2);
	START_BG;
	LOAD_NEW_BG(59496); //loud heli to quiet

	WAIT_SEQUENCE; //17
	WAIT_VOICE; //18

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	START_VOICE; //19
	START_BG;
	LOAD_NEW_VOICE(cdv_20);
	_skyDisk->loadFile(cd_20_log, workScreen2);
	LOAD_NEW_BG(59496); //quiet heli

	WAIT_VOICE; //19
	START_VOICE; //20
	START_BG;

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_21);
	_skyDisk->loadFile(cd_21_log, workScreen2);

	START_BG;
	WAIT_SEQUENCE; //19
	WAIT_VOICE; //20
	START_VOICE; //21
	START_BG;
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_22);
	LOAD_NEW_BG(59494); //heli whine

	WAIT_SEQUENCE; //20
	WAIT_VOICE; //21

	START_VOICE; //22
	START_BG;
	LOAD_NEW_VOICE(cdv_23);
	WAIT_VOICE; //22
	START_VOICE; //23
	fnFadeDown(0);

	_skyDisk->loadFile(cd_23_pal, _tempPal);
	_skyDisk->loadFile(cd_24_log, workScreen2);
	LOAD_NEW_VOICE(cdv_24);
	WAIT_VOICE; //23

	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	START_VOICE; //24
	showScreen();
	LOAD_NEW_VOICE(cdv_25);
	WAIT_VOICE; //24
	START_VOICE; //25
	LOAD_NEW_VOICE(cdv_26);
	WAIT_VOICE; //25
	START_VOICE; //26

	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_27, NULL);
	LOAD_NEW_VOICE(cdv_27);
	_skyDisk->loadFile(cd_27_pal, _tempPal);
	_skyDisk->loadFile(cd_27_log, workScreen2);
	WAIT_VOICE; //26
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();	
	paletteFadeUp(_tempPal);
	START_VOICE; //27
	LOAD_NEW_VOICE(cdv_29);
	WAIT_VOICE; //27
	START_VOICE; //29
	LOAD_NEW_VOICE(cdv_30);
	WAIT_VOICE; //29
	START_VOICE; //30
	LOAD_NEW_VOICE(cdv_31);
	WAIT_VOICE; //30
	startTimerSequence(cd2_seq_data_1);
	START_VOICE; //31
	LOAD_NEW_VOICE(cdv_32);
	WAIT_VOICE; //31
	START_VOICE; //32
	LOAD_NEW_VOICE(cdv_33);
	WAIT_VOICE; //32
	START_VOICE; //33
	LOAD_NEW_VOICE(cdv_34);
	WAIT_VOICE; //33
	START_VOICE; //34
	LOAD_NEW_VOICE(cdv_35);
	WAIT_SEQUENCE; //27
	WAIT_VOICE; //34
	START_VOICE; //35

	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_35, NULL);
	LOAD_NEW_VOICE(cdv_36);
	_skyDisk->loadFile(cd_35_pal, _tempPal);
	_skyDisk->loadFile(cd_35_log, workScreen2);
	WAIT_VOICE; //35
	START_VOICE; //36
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	
	LOAD_NEW_VOICE(cdv_37);
	WAIT_VOICE; //36
	startTimerSequence(cd2_seq_data_2);
	START_VOICE; //37

	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_37, NULL);
	LOAD_NEW_VOICE(cdv_38);

	WAIT_SEQUENCE; //35
	WAIT_VOICE; //37
	START_VOICE; //38
	startTimerSequence(cd2_seq_data_1);
	LOAD_NEW_VOICE(cdv_39);
	WAIT_SEQUENCE; //37
	WAIT_VOICE; //38
	START_VOICE; //39

	LOAD_NEW_VOICE(cdv_40);
	_skyDisk->loadFile(cd_40_pal, _tempPal);
	_skyDisk->loadFile(cd_40_log, workScreen2);
	WAIT_VOICE; //39
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	START_VOICE; //40
	LOAD_NEW_VOICE(cdv_41);
	WAIT_VOICE; //40
	START_VOICE; //41
	LOAD_NEW_VOICE(cdv_42);
	WAIT_VOICE; //41
	START_VOICE; //42
	LOAD_NEW_VOICE(cdv_43);

	_skyDisk->loadFile(cd_43_pal, _tempPal);
	_skyDisk->loadFile(cd_43_log, workScreen2);
	WAIT_VOICE; //42

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	START_VOICE; //43
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_43, NULL);
	WAIT_VOICE; //43
	startTimerSequence(cd2_seq_data_2);
	LOAD_NEW_VOICE(cdv_45);
	_skyDisk->loadFile(cd_45_pal, _tempPal);
	_skyDisk->loadFile(cd_45_log, workScreen2);
	WAIT_SEQUENCE; //43
	START_VOICE; //45
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_45, NULL);
	LOAD_NEW_VOICE(cdv_46);
	WAIT_VOICE; //45
	startTimerSequence(cd2_seq_data_1);
	START_VOICE; //46
	LOAD_NEW_VOICE(cdv_47);

	_skyDisk->loadFile(cd_47_pal, _tempPal);
	_skyDisk->loadFile(cd_47_log, workScreen2);

	WAIT_SEQUENCE; //45
	WAIT_VOICE; //46

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	START_VOICE; //47
	LOAD_NEW_VOICE(cdv_48);
	_skyDisk->loadFile(cd_48_pal, _tempPal);
	_skyDisk->loadFile(cd_48_log, workScreen2);
	WAIT_VOICE; //47
	START_VOICE; //48
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_48, NULL);
	LOAD_NEW_VOICE(cdv_49);
	WAIT_VOICE; //48
	startTimerSequence(cd2_seq_data_2);
	START_VOICE; //49
	LOAD_NEW_VOICE(cdv_50);
	WAIT_VOICE; //49
	START_VOICE; //50
	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_49, NULL);
	LOAD_NEW_VOICE(cdv_51);
	WAIT_SEQUENCE; //48
	WAIT_VOICE; //50
	START_VOICE; //51
	startTimerSequence(cd2_seq_data_1);
	LOAD_NEW_VOICE(cdv_52);
	WAIT_VOICE; //51
	START_VOICE; //52
	LOAD_NEW_VOICE(cdv_53);
	WAIT_VOICE; //52
	START_VOICE; //53
	LOAD_NEW_VOICE(cdv_54);
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_50, NULL);
	WAIT_VOICE; //53
	WAIT_SEQUENCE; //49

	START_VOICE; //54
	startTimerSequence(cd2_seq_data_2);
	LOAD_NEW_VOICE(cdv_55);
	WAIT_SEQUENCE; //50
	WAIT_VOICE; //54
	START_VOICE; //55

	_skyDisk->loadFile(cd_55_pal, _tempPal);
	_skyDisk->loadFile(cd_55_log, workScreen2);
	LOAD_NEW_VOICE(cdv_56);
	WAIT_VOICE; //55
	START_VOICE; //56

	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_57);
	WAIT_VOICE; //56
	START_VOICE; //57

	LOAD_NEW_VOICE(cdv_58);
	_skyDisk->loadFile(cd_58_pal, _tempPal);
	_skyDisk->loadFile(cd_58_log, workScreen2);

	WAIT_VOICE; //57
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	START_VOICE; //58
	LOAD_NEW_VOICE(cdv_59);
	WAIT_VOICE; //48
	START_VOICE; //59
	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_58, NULL);
	WAIT_VOICE; //59
	LOAD_NEW_VOICE(cdv_60);
	START_VOICE; //60
	LOAD_NEW_VOICE(cdv_61);
	WAIT_VOICE; //60
	START_VOICE; //61
	LOAD_NEW_VOICE(cdv_62);
	WAIT_VOICE; //61
	START_VOICE; //62
	startTimerSequence(cd2_seq_data_1); //58
	LOAD_NEW_VOICE(cdv_63);
	WAIT_VOICE; //62
	START_VOICE; //63
	LOAD_NEW_VOICE(cdv_64);
	WAIT_VOICE; //63
	START_VOICE; //64
	LOAD_NEW_VOICE(cdv_65);
	WAIT_SEQUENCE; //58
	WAIT_VOICE; //64
	START_VOICE; //65
	fnFadeDown(0);
	LOAD_NEW_VOICE(cdv_66);
	_skyDisk->loadFile(cd_66_pal, _tempPal);
	_skyDisk->loadFile(cd_66_log, _workScreen);
	WAIT_VOICE; //65
	showScreen();
	paletteFadeUp(_tempPal);
	START_VOICE; //66
	LOAD_NEW_VOICE(cdv_67);
	WAIT_VOICE; //66
	START_VOICE; //67
	_skyDisk->loadFile(cd_67_pal, _tempPal);
	_skyDisk->loadFile(cd_67_log, workScreen2);
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	LOAD_NEW_VOICE(cdv_68);
	WAIT_VOICE; //67
	START_VOICE; //68
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_69, NULL);
	LOAD_NEW_VOICE(cdv_69);
	_skyDisk->loadFile(cd_69_pal, _tempPal);
	_skyDisk->loadFile(cd_69_log, workScreen2);
	WAIT_VOICE; //68
	START_VOICE; //69
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	LOAD_NEW_VOICE(cdv_70);
	WAIT_VOICE; //69
	startTimerSequence(cd2_seq_data_2);
	START_VOICE; //70
	LOAD_NEW_VOICE(cdv_71);
	WAIT_VOICE; //70
	fnFadeDown(0);
	START_VOICE; //71
	_skyDisk->loadFile(cd_72_pal, _tempPal);
	_skyDisk->loadFile(cd_72_log, _workScreen);
	WAIT_VOICE; //71
	showScreen();
	paletteFadeUp(_tempPal);
	LOAD_NEW_VOICE(cdv_72);
	START_VOICE; //72

	_skyDisk->loadFile(cd_73_pal, _tempPal);
	_skyDisk->loadFile(cd_73_log, _workScreen);
	LOAD_NEW_VOICE(cdv_73);
	WAIT_VOICE; //72
	fnFadeDown(0);
	showScreen();
	paletteFadeUp(_tempPal);
	START_VOICE; //73
	LOAD_NEW_VOICE(cdv_74);
	WAIT_VOICE; //73
	START_VOICE; //74
	LOAD_NEW_VOICE(cdv_75);
	WAIT_VOICE; //74
	START_VOICE; //75
	_skyDisk->loadFile(cd_76_pal, _tempPal);
	free (workScreen2);
	workScreen2 = _skyDisk->loadFile(cd_76_log, NULL);
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);

	LOAD_NEW_VOICE(cdv_76);
	WAIT_VOICE; //75
	START_VOICE; //76
	LOAD_NEW_VOICE(cdv_77);
	WAIT_VOICE; //76
	START_VOICE; //77

	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_100, NULL);
	_skyDisk->loadFile(cd_78_pal, _tempPal);
	free (workScreen2);
	workScreen2 = _skyDisk->loadFile(cd_78_log, NULL);
	LOAD_NEW_VOICE(cdv_78);
	WAIT_VOICE; //77
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();	
	paletteFadeUp(_tempPal);
	START_VOICE; //78
	LOAD_NEW_VOICE(cdv_79);
	WAIT_VOICE; //78
	START_VOICE; //79
	LOAD_NEW_VOICE(cdv_80);
	WAIT_VOICE; //79
	START_VOICE; //80
	startTimerSequence(cd2_seq_data_1);
	LOAD_NEW_VOICE(cdv_81);
	WAIT_VOICE; //80
	START_VOICE; //81
	LOAD_NEW_VOICE(cdv_82);
	WAIT_VOICE; //81
	START_VOICE; //82
	LOAD_NEW_VOICE(cdv_83);
	WAIT_VOICE; //82
	_skyDisk->loadFile(cd_101_log, workScreen2);
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_101, NULL);
	WAIT_SEQUENCE; //100
	COPY_SCREEN;
	showScreen();
	startTimerSequence(cd2_seq_data_2);
	START_VOICE; //83
	LOAD_NEW_VOICE(cdv_84);
	WAIT_VOICE; //83
	START_VOICE; //84
	LOAD_NEW_VOICE(cdv_85);
	WAIT_VOICE; //84
	START_VOICE; //85
	LOAD_NEW_VOICE(cdv_86);
	WAIT_VOICE; //85

	free (workScreen2);
	workScreen2 = _skyDisk->loadFile(cd_102_log, NULL);
	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_102, NULL);
	WAIT_SEQUENCE; //101
	COPY_SCREEN;
	showScreen();
	startTimerSequence(cd2_seq_data_1);
	START_VOICE; //86
	LOAD_NEW_VOICE(cdv_87);
	_skyDisk->loadFile(cd_103_pal, _tempPal);
	free (workScreen2);
	workScreen2 = _skyDisk->loadFile(cd_103_log, NULL);
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_103, NULL);
	WAIT_SEQUENCE; //102
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	startTimerSequence(cd2_seq_data_2);
	WAIT_VOICE; //86
	START_VOICE; //87
	_skyDisk->loadFile(cd_104_pal, _tempPal);
	free (workScreen2);
	workScreen2 = _skyDisk->loadFile(cd_104_log, NULL);
	free (cd2_seq_data_1);
	cd2_seq_data_1 = _skyDisk->loadFile(cd_104, NULL);
	WAIT_SEQUENCE; //103

	_skyMusic->startMusic(2);
	fnFadeDown(0);
	COPY_SCREEN;
	showScreen();
	paletteFadeUp(_tempPal);
	startTimerSequence(cd2_seq_data_1);
	free (cd2_seq_data_2);
	cd2_seq_data_2 = _skyDisk->loadFile(cd_105, NULL);
	WAIT_SEQUENCE; //104
	startTimerSequence(cd2_seq_data_2);
	WAIT_SEQUENCE; //105
	
	free (cd2_seq_data_1);
	free (cd2_seq_data_2);
	free (workScreen2);
}