[Scummvm-cvs-logs] CVS: scummvm/sky cd_intro.cpp,NONE,1.1 sound.cpp,NONE,1.1 sound.h,NONE,1.1 disk.cpp,1.11,1.12 intro.cpp,1.5,1.6 module.mk,1.2,1.3 screen.cpp,1.5,1.6 sky.cpp,1.6,1.7 sky.h,1.6,1.7

Joost Peters joostp at users.sourceforge.net
Sat Mar 8 04:47:03 CET 2003


Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1:/tmp/cvs-serv7993/sky

Modified Files:
	disk.cpp intro.cpp module.mk screen.cpp sky.cpp sky.h 
Added Files:
	cd_intro.cpp sound.cpp sound.h 
Log Message:
Added voice support, and more (cd_)intro stuff + added myself to the README :)

--- NEW FILE: cd_intro.cpp ---
/* 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: /cvsroot/scummvm/scummvm/sky/cd_intro.cpp,v 1.1 2003/03/08 12:46:51 joostp Exp $
 *
 */

#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


void SkyState::doCDIntro() {

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

	vocBuffer = (byte *)loadFile(cdv_00, NULL);
	loadedVocSize = _lastLoadedFileSize;

	_tempPal = (byte *)loadFile(cd_pal, NULL);
	_workScreen = (byte *)loadFile(cd_1_log, NULL);
	
	cd2_seq_data_1 = (byte *)loadFile(cd_1, NULL);
	bgVocBuffer = (byte *)loadFile(59499, NULL);
	bgVocSize = _lastLoadedFileSize;

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

	_sound->playVoice(vocBuffer, loadedVocSize);
	_sound->playVoice(bgVocBuffer, bgVocSize);
	free (vocBuffer);

	vocBuffer = (byte *)loadFile(cdv_01, NULL);
	loadedVocSize = _lastLoadedFileSize;
	
	//waitForVoc(0);
	delay(5500); //hack!

	_sound->playVoice(vocBuffer, loadedVocSize);
	_sound->playVoice(bgVocBuffer, bgVocSize);
	free (vocBuffer);	
	
	showScreen();
	paletteFadeUp(_tempPal);
}



--- NEW FILE: sound.cpp ---
/* 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: /cvsroot/scummvm/scummvm/sky/sound.cpp,v 1.1 2003/03/08 12:46:51 joostp Exp $
 *
 */

#include "stdafx.h"
#include "sky/sound.h"
#include "sky/struc.h"
#include "common/file.h"
#include "common/engine.h"

SkySound::SkySound(SoundMixer *mixer) {
	_mixer = mixer;
}

int SkySound::playVoice(byte *sound, uint32 size) {

	byte flags = 0;
	flags |= SoundMixer::FLAG_UNSIGNED|SoundMixer::FLAG_AUTOFREE;
	size -= sizeof(struct dataFileHeader);
	byte *buffer = (byte *)malloc(size); 
	memcpy(buffer, sound+sizeof(struct dataFileHeader), size);	
	
	return _mixer->playRaw(NULL, buffer, size, 11025, flags);

}


--- NEW FILE: sound.h ---
/* 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: /cvsroot/scummvm/scummvm/sky/sound.h,v 1.1 2003/03/08 12:46:51 joostp Exp $
 *
 */


#include "sound/mixer.h"

class SkySound {
protected:

	bool _voiceIsPlaying;

public:

	SoundMixer *_mixer;


protected:


public:
	SkySound(SoundMixer *mixer);
	int playVoice(byte *sound, uint32 size);

};


Index: disk.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/disk.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- disk.cpp	7 Mar 2003 14:52:20 -0000	1.11
+++ disk.cpp	8 Mar 2003 12:46:51 -0000	1.12
@@ -52,6 +52,11 @@
 	
 	debug(1, "Entries in dinner table: %d", dinnerTableEntries);
 
+	if (dinnerTableEntries < 400)
+		_isDemo = true;
+	else
+		_isDemo = false;
+	
 	if (dinnerTableEntries > 1600) 
 		_isCDVersion = true;
 	else
@@ -92,7 +97,8 @@
 
 	fileFlags = READ_LE_UINT32((filePtr + 5));
 	fileSize = fileFlags & 0x03fffff;
-
+	_lastLoadedFileSize = fileSize;
+	
 	fileOffset = READ_LE_UINT32((filePtr + 2)) & 0x0ffffff;
 
 	cflag = (uint8)((fileOffset >> (23)) & 0x1);
@@ -168,6 +174,8 @@
 				}
 			}
 
+			_lastLoadedFileSize = decompSize; //including header
+			
 			if (fixedDest == NULL)
 				free(fileDest);
 
@@ -191,8 +199,7 @@
 		}
 	}
 
-	// if file is speech file then return NULL if not found
-	printf("get_file_info() - speech file support not implemented yet!\n");
+	// if file not found return NULL
 	return (uint16 *)NULL;
 }
 

Index: intro.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/intro.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- intro.cpp	7 Mar 2003 14:52:23 -0000	1.5
+++ intro.cpp	8 Mar 2003 12:46:51 -0000	1.6
@@ -232,6 +232,49 @@
 	free(_tempPal);
 }
 
+void SkyState::intro(void) {
+
+	_workScreen = (uint8 *)loadFile(60112, NULL); //while virgin screen is up, load rev screen
+	_tempPal = (uint8 *)loadFile(60113, NULL);
+
+	//loadSectionMusic(0);
+	
+	delay(3000); //keep virgin screen up for 3 seconds
+
+	//if (!_isCDVersion)
+	//	fn_start_music();
+	
+	delay(3000); //and another 3 seconds.
+	fn_fade_down(0); //remove virgin screen
+	showScreen();
+	paletteFadeUp(_tempPal);
+	free (_tempPal);
+	free (_workScreen);
+	
+	//while rev is up, load gibbons screen
+	_workScreen = (uint8 *)loadFile(60114, NULL);
+	_tempPal = (uint8 *)loadFile(60115, NULL);
+
+	intro_text_space = (uint8 *)malloc(10000);
+	intro_text_save = (uint8 *)malloc(10000);
+
+	//get_text(77);
+	
+	delay(8000); // keep revolution up for 8 seconds
+
+	fn_fade_down(0);
+	showScreen();
+	paletteFadeUp(_tempPal);
+
+	free (_tempPal);
+	free (_workScreen);
+
+	if (_isCDVersion)
+		doCDIntro();
+	
+	
+}
+
 void SkyState::showScreen(void) {
 	
 	_system->copy_rect(_workScreen, 320, 0, 0, 320, 200);

Index: module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/module.mk,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- module.mk	7 Mar 2003 14:52:23 -0000	1.2
+++ module.mk	8 Mar 2003 12:46:51 -0000	1.3
@@ -5,8 +5,10 @@
 	sky/disk.o \
 	sky/screen.o \
 	sky/intro.o \
+	sky/cd_intro.o \
 	sky/rnc_deco.o \
 	sky/grid.o \
+	sky/sound.o \
 
 # Include common rules 
 include common.rules

Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/screen.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- screen.cpp	7 Mar 2003 14:52:24 -0000	1.5
+++ screen.cpp	8 Mar 2003 12:46:51 -0000	1.6
@@ -25,7 +25,6 @@
 #include "sky/skydefs.h"
 #include "sky/sky.h"
 
-#define FADE_JUMP		2
 #define SCROLL_JUMP		16
 
 #define VGA_COLOURS		256
@@ -94,3 +93,93 @@
 		outPal[4 * i + 3] = 0x00;
 	}
 }
+
+//action = 0, simply fade out
+//action = 1, scroll left
+//action = 2, scroll right
+void SkyState::fn_fade_down(uint8 action) {
+
+	if (action) {
+	
+		//do scroll
+
+	} else {
+	
+		int i = 32;
+
+		do {
+			palette_fadedown_helper((uint32 *)_palette, 256);
+			_system->set_palette(_palette, 0, 256);
+			_system->update_screen();
+			delay(10);
+			
+		} while (--i);
+	
+	}
+
+	
+}
+
+void SkyState::palette_fadedown_helper(uint32 *pal, uint num) {
+	byte *p = (byte *)pal;
+
+	do {
+		if (p[0] >= 8)
+			p[0] -= 8;
+		else
+			p[0] = 0;
+		if (p[1] >= 8)
+			p[1] -= 8;
+		else
+			p[1] = 0;
+		if (p[2] >= 8)
+			p[2] -= 8;
+		else
+			p[2] = 0;
+		p += sizeof(uint32);
+	} while (--num);
+}
+
+void SkyState::paletteFadeUp(uint8 *pal) {
+
+	byte tmpPal[1024];
+	
+	convertPalette(pal, tmpPal);
+
+	int i = 32;
+
+	do {
+
+		palette_fadeup_helper((uint32 *)_palette, (uint32 *)tmpPal, 256);
+		_system->set_palette(_palette, 0, 256);
+		_system->update_screen();
+		delay(10);	
+	} while (--i);
+	
+}
+
+void SkyState::palette_fadeup_helper(uint32 *realPal, uint32 *desiredPal, int num) {
+
+	byte *r = (byte *)realPal;
+	byte *d = (byte *)desiredPal;
+
+	do {
+		if (r[0] < d[0]-8)
+			r[0] += 8;
+		else
+			r[0] = d[0];
+		if (r[1] < d[1]-8)
+			r[1] += 8;
+		else
+			r[1] = d[1];
+		if (r[2] < d[2]-8)
+			r[2] += 8;
+		else
+			r[2] = d[2];
+				
+		r += sizeof(uint32);
+		d += sizeof(uint32);
+	} while (--num);
+	
+}
+

Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- sky.cpp	7 Mar 2003 15:38:10 -0000	1.6
+++ sky.cpp	8 Mar 2003 12:46:51 -0000	1.7
@@ -53,6 +53,11 @@
 	
 	_game = detector->_gameId;
 
+	if (!_mixer->bindToSystem(syst))
+			warning("Sound initialisation failed.");
+
+	_mixer->setVolume(detector->_sfx_volume); //unnecessary?
+	
 	_debugMode = detector->_debugMode;
 	_debugLevel = detector->_debugLevel;
 	_language = detector->_language;
@@ -78,7 +83,8 @@
 		_dump_file = stdout;
 
 	initialise();
-
+	intro();
+	
 	while (1) {
 		delay(100);
 	}
@@ -89,6 +95,9 @@
 	//initialise_memory();
 	//init_timer();
 	//init_music(); 
+
+	_sound = new SkySound(_mixer);
+
 	initialiseDisk();
 	initialiseScreen();
 	initVirgin();

Index: sky.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- sky.h	7 Mar 2003 15:38:11 -0000	1.6
+++ sky.h	8 Mar 2003 12:46:51 -0000	1.7
@@ -25,12 +25,15 @@
 #include <stdio.h>
 #include "common/engine.h"
 #include "common/util.h"
+#include "sound/mixer.h"
+#include "sky/sound.h"
 
 class SkyState : public Engine {
 	void errorString(const char *buf_input, char *buf_output);
 protected:
 	byte _game;
 	bool _isCDVersion;
+	bool _isDemo;
 	byte _key_pressed;
 
 	uint16 _debugMode;
@@ -45,6 +48,8 @@
 
 	int _numScreenUpdates;
 
+	uint32 _lastLoadedFileSize;
+	
 //	int _timer_id;
 
 	FILE *_dump_file;
@@ -52,13 +57,16 @@
 	int _number_of_savegames;
 
 	int _sdl_mouse_x, _sdl_mouse_y;
+
+	SkySound *_sound;
 	
 	byte *_workScreen;
 	byte *_backScreen;
 	byte *_tempPal;
 	byte *_workPalette;
 	byte *_halfPalette;
-
+	byte *_scrollAddr;
+	
 	byte *_gameGrid;
 	byte *_gameGrids;
 	
@@ -77,9 +85,15 @@
 	void initialiseScreen();
 	void initialiseGrids();
 	void setPalette(uint8 *pal);
+	void fn_fade_down(uint8 action);
+	void palette_fadedown_helper(uint32 *pal, uint num);
+	void paletteFadeUp(uint8 *pal);
+	void palette_fadeup_helper(uint32 *realPal, uint32 *desiredPal, int num);
 	uint16 *loadFile(uint16 fileNr, uint8 *dest);
 	uint16 *getFileInfo(uint16 fileNr);
 	void initVirgin();
+	void intro();
+	void doCDIntro();
 	void showScreen();
 
 	static int CDECL game_thread_proc(void *param);





More information about the Scummvm-git-logs mailing list