[Scummvm-cvs-logs] SF.net SVN: scummvm: [22359] scummvm/trunk/engines/simon

kirben at users.sourceforge.net kirben at users.sourceforge.net
Thu May 4 22:54:02 CEST 2006


Revision: 22359
Author:   kirben
Date:     2006-05-04 22:53:36 -0700 (Thu, 04 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22359&view=rev

Log Message:
-----------
Match fade code of original games and minor cleanup

Modified Paths:
--------------
    scummvm/trunk/engines/simon/debug.cpp
    scummvm/trunk/engines/simon/draw.cpp
    scummvm/trunk/engines/simon/intern.h
    scummvm/trunk/engines/simon/items.cpp
    scummvm/trunk/engines/simon/simon.cpp
    scummvm/trunk/engines/simon/simon.h
    scummvm/trunk/engines/simon/vga.cpp
Modified: scummvm/trunk/engines/simon/debug.cpp
===================================================================
--- scummvm/trunk/engines/simon/debug.cpp	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/debug.cpp	2006-05-05 05:53:36 UTC (rev 22359)
@@ -380,7 +380,7 @@
 		return;
 #endif
 
-	dump_bitmap(buf, offs, w, h, 0, _palette, base);
+	dump_bitmap(buf, offs, w, h, 0, _displayPalette, base);
 }
 
 void pal_load(byte *pal, const byte *vga1, int a, int b) {

Modified: scummvm/trunk/engines/simon/draw.cpp
===================================================================
--- scummvm/trunk/engines/simon/draw.cpp	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/draw.cpp	2006-05-05 05:53:36 UTC (rev 22359)
@@ -423,11 +423,11 @@
 }
 
 void SimonEngine::dx_update_screen_and_palette() {
-	if (_paletteColorCount == 0 && _paletteFlag == 1) {
+	if (_fastFadeInFlag == 0 && _paletteFlag == 1) {
 		_paletteFlag = 0;
-		if (memcmp(_palette, _paletteBackup, 1024) != 0) {
-			memcpy(_paletteBackup, _palette, 1024);
-			_system->setPalette(_palette, 0, 256);
+		if (memcmp(_displayPalette, _currentPalette, 1024)) {
+			memcpy(_currentPalette, _displayPalette, 1024);
+			_system->setPalette(_displayPalette, 0, 256);
 		}
 	}
 
@@ -440,7 +440,7 @@
 		scrollScreen();
 	}
 
-	if (_paletteColorCount != 0) {
+	if (_fastFadeInFlag) {
 		if (getGameType() == GType_SIMON1 && _usePaletteDelay) {
 			delay(100);
 			_usePaletteDelay = false;
@@ -450,13 +450,13 @@
 }
 
 void SimonEngine::fastFadeIn() {
-	if (_paletteColorCount & 0x8000) {
+	if (_fastFadeInFlag & 0x8000) {
 		slowFadeIn();
 	} else {
 		_paletteFlag = false;
-		memcpy(_paletteBackup, _palette, 1024);
-		_system->setPalette(_palette, 0, _paletteColorCount);
-		_paletteColorCount = 0;
+		memcpy(_currentPalette, _displayPalette, 1024);
+		_system->setPalette(_displayPalette, 0, _fastFadeInFlag);
+		_fastFadeInFlag = 0;
 	}
 }
 
@@ -464,30 +464,28 @@
 	uint8 *src, *dst;
 	int c, p;
 
-	_paletteColorCount &= 0x7fff;
+	_fastFadeInFlag &= 0x7fff;
 	_paletteFlag = false;
 
-	memcpy(_videoBuf1, _palette, 768);
 	memset(_videoBuf1, 0, 768);
+	memcpy(_currentPalette, _displayPalette, 768);
+	memcpy(_videoBuf1 + 768, _displayPalette, 768);
 
-	memcpy(_paletteBackup, _palette, 768);
-	memcpy(_videoBuf1 + 768, _palette, 768);
-
 	for (c = 255; c >= 0; c -= 4) {
 	  	src = _videoBuf1 + 768;
  		dst = _videoBuf1;
 
-		for (p = _paletteColorCount; p !=0 ; p--) {
+		for (p = _fastFadeInFlag; p !=0 ; p--) {
 			if (*src >= c)
 				*dst = *dst + 4;
 			
 			src++;
 			dst++;
  		}
- 		_system->setPalette(_videoBuf1, 0, _videoNumPalColors);
+ 		_system->setPalette(_videoBuf1, 0, _fastFadeCount);
  		delay(5);
  	}
-	_paletteColorCount = 0;
+	_fastFadeInFlag = 0;
 }
 
 } // End of namespace Simon

Modified: scummvm/trunk/engines/simon/intern.h
===================================================================
--- scummvm/trunk/engines/simon/intern.h	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/intern.h	2006-05-05 05:53:36 UTC (rev 22359)
@@ -65,12 +65,6 @@
 	Item() { memset(this, 0, sizeof(*this)); }
 };
 
-struct Subroutine {
-	uint16 id;								/* subroutine ID */
-	uint16 first;								/* offset from subroutine start to first subroutine line */
-	Subroutine *next;							/* next subroutine in linked list */
-};
-
 struct IconEntry {
 	Item *item;
 	uint16 boxCode;
@@ -100,37 +94,17 @@
 // the actual x-coordinate is: textColumn * 8 + textColumnOffset
 // the actual y-coordinate is: textRow * 8
 
-
-enum BoxFlags {
-	kBFTextBox        = 0x1,
-	kBFBoxSelected    = 0x2,
-	kBFNoTouchName    = 0x4,
-	kBFInvertTouch    = 0x8,
-	kBFDragBox        = 0x10, // Simon 1/2
-	kBFHyperBox       = 0x10, // Feeble Files
-	kBFBoxInUse       = 0x20,
-	kBFBoxDead        = 0x40,
-	kBFBoxItem        = 0x80
-};
-
-enum SubObjectFlags {
-	kOFText           = 0x1,
-	kOFSize           = 0x2,
-	kOFWeight         = 0x4,
-	kOFVolume         = 0x8,
-	kOFIcon           = 0x10,
-	kOFKeyColor1      = 0x20,
-	kOFKeyColor2      = 0x40,
-	kOFMenu           = 0x80,
-	kOFNumber         = 0x100,
-	kOFVoice          = 0x200
-};
-
 enum {
 	SUBROUTINE_LINE_SMALL_SIZE = 2,
 	SUBROUTINE_LINE_BIG_SIZE = 8
 };
 
+struct Subroutine {
+	uint16 id;								/* subroutine ID */
+	uint16 first;								/* offset from subroutine start to first subroutine line */
+	Subroutine *next;							/* next subroutine in linked list */
+};
+
 struct SubroutineLine {
 	uint16 next;
 	int16 verb;
@@ -154,8 +128,31 @@
  #endif
 };
 
-} // End of namespace Simon
+enum BoxFlags {
+	kBFTextBox        = 0x1,
+	kBFBoxSelected    = 0x2,
+	kBFNoTouchName    = 0x4,
+	kBFInvertTouch    = 0x8,
+	kBFDragBox        = 0x10, // Simon 1/2
+	kBFHyperBox       = 0x10, // Feeble Files
+	kBFBoxInUse       = 0x20,
+	kBFBoxDead        = 0x40,
+	kBFBoxItem        = 0x80
+};
 
+enum SubObjectFlags {
+	kOFText           = 0x1,
+	kOFSize           = 0x2,
+	kOFWeight         = 0x4,
+	kOFVolume         = 0x8,
+	kOFIcon           = 0x10,
+	kOFKeyColor1      = 0x20,
+	kOFKeyColor2      = 0x40,
+	kOFMenu           = 0x80,
+	kOFNumber         = 0x100,
+	kOFVoice          = 0x200
+};
+
 enum GameFeatures {
 	GF_TALKIE     = 1 << 0,
 	GF_OLD_BUNDLE = 1 << 1,
@@ -232,4 +229,6 @@
 	GID_FEEBLEFILES_DE
 };
 
+} // End of namespace Simon
+
 #endif

Modified: scummvm/trunk/engines/simon/items.cpp
===================================================================
--- scummvm/trunk/engines/simon/items.cpp	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/items.cpp	2006-05-05 05:53:36 UTC (rev 22359)
@@ -1622,20 +1622,18 @@
 	// 187: fade to black
 	uint i;
 
-	memcpy(_videoBuf1, _paletteBackup, 1024);
+	memcpy(_videoBuf1, _currentPalette, 1024);
 
-	i = NUM_PALETTE_FADEOUT;
-	do {
-		paletteFadeOut((uint32 *)_videoBuf1, 32);
-		paletteFadeOut((uint32 *)_videoBuf1 + 32 + 16, 144);
-		paletteFadeOut((uint32 *)_videoBuf1 + 32 + 16 + 144 + 16, 48);
-
+	for (i = 32; i != 0; --i) {
+		paletteFadeOut(_videoBuf1, 32, 4);
+		paletteFadeOut(_videoBuf1 + 64, 144, 4);
+		paletteFadeOut(_videoBuf1 + 128, 48, 4);
 		_system->setPalette(_videoBuf1, 0, 256);
 		delay(5);
-	} while (--i);
+	}
 
-	memcpy(_paletteBackup, _videoBuf1, 1024);
-	memcpy(_palette, _videoBuf1, 1024);
+	memcpy(_currentPalette, _videoBuf1, 1024);
+	memcpy(_displayPalette, _videoBuf1, 1024);
 }
 
 // -----------------------------------------------------------------------
@@ -2132,9 +2130,9 @@
 	uint g = getVarOrByte();
 	uint b = getVarOrByte();
 
-	_palette[c + 0] = r;
-	_palette[c + 1] = g;
-	_palette[c + 2] = b;
+	_displayPalette[c + 0] = r;
+	_displayPalette[c + 1] = g;
+	_displayPalette[c + 2] = b;
 
 	_paletteFlag = 2;
 }

Modified: scummvm/trunk/engines/simon/simon.cpp
===================================================================
--- scummvm/trunk/engines/simon/simon.cpp	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/simon.cpp	2006-05-05 05:53:36 UTC (rev 22359)
@@ -241,7 +241,7 @@
 	_scrollUpHitArea = 0;
 	_scrollDownHitArea = 0;
 
-	_paletteColorCount = 0;
+	_fastFadeInFlag = 0;
 
 	_noOverWrite = 0;
 	_rejectCount = 0;
@@ -259,7 +259,7 @@
 	_showPreposition = 0;
 	_showMessageFlag = 0;
 
-	_videoNumPalColors = 0;
+	_fastFadeCount = 0;
 
 	_vgaSpriteChanged = 0;
 
@@ -334,8 +334,8 @@
 	_PVCount1 = 0;
 	_GPVCount1 = 0;
 
-	memset(_paletteBackup, 0, sizeof(_paletteBackup));
-	memset(_palette, 0, sizeof(_palette));
+	memset(_currentPalette, 0, sizeof(_currentPalette));
+	memset(_displayPalette, 0, sizeof(_displayPalette));
 
 	memset(_videoBuf1, 0, sizeof(_videoBuf1));
 
@@ -629,20 +629,20 @@
 	}
 }
 
-void SimonEngine::paletteFadeOut(uint32 *pal_values, uint num) {
-	byte *p = (byte *)pal_values;
+void SimonEngine::paletteFadeOut(byte *palPtr, uint num, uint size) {
+	byte *p = palPtr;
 
 	do {
-		if (p[0] >= 8)
-			p[0] -= 8;
+		if (p[0] >= size)
+			p[0] -= size;
 		else
 			p[0] = 0;
-		if (p[1] >= 8)
-			p[1] -= 8;
+		if (p[1] >= size)
+			p[1] -= size;
 		else
 			p[1] = 0;
-		if (p[2] >= 8)
-			p[2] -= 8;
+		if (p[2] >= size)
+			p[2] -= size;
 		else
 			p[2] = 0;
 		p += 4;
@@ -1541,7 +1541,7 @@
 	if (getGameType() == GType_SIMON1) {
 		if (_unkPalFlag) {
 			_unkPalFlag = false;
-			while (_paletteColorCount != 0) {
+			while (_fastFadeInFlag != 0) {
 				delay(10);
 			}
 		}

Modified: scummvm/trunk/engines/simon/simon.h
===================================================================
--- scummvm/trunk/engines/simon/simon.h	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/simon.h	2006-05-05 05:53:36 UTC (rev 22359)
@@ -43,7 +43,6 @@
 uint fileReadItemID(Common::File *in);
 
 #define CHECK_BOUNDS(x, y) assert((uint)(x) < ARRAYSIZE(y))
-#define NUM_PALETTE_FADEOUT 32
 
 struct Child;
 struct SubObject;
@@ -343,7 +342,11 @@
 	uint16 _scrollUpHitArea;
 	uint16 _scrollDownHitArea;
 
-	volatile uint16 _paletteColorCount;
+	bool _fastFadeOutFlag;
+	bool _unkPalFlag;
+	byte _paletteFlag;
+	uint _fastFadeCount;
+	volatile uint16 _fastFadeInFlag;
 
 	int _screenWidth, _screenHeight;
 
@@ -351,10 +354,7 @@
 	byte _rejectCount;
 	bool _rejectBlock;
 
-	bool _fastFadeOutFlag;
-	bool _unkPalFlag;
 	bool _exitCutscene;
-	byte _paletteFlag;
 
 	uint _soundFileId;
 	int16 _lastMusicPlayed;
@@ -363,8 +363,6 @@
 	bool _showPreposition;
 	bool _showMessageFlag;
 
-	uint _videoNumPalColors;
-
 	uint _vgaSpriteChanged;
 
 	byte *_vgaBufFreeStart, *_vgaBufEnd, *_vgaBufStart;
@@ -431,8 +429,8 @@
 	uint16 _PVCount1;
 	uint16 _GPVCount1;
 
-	uint8 _paletteBackup[1024];
-	uint8 _palette[1024];
+	uint8 _currentPalette[1024];
+	uint8 _displayPalette[1024];
 
 	byte _videoBuf1[3000];
 
@@ -502,7 +500,7 @@
 	void loadSound(uint sound, int pan, int vol, uint type);
 	void loadVoice(uint speechId);
 
-	void paletteFadeOut(uint32 *pal_values, uint num);
+	void paletteFadeOut(byte *palPtr, uint num, uint size = 8);
 	
 	byte *allocateItem(uint size);
 	byte *allocateTable(uint size);

Modified: scummvm/trunk/engines/simon/vga.cpp
===================================================================
--- scummvm/trunk/engines/simon/vga.cpp	2006-05-05 00:42:37 UTC (rev 22358)
+++ scummvm/trunk/engines/simon/vga.cpp	2006-05-05 05:53:36 UTC (rev 22359)
@@ -301,7 +301,7 @@
 	uint16 count, num, res;
 	byte *old_file_1, *old_file_2;
 	byte *b, *bb;
-	const byte *vc_ptr_org;
+	const byte *vcPtrOrg;
 
 	num = vcReadVarOrWord();
 
@@ -349,7 +349,7 @@
 		assert(READ_BE_UINT16(&((ImageHeader_Simon *) b)->id) == num);
 	}
 
-	vc_ptr_org = _vcPtr;
+	vcPtrOrg = _vcPtr;
 
 	if (getGameType() == GType_FF) {
 		_vcPtr = _curVgaFile1 + READ_LE_UINT16(&((ImageHeader_Feeble *) b)->scriptOffs);
@@ -363,7 +363,7 @@
 	_curVgaFile1 = old_file_1;
 	_curVgaFile2 = old_file_2;
 
-	_vcPtr = vc_ptr_org;
+	_vcPtr = vcPtrOrg;
 }
 
 void SimonEngine::vc3_loadSprite() {
@@ -1622,7 +1622,7 @@
 		palSize = 768;
 	}
 
-	palptr = &_palette[(a * 64)];
+	palptr = &_displayPalette[(a * 64)];
 	src = _curVgaFile1 + 6 + b * palSize;
 
 	do {
@@ -2130,7 +2130,7 @@
 void SimonEngine::vc58() {
 	uint16 sprite = _vgaCurSpriteId;
 	uint16 file = _vgaCurZoneNum;
-	const byte *vc_ptr_org;
+	const byte *vcPtrOrg;
 	uint16 tmp;
 
 	_vgaCurZoneNum = vcReadNextWord();
@@ -2138,11 +2138,11 @@
 
 	tmp = to16Wrapper(vcReadNextWord());
 
-	vc_ptr_org = _vcPtr;
+	vcPtrOrg = _vcPtr;
 	_vcPtr = (byte *)&tmp;
 	vc23_setSpritePriority();
 
-	_vcPtr = vc_ptr_org;
+	_vcPtr = vcPtrOrg;
 	_vgaCurSpriteId = sprite;
 	_vgaCurZoneNum = file;
 }
@@ -2156,11 +2156,11 @@
 	VgaSleepStruct *vfs;
 	VgaSprite *vsp;
 	VgaTimerEntry *vte;
-	const byte *vc_ptr_org;
+	const byte *vcPtrOrg;
 
 	old_sprite_id = _vgaCurSpriteId;
 	old_cur_file_id = _vgaCurZoneNum;
-	vc_ptr_org = _vcPtr;
+	vcPtrOrg = _vcPtr;
 
 	_vgaCurZoneNum = file;
 	_vgaCurSpriteId = sprite;
@@ -2193,7 +2193,7 @@
 
 	_vgaCurZoneNum = old_cur_file_id;
 	_vgaCurSpriteId = old_sprite_id;
-	_vcPtr = vc_ptr_org;
+	_vcPtr = vcPtrOrg;
 }
 
 void SimonEngine::vc60_killSprite() {
@@ -2221,23 +2221,32 @@
 }
 
 void SimonEngine::vc62_fastFadeOut() {
-	uint i;
-
 	vc29_stopAllSounds();
 
 	if (!_fastFadeOutFlag) {
+		uint i, fadeSize, fadeCount;
+
 		_fastFadeOutFlag = true;
 
-		_videoNumPalColors = 256;
+		_fastFadeCount = 256;
 		if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
 			if (_windowNum == 4)
-				_videoNumPalColors = 208;
+				_fastFadeCount = 208;
 		}
 
-		memcpy(_videoBuf1, _paletteBackup, _videoNumPalColors * 4);
-		for (i = NUM_PALETTE_FADEOUT; i != 0; --i) {
-			paletteFadeOut((uint32 *)_videoBuf1, _videoNumPalColors);
-			_system->setPalette(_videoBuf1, 0, _videoNumPalColors);
+		memcpy(_videoBuf1, _currentPalette, _fastFadeCount * 4);
+
+		if (getGameType() == GType_FF && !getBitFlag(75)) {
+			fadeCount = 32;
+			fadeSize = 8;
+		} else {
+			fadeCount = 4;
+			fadeSize = 64;
+		}
+
+		for (i = fadeCount; i != 0; --i) {
+			paletteFadeOut(_videoBuf1, _fastFadeCount, fadeSize);
+			_system->setPalette(_videoBuf1, 0, _fastFadeCount);
 			delay(5);
 		}
 
@@ -2245,7 +2254,7 @@
 			uint16 params[5];						/* parameters to vc10_draw */
 			VgaSprite *vsp;
 			VgaPointersEntry *vpe;
-			const byte *vc_ptr_org = _vcPtr;
+			const byte *vcPtrOrg = _vcPtr;
 
 			vsp = _vgaSprites;
 			while (vsp->id != 0) {
@@ -2274,7 +2283,7 @@
 				}
 				vsp++;
 			}
-			_vcPtr = vc_ptr_org;
+			_vcPtr = vcPtrOrg;
 		}
 
 		// Allow one section of Simon the Sorcerer 1 introduction to be displayed
@@ -2295,11 +2304,11 @@
 
 void SimonEngine::vc63_fastFadeIn() {
 	if (getGameType() == GType_FF) {
-		_paletteColorCount = 256;
+		_fastFadeInFlag = 256;
 	} else {
-		_paletteColorCount = 208;
+		_fastFadeInFlag = 208;
 		if (_windowNum != 4) {
-			_paletteColorCount = 256;
+			_fastFadeInFlag = 256;
 		}
 	}
 	_fastFadeOutFlag = false;
@@ -2313,13 +2322,13 @@
 }
 
 void SimonEngine::vc65_slowFadeIn() {
-	_paletteColorCount = 624;
-	_videoNumPalColors = 208;
+	_fastFadeInFlag = 624;
+	_fastFadeCount = 208;
 	if (_windowNum != 4) {
-		_paletteColorCount = 768;
-		_videoNumPalColors = 256;
+		_fastFadeInFlag = 768;
+		_fastFadeCount = 256;
 	}
-	_paletteColorCount |= 0x8000;
+	_fastFadeInFlag |= 0x8000;
 	_fastFadeOutFlag = false;
 }
 


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