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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Mon Sep 24 01:37:01 CEST 2007


Revision: 29078
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29078&view=rev
Author:   lordhoto
Date:     2007-09-23 16:37:01 -0700 (Sun, 23 Sep 2007)

Log Message:
-----------
Added command to enable screen debug functionallity. (instead of the old compile time enabling)

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

Modified: scummvm/trunk/engines/kyra/debugger.cpp
===================================================================
--- scummvm/trunk/engines/kyra/debugger.cpp	2007-09-23 23:00:54 UTC (rev 29077)
+++ scummvm/trunk/engines/kyra/debugger.cpp	2007-09-23 23:37:01 UTC (rev 29078)
@@ -33,6 +33,30 @@
 
 namespace Kyra {
 
+Debugger::Debugger(KyraEngine *vm)
+	: GUI::Debugger() {
+	_vm = vm;
+
+	DCmd_Register("screen_debug_mode",	WRAP_METHOD(Debugger, cmd_setScreenDebug));
+}
+
+bool Debugger::cmd_setScreenDebug(int argc, const char **argv) {
+	if (argc > 1) {
+		if (scumm_stricmp(argv[1], "enable") == 0)
+			_vm->screen()->enableScreenDebug(true);
+		else if (scumm_stricmp(argv[1], "disable") == 0)
+			_vm->screen()->enableScreenDebug(false);
+		else
+			DebugPrintf("Use screen_debug_mode <enable/disable> to enable or disable it.\n");
+	} else {
+		DebugPrintf("Screen debug mode is %s.\n", (_vm->screen()->queryScreenDebug() ? "enabled" : "disabled"));
+		DebugPrintf("Use screen_debug_mode <enable/disable> to enable or disable it.\n");
+	}
+	return true;
+}
+
+#pragma mark -
+
 Debugger_v1::Debugger_v1(KyraEngine_v1 *vm)
 	: Debugger(vm) {
 	_vm = vm;

Modified: scummvm/trunk/engines/kyra/debugger.h
===================================================================
--- scummvm/trunk/engines/kyra/debugger.h	2007-09-23 23:00:54 UTC (rev 29077)
+++ scummvm/trunk/engines/kyra/debugger.h	2007-09-23 23:37:01 UTC (rev 29078)
@@ -35,8 +35,13 @@
 
 class Debugger : public GUI::Debugger {
 public:
-	Debugger(KyraEngine *vm) {}
+	Debugger(KyraEngine *vm);
 	virtual ~Debugger() {}  // we need this for __SYMBIAN32__ archaic gcc/UIQ
+
+protected:
+	KyraEngine *_vm;
+
+	bool cmd_setScreenDebug(int argc, const char **argv);
 };
 
 class Debugger_v1 : public Debugger {

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2007-09-23 23:00:54 UTC (rev 29077)
+++ scummvm/trunk/engines/kyra/screen.cpp	2007-09-23 23:37:01 UTC (rev 29078)
@@ -86,6 +86,7 @@
 bool Screen::init() {
 	debugC(9, kDebugLevelScreen, "Screen::init()");
 	_disableScreen = false;
+	_debugEnabled = false;
 
 	_system->setFeatureState(OSystem::kFeatureAutoComputeDirtyRects, false);
 
@@ -94,38 +95,8 @@
 	_useSJIS = false;
 	_sjisTempPage = _sjisFontData = 0;
 
-	if (_vm->gameFlags().useHiResOverlay) {
-		_system->beginGFXTransaction();
-			_vm->initCommonGFX(true);
-			_system->initSize(640, 400);
-		_system->endGFXTransaction();
+	setResolution();
 
-		for (int i = 0; i < SCREEN_OVLS_NUM; ++i) {
-			_sjisOverlayPtrs[i] = new uint8[SCREEN_OVL_SJIS_SIZE];
-			assert(_sjisOverlayPtrs[i]);
-			memset(_sjisOverlayPtrs[i], 0x80, SCREEN_OVL_SJIS_SIZE);
-		}
-		_useOverlays = true;
-		_useSJIS = (_vm->gameFlags().lang == Common::JA_JPN);
-
-		if (_useSJIS) {
-			_sjisFontData = _vm->resource()->fileData("FMT_FNT.ROM", 0);
-			if (!_sjisFontData)
-				error("missing font rom ('FMT_FNT.ROM') required for this version");
-			_sjisTempPage = new uint8[420];
-			assert(_sjisTempPage);
-			_sjisTempPage2 = _sjisTempPage + 60;
-			_sjisSourceChar = _sjisTempPage + 384;
-		}
-	} else {
-		_system->beginGFXTransaction();
-			_vm->initCommonGFX(false);
-			//for debug reasons (see Screen::updateScreen)
-			//_system->initSize(640, 200);
-			_system->initSize(320, 200);
-		_system->endGFXTransaction();
-	}
-
 	_curPage = 0;
 	for (int pageNum = 0; pageNum < SCREEN_PAGE_NUM; pageNum += 2) {
 		uint8 *pagePtr = new uint8[SCREEN_PAGE_SIZE];
@@ -194,6 +165,69 @@
 	return true;
 }
 
+bool Screen::enableScreenDebug(bool enable) {
+	bool temp = _debugEnabled;
+
+	if (_debugEnabled != enable) {
+		_debugEnabled = enable;
+		setResolution();
+		_forceFullUpdate = true;
+		updateScreen();
+	}
+
+	return temp;
+}
+
+void Screen::setResolution() {
+	byte palette[4*256];
+	_system->grabPalette(palette, 0, 256);
+
+	if (_vm->gameFlags().useHiResOverlay) {
+		_system->beginGFXTransaction();
+			_vm->initCommonGFX(true);
+			if (_debugEnabled)
+				_system->initSize(960, 400);
+			else
+				_system->initSize(640, 400);
+		_system->endGFXTransaction();
+
+		for (int i = 0; i < SCREEN_OVLS_NUM; ++i) {
+			if (!_sjisOverlayPtrs[i]) {
+				_sjisOverlayPtrs[i] = new uint8[SCREEN_OVL_SJIS_SIZE];
+				assert(_sjisOverlayPtrs[i]);
+				memset(_sjisOverlayPtrs[i], 0x80, SCREEN_OVL_SJIS_SIZE);
+			}
+		}
+		_useOverlays = true;
+		_useSJIS = (_vm->gameFlags().lang == Common::JA_JPN);
+
+		if (_useSJIS) {
+			if (!_sjisFontData) {
+				_sjisFontData = _vm->resource()->fileData("FMT_FNT.ROM", 0);
+				if (!_sjisFontData)
+					error("missing font rom ('FMT_FNT.ROM') required for this version");
+			}
+
+			if (!_sjisTempPage) {
+				_sjisTempPage = new uint8[420];
+				assert(_sjisTempPage);
+				_sjisTempPage2 = _sjisTempPage + 60;
+				_sjisSourceChar = _sjisTempPage + 384;
+			}
+		}
+	} else {
+		_system->beginGFXTransaction();
+			_vm->initCommonGFX(false);
+			if (_debugEnabled)
+				_system->initSize(640, 200);
+			else
+				_system->initSize(320, 200);
+		_system->endGFXTransaction();
+	}
+
+	_system->setPalette(palette, 0, 256);
+}
+
 void Screen::updateScreen() {
 	debugC(9, kDebugLevelScreen, "Screen::updateScreen()");
 	if (_disableScreen)
@@ -204,8 +238,13 @@
 	else
 		updateDirtyRects();
 
-	//for debug reasons (needs 640x200 screen)
-	//_system->copyRectToScreen(getPagePtr(2), SCREEN_W, 320, 0, SCREEN_W, SCREEN_H);
+	if (_debugEnabled) {
+		if (!_useOverlays)
+			_system->copyRectToScreen(getPagePtr(2), SCREEN_W, 320, 0, SCREEN_W, SCREEN_H);
+		else
+			_system->copyRectToScreen(getPagePtr(2), SCREEN_W, 640, 0, SCREEN_W, SCREEN_H);
+	}
+
 	_system->updateScreen();
 }
 

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2007-09-23 23:00:54 UTC (rev 29077)
+++ scummvm/trunk/engines/kyra/screen.h	2007-09-23 23:37:01 UTC (rev 29078)
@@ -99,6 +99,10 @@
 
 	void updateScreen();
 
+	// debug functions
+	bool queryScreenDebug() const { return _debugEnabled; }
+	bool enableScreenDebug(bool enable);
+
 	// page cur. functions
 	int setCurPage(int pageNum);
 
@@ -307,6 +311,12 @@
 
 	OSystem *_system;
 	KyraEngine *_vm;
+
+	// init
+	virtual void setResolution();
+
+	// debug
+	bool _debugEnabled;
 };
 
 } // End of namespace Kyra


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