[Scummvm-cvs-logs] SF.net SVN: scummvm:[44195] scummvm/trunk/engines/kyra

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Sep 19 15:17:56 CEST 2009


Revision: 44195
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44195&view=rev
Author:   athrxx
Date:     2009-09-19 13:17:55 +0000 (Sat, 19 Sep 2009)

Log Message:
-----------
LOL: start on pc98 support (still messed up and not working though)

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/lol.h
    scummvm/trunk/engines/kyra/scene_lol.cpp
    scummvm/trunk/engines/kyra/screen_lol.cpp
    scummvm/trunk/engines/kyra/script_tim.cpp
    scummvm/trunk/engines/kyra/sound_lol.cpp

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-09-19 13:17:55 UTC (rev 44195)
@@ -144,6 +144,7 @@
 	_vcnShift = 0;
 	_vcnExpTable = 0;
 	_vmpPtr = 0;
+	_vcfBlocks = 0;
 	_trueLightTable2 = 0;
 	_trueLightTable1 = 0;
 	_levelShapeProperties = 0;
@@ -354,6 +355,7 @@
 	delete[] _vcnBlocks;
 	delete[] _vcnShift;
 	delete[] _vmpPtr;
+	delete[] _vcfBlocks;
 	delete[] _trueLightTable2;
 	delete[] _trueLightTable1;
 	delete[] _levelShapeProperties;
@@ -788,14 +790,29 @@
 	Palette &pal = _screen->getPalette(0);
 	_screen->loadBitmap("PLAYFLD.CPS", 3, 3, &pal);
 
-	_screen->copyPalette(1, 0);
-	pal.fill(0, 1, 0x3F);
-	pal.fill(2, 126, 0x3F);
-	pal.fill(192, 4, 0x3F);
-	_screen->generateOverlay(pal, _screen->_paletteOverlay1, 1, 96);
-	_screen->generateOverlay(pal, _screen->_paletteOverlay2, 144, 65);
-	_screen->copyPalette(0, 1);
+	if (_flags.use16ColorMode) {
+		memset(_screen->_paletteOverlay1, 0, 256);
+		memset(_screen->_paletteOverlay2, 0, 256);
 
+		static const uint8 colTable1[] = { 0x00, 0xEE, 0xCC, 0xFF, 0x44, 0x66, 0x44, 0x88, 0xEE, 0xAA, 0x11, 0xCC, 0xDD, 0xEE, 0x44, 0xCC };
+		static const uint8 colTable2[] = { 0x00, 0xCC, 0xFF, 0xBB, 0xEE, 0xBB, 0x55, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xFF, 0xCC, 0xDD, 0xBB };
+		static const uint8 colTable3[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+		for (int i = 0; i < 16; i++) {
+			_screen->_paletteOverlay2[colTable3[i]] = colTable1[i];
+			_screen->_paletteOverlay1[colTable3[i]] = colTable2[i];
+		}
+
+	} else {
+		_screen->copyPalette(1, 0);
+		pal.fill(0, 1, 0x3F);
+		pal.fill(2, 126, 0x3F);
+		pal.fill(192, 4, 0x3F);
+		_screen->generateOverlay(pal, _screen->_paletteOverlay1, 1, 96);
+		_screen->generateOverlay(pal, _screen->_paletteOverlay2, 144, 65);
+		_screen->copyPalette(0, 1);
+	}
+
 	_screen->getPalette(1).clear();
 	_screen->getPalette(2).clear();
 
@@ -1686,18 +1703,28 @@
 
 void LoLEngine::generateBrightnessPalette(const Palette &src, Palette &dst, int brightness, int modifier) {
 	dst.copy(src);
-	_screen->loadSpecialColors(dst);
+	if (_flags.use16ColorMode) {
+		if (!(brightness && modifier >= 0 && modifier < 8 && (_flagsTable[31] & 0x08)))
+			modifier = 8;
+		modifier >>= 1;
+		if (modifier)
+			modifier--;
+		brightness = 16 * modifier;
 
-	brightness = (8 - brightness) << 5;
-	if (modifier >= 0 && modifier < 8 && (_flagsTable[31] & 0x08)) {
-		brightness = 256 - ((((modifier & 0xfffe) << 5) * (256 - brightness)) >> 8);
-		if (brightness < 0)
-			brightness = 0;
-	}
+	} else {
+		_screen->loadSpecialColors(dst);
 
-	for (int i = 0; i < 384; i++) {
-		uint16 c = (dst[i] * brightness) >> 8;
-		dst[i] = c & 0xff;
+		brightness = (8 - brightness) << 5;
+		if (modifier >= 0 && modifier < 8 && (_flagsTable[31] & 0x08)) {
+			brightness = 256 - ((((modifier & 0xfffe) << 5) * (256 - brightness)) >> 8);
+			if (brightness < 0)
+				brightness = 0;
+		}
+
+		for (int i = 0; i < 384; i++) {
+			uint16 c = (dst[i] * brightness) >> 8;
+			dst[i] = c & 0xff;
+		}
 	}
 }
 
@@ -1722,13 +1749,18 @@
 	if (_flags.isTalkie || _loadSuppFilesFlag)
 		return;
 
-	Palette tpal(256);
-	_screen->loadPalette("fxpal.col", tpal);
-	_screen->loadBitmap("fxpal.shp", 3, 3, 0);
-	const uint8 *shpPal = _screen->getPtrToShape(_screen->getCPagePtr(2), 0) + 11;
+	if (_flags.use16ColorMode) {
 
-	_screen->generateTruelightTables(shpPal, 20, tpal, _screen->getPalette(1), _trueLightTable1, _trueLightTable2, 70);
+		_screen->loadPalette("lol.nol", _screen->getPalette(0));
+	} else {
+		Palette tpal(256);
+		_screen->loadPalette("fxpal.col", tpal);
+		_screen->loadBitmap("fxpal.shp", 3, 3, 0);
+		const uint8 *shpPal = _screen->getPtrToShape(_screen->getCPagePtr(2), 0) + 11;
 
+		_screen->generateTruelightTables(shpPal, 20, tpal, _screen->getPalette(1), _trueLightTable1, _trueLightTable2, 70);
+	}
+
 	_loadSuppFilesFlag = 1;
 }
 

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/lol.h	2009-09-19 13:17:55 UTC (rev 44195)
@@ -1083,6 +1083,7 @@
 	uint8 *_vcnShift;
 	uint8 *_vcnExpTable;
 	uint16 *_vmpPtr;
+	uint8 *_vcfBlocks;
 	uint16 *_blockDrawingBuffer;
 	uint8 *_sceneWindowBuffer;
 	LevelShapeProperty *_levelShapeProperties;

Modified: scummvm/trunk/engines/kyra/scene_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lol.cpp	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/scene_lol.cpp	2009-09-19 13:17:55 UTC (rev 44195)
@@ -86,7 +86,8 @@
 	addLevelItems();
 	deleteMonstersFromBlock(_currentBlock);
 
-	_screen->generateGrayOverlay(_screen->getPalette(0), _screen->_grayOverlay, 32, 16, 0, 0, 128, true);
+	if (!_flags.use16ColorMode)
+		_screen->generateGrayOverlay(_screen->getPalette(0), _screen->_grayOverlay, 32, 16, 0, 0, 128, true);
 
 	_sceneDefaultUpdate = 0;
 	if (_screen->_fadeFlag == 3)
@@ -97,6 +98,9 @@
 	setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
 	setMouseCursorToItemInHand();
 
+	if (_flags.use16ColorMode)
+		_screen->fadeToPalette1(10);	
+
 	snd_playTrack(_curMusicTheme);
 }
 
@@ -353,12 +357,40 @@
 		}
 	}
 
+	if (_flags.use16ColorMode) {
+		if (_lastSpecialColor == 0x66)
+			//_lastSpecialColor = stricmp(file, "YVEL2") ? 0xcc : 0x44;
+			_lastSpecialColor = stricmp(file, "YVEL2") ? 0xc : 0x4;
+		else if (_lastSpecialColor == 0x6b)
+			//_lastSpecialColor = 0xcc;
+			_lastSpecialColor = 0xc;
+		else
+			//_lastSpecialColor = 0x44;
+			_lastSpecialColor = 0x4;
+	}
+
 	char fname[13];
+	const uint8 *v = 0;
+	int tlen = 0;
+
+	if (_flags.use16ColorMode) {
+		snprintf(fname, sizeof(fname), "%s.VCF", _lastSuppFile);
+		_screen->loadBitmap(fname, 3, 3, 0);
+		v = _screen->getCPagePtr(2);
+		tlen = READ_LE_UINT16(v) << 5;
+		v += 2;
+
+		if (_vcfBlocks)
+			delete[] _vcfBlocks;
+		_vcfBlocks = new uint8[tlen];
+
+		memcpy(_vcfBlocks, v, tlen);
+	}
+
 	snprintf(fname, sizeof(fname), "%s.VCN", _lastSuppFile);
-
 	_screen->loadBitmap(fname, 3, 3, 0);
-	const uint8 *v = _screen->getCPagePtr(2);
-	int tlen = READ_LE_UINT16(v);
+	v = _screen->getCPagePtr(2);
+	tlen = READ_LE_UINT16(v);
 	v += 2;
 
 	if (vcnLen == -1)
@@ -373,15 +405,27 @@
 	_vcnShift = new uint8[tlen];
 
 	memcpy(_vcnShift, v, tlen);
-	v += tlen;
+	v += tlen;	
 
-	memcpy(_vcnExpTable, v, 128);
-	v += 128;
+	if (_flags.use16ColorMode) {
+		_screen->getPalette(0).fill(0, 16, 0xff);
+		_screen->loadPalette("LOL.NOL", _screen->getPalette(0));
 
-	if (_lastOverridePalFilePtr) {
-		_res->loadFileToBuf(_lastOverridePalFilePtr, _screen->getPalette(0).getData(), 384);
+		/*static const uint8 colTable[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+		Palette &pl = _screen->getPalette(0);
+		for (int i = 15; i >= 0; i--)			
+			pl.copy(pl, i, 1, colTable[i]);*/
+
+		v += 128;
 	} else {
-		_screen->getPalette(0).copy(v, 0, 128);
+		memcpy(_vcnExpTable, v, 128);
+		v += 128;
+
+		if (_lastOverridePalFilePtr) {
+			_res->loadFileToBuf(_lastOverridePalFilePtr, _screen->getPalette(0).getData(), 384);
+		} else {
+			_screen->getPalette(0).copy(v, 0, 128);
+		}
 	}
 
 	v += 384;
@@ -433,6 +477,26 @@
 	for (int i = 0; i < 256; i++)
 		_screen->getLevelOverlay(7)[i] = i & 0xff;
 
+	if (_flags.use16ColorMode) {
+		//_screen->getLevelOverlay(6)[0xee] = 0xee;
+		//if (_lastSpecialColor == 0x44)			
+		//	_screen->getLevelOverlay(5)[0xee] = 0xee;
+		_screen->getLevelOverlay(6)[0xe] = 0xe;
+		if (_lastSpecialColor == 0x4)			
+			_screen->getLevelOverlay(5)[0xe] = 0xe;
+
+		for (int i = 0; i < 7; i++)
+			memcpy(_screen->getLevelOverlay(i), _screen->getLevelOverlay(i + 1), 256);
+
+		//static const uint8 colTable[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+		
+		for (int i = 0; i < 8; i++) {
+			uint8 *pl = _screen->getLevelOverlay(7 - i);
+			for (int ii = 15; ii >= 0; ii--)
+				_vcnExpTable[((7 - i) << 4) + ii] = pl[/*colTable[*/ii/*]*/];
+		}
+	}
+
 	_loadSuppFilesFlag = 0;
 	generateBrightnessPalette(_screen->getPalette(0), _screen->getPalette(1), _brightness, _lampEffect);
 

Modified: scummvm/trunk/engines/kyra/screen_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen_lol.cpp	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/screen_lol.cpp	2009-09-19 13:17:55 UTC (rev 44195)
@@ -172,7 +172,7 @@
 	uint8 *d = ovl;
 	*d++ = 0;
 
-	for (int i = 1; i != 255; i++) {
+	for (int i = 1; i != srcPal.getNumColors() - 1; i++) {
 		uint16 a = srcPal[i * 3];
 		uint8 dr = a - ((((a - r) * (weight >> 1)) << 1) >> 8);
 		a = srcPal[i * 3 + 1];
@@ -320,13 +320,18 @@
 	if (_fadeFlag == 1)
 		return;
 
-	Palette tpal(getPalette(0).getNumColors());
-	tpal.copy(getPalette(0), 128);
+	if (_use16ColorMode) {
+		fadeToBlack(delay);
+		fillRect(112, 0, 288, 120, 68);
+	} else {
+		Palette tpal(getPalette(0).getNumColors());
+		tpal.copy(getPalette(0), 128);
 
-	loadSpecialColors(tpal);
-	fadePalette(tpal, delay);
+		loadSpecialColors(tpal);
+		fadePalette(tpal, delay);
 
-	fillRect(112, 0, 288, 120, 0);
+		fillRect(112, 0, 288, 120, 0);
+	}
 
 	_fadeFlag = 1;
 }
@@ -809,6 +814,9 @@
 }
 
 void Screen_LoL::loadSpecialColors(Palette &dst) {
+	if (_use16ColorMode)
+		return;
+	
 	dst.copy(*_screenPalette, 192, 4);
 }
 

Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/script_tim.cpp	2009-09-19 13:17:55 UTC (rev 44195)
@@ -964,20 +964,26 @@
 		anim->wsa->open(file, wsaOpenFlags, &_screen->getPalette(3));
 	}
 
-	if (wsaFlags & 1) {
-		if (_screen->_fadeFlag != 1)
-			_screen->fadeClearSceneWindow(10);
-		_screen->getPalette(3).copy(_screen->getPalette(0), 128, 128);
-	} else if (wsaFlags & 2) {
-		_screen->fadeToBlack(10);
+	if (!_vm->_flags.use16ColorMode) {
+		if (wsaFlags & 1) {
+			if (_screen->_fadeFlag != 1)
+				_screen->fadeClearSceneWindow(10);
+			_screen->getPalette(3).copy(_screen->getPalette(0), 128, 128);
+		} else if (wsaFlags & 2) {
+			_screen->fadeToBlack(10);
+		}
 	}
 
 	if (wsaFlags & 7)
 		anim->wsa->displayFrame(0, 0, x, y, 0, 0, 0);
 
 	if (wsaFlags & 3) {
-		_screen->loadSpecialColors(_screen->getPalette(3));
-		_screen->fadePalette(_screen->getPalette(3), 10);
+		if (_vm->_flags.use16ColorMode) {
+			_vm->setPaletteBrightness(_screen->getPalette(0), _vm->_brightness, _vm->_lampEffect);
+		} else {
+			_screen->loadSpecialColors(_screen->getPalette(3));
+			_screen->fadePalette(_screen->getPalette(3), 10);
+		}
 		_screen->_fadeFlag = 0;
 	}
 

Modified: scummvm/trunk/engines/kyra/sound_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sound_lol.cpp	2009-09-19 09:30:51 UTC (rev 44194)
+++ scummvm/trunk/engines/kyra/sound_lol.cpp	2009-09-19 13:17:55 UTC (rev 44195)
@@ -259,20 +259,19 @@
 
 void LoLEngine::snd_loadSoundFile(int track) {
 	if (_sound->musicEnabled()) {
-		char filename[13];
-		int t = (track - 250) * 3;
-
-		if (_curMusicFileIndex != _musicTrackMap[t] || _curMusicFileExt != (char)_musicTrackMap[t + 1]) {
-			snd_stopMusic();
-			snprintf(filename, sizeof(filename), "LORE%02d%c", _musicTrackMap[t], (char)_musicTrackMap[t + 1]);
-			_sound->loadSoundFile(filename);
-			_curMusicFileIndex = _musicTrackMap[t];
-			_curMusicFileExt = (char)_musicTrackMap[t + 1];
-		} else {
-			snd_stopMusic();
+		if (_flags.platform != Common::kPlatformPC98) {
+			int t = (track - 250) * 3;
+			if (_curMusicFileIndex != _musicTrackMap[t] || _curMusicFileExt != (char)_musicTrackMap[t + 1]) {
+				snd_stopMusic();
+				char filename[13];
+				snprintf(filename, sizeof(filename), "LORE%02d%c", _musicTrackMap[t], (char)_musicTrackMap[t + 1]);
+				_sound->loadSoundFile(filename);
+				_curMusicFileIndex = _musicTrackMap[t];
+				_curMusicFileExt = (char)_musicTrackMap[t + 1];
+			} else {
+				snd_stopMusic();
+			}
 		}
-	} else {
-		//XXX
 	}
 }
 
@@ -284,9 +283,13 @@
 	_lastMusicTrack = track;
 
 	if (_sound->musicEnabled()) {
-		snd_loadSoundFile(track);
-		int t = (track - 250) * 3;
-		_sound->playTrack(_musicTrackMap[t + 2]);
+		if (_flags.platform == Common::kPlatformPC98) {
+			_sound->playTrack(track - 249);
+		} else {
+			snd_loadSoundFile(track);
+			int t = (track - 250) * 3;
+			_sound->playTrack(_musicTrackMap[t + 2]);
+		}
 	}
 
 	return res;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list