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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue May 22 15:44:42 CEST 2007


Revision: 26915
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26915&view=rev
Author:   lordhoto
Date:     2007-05-22 06:44:41 -0700 (Tue, 22 May 2007)

Log Message:
-----------
Some graphic fixes for FM-Towns version. (Thanks to Florian Kagerer for this).

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/screen.h

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2007-05-22 13:33:41 UTC (rev 26914)
+++ scummvm/trunk/engines/kyra/screen.cpp	2007-05-22 13:44:41 UTC (rev 26915)
@@ -63,10 +63,16 @@
 	}
 
 	delete [] _bitBlitRects;
+
 	for (int i = 0; i < ARRAYSIZE(_saveLoadPage); ++i) {
 		delete [] _saveLoadPage[i];
 		_saveLoadPage[i] = 0;
 	}
+	
+	for (int i = 0; i < ARRAYSIZE(_saveLoadPageOvl); ++i) {
+		delete [] _saveLoadPageOvl[i];
+		_saveLoadPageOvl[i] = 0;
+	}
 
 	delete [] _unkPtr1;
 	delete [] _unkPtr2;
@@ -168,6 +174,7 @@
 	memset(_bitBlitRects, 0, sizeof(Rect)*BITBLIT_RECTS);
 	_bitBlitNum = 0;
 	memset(_saveLoadPage, 0, sizeof(_saveLoadPage));
+	memset(_saveLoadPageOvl, 0, sizeof(_saveLoadPageOvl));
 
 	_unkPtr1 = new uint8[getRectSize(1, 144)];
 	assert(_unkPtr1);
@@ -2377,20 +2384,50 @@
 		assert(_saveLoadPage[page/2]);
 	}
 	memcpy(_saveLoadPage[page/2], getPagePtr(page), SCREEN_W * SCREEN_H);
+
+	if (_useOverlays) {
+		if (!_saveLoadPageOvl[page/2]) {
+			_saveLoadPageOvl[page/2] = new uint8[SCREEN_OVL_SJIS_SIZE];
+			assert(_saveLoadPageOvl[page/2]);
+		}
+
+		uint8 *srcPage = getOverlayPtr(page);
+		if (!srcPage) {
+			warning("trying to save unsupported overlay page %d", page);
+			return;
+		}
+
+		memcpy(_saveLoadPageOvl[page/2], srcPage, SCREEN_OVL_SJIS_SIZE);
+	}
 }
 
 void Screen::loadPageFromDisk(const char *file, int page) {
 	debugC(9, kDebugLevelScreen, "Screen::loadPageFromDisk('%s', %d)", file, page);
 	copyBlockToPage(page, 0, 0, SCREEN_W, SCREEN_H, _saveLoadPage[page/2]);
-	clearOverlayRect(page, 0, 0, SCREEN_W, SCREEN_H);
 	delete [] _saveLoadPage[page/2];
-	_saveLoadPage[page/2] = 0;
+
+	if (_saveLoadPageOvl[page/2]) {
+		uint8 *dstPage = getOverlayPtr(page);
+		if (!dstPage) {
+			warning("trying to restore unsupported overlay page %d", page);
+			return;
+		}
+
+		memcpy(dstPage, _saveLoadPageOvl[page/2], SCREEN_OVL_SJIS_SIZE);
+		delete [] _saveLoadPageOvl[page/2];
+		_saveLoadPageOvl[page/2] = 0;
+	}	_saveLoadPage[page/2] = 0;
 }
 
 void Screen::deletePageFromDisk(int page) {
 	debugC(9, kDebugLevelScreen, "Screen::deletePageFromDisk(%d)", page);
 	delete [] _saveLoadPage[page/2];
 	_saveLoadPage[page/2] = 0;
+
+	if (_saveLoadPageOvl[page/2]) {
+		delete [] _saveLoadPageOvl[page/2];
+		_saveLoadPageOvl[page/2] = 0;
+	}
 }
 
 void Screen::blockInRegion(int x, int y, int width, int height) {

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2007-05-22 13:33:41 UTC (rev 26914)
+++ scummvm/trunk/engines/kyra/screen.h	2007-05-22 13:44:41 UTC (rev 26915)
@@ -282,6 +282,7 @@
 	uint8 *_sjisSourceChar;
 
 	uint8 *_saveLoadPage[8];
+	uint8 *_saveLoadPageOvl[8];
 
 	uint8 *_screenPalette;
 	uint8 *_palettes[6];


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