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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Mon Sep 24 23:58:11 CEST 2007


Revision: 29094
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29094&view=rev
Author:   lordhoto
Date:     2007-09-24 14:58:11 -0700 (Mon, 24 Sep 2007)

Log Message:
-----------
- added a new generic debugger command 'facings'
- added a few new kyra2 specific debugger commands

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/debugger.cpp
    scummvm/trunk/engines/kyra/debugger.h
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.h
    scummvm/trunk/engines/kyra/scene_v2.cpp
    scummvm/trunk/engines/kyra/screen_v2.h

Modified: scummvm/trunk/engines/kyra/debugger.cpp
===================================================================
--- scummvm/trunk/engines/kyra/debugger.cpp	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/debugger.cpp	2007-09-24 21:58:11 UTC (rev 29094)
@@ -39,6 +39,7 @@
 	_vm = vm;
 
 	DCmd_Register("screen_debug_mode",	WRAP_METHOD(Debugger, cmd_setScreenDebug));
+	DCmd_Register("facings",			WRAP_METHOD(Debugger, cmd_showFacings));
 }
 
 bool Debugger::cmd_setScreenDebug(int argc, const char **argv) {
@@ -56,6 +57,16 @@
 	return true;
 }
 
+bool Debugger::cmd_showFacings(int argc, const char **argv) {
+	DebugPrintf("Facing directions:\n");
+	DebugPrintf("7  0  1\n");
+	DebugPrintf(" \\ | / \n");
+	DebugPrintf("6--*--2\n");
+	DebugPrintf(" / | \\\n");
+	DebugPrintf("5  4  3\n");
+	return true;
+}
+
 #pragma mark -
 
 Debugger_v1::Debugger_v1(KyraEngine_v1 *vm)
@@ -96,13 +107,13 @@
 		if (argc > 2) {
 			direction = atoi(argv[2]);
 		} else {
-			if (_vm->_roomTable[room].northExit != 0xff)
+			if (_vm->_roomTable[room].northExit != 0xFFFF)
 				direction = 3;
-			else if (_vm->_roomTable[room].eastExit != 0xff)
+			else if (_vm->_roomTable[room].eastExit != 0xFFFF)
 				direction = 4;
-			else if (_vm->_roomTable[room].southExit != 0xff)
+			else if (_vm->_roomTable[room].southExit != 0xFFFF)
 				direction = 1;
-			else if (_vm->_roomTable[room].westExit != 0xff)
+			else if (_vm->_roomTable[room].westExit != 0xFFFF)
 				direction = 2;
 		}
 
@@ -216,7 +227,137 @@
 #pragma mark -
 
 Debugger_v2::Debugger_v2(KyraEngine_v2 *vm) : Debugger(vm), _vm(vm) {
+	DCmd_Register("continue",			WRAP_METHOD(Debugger_v2, Cmd_Exit));
+	DCmd_Register("character_info",		WRAP_METHOD(Debugger_v2, cmd_characterInfo));
+	DCmd_Register("enter",				WRAP_METHOD(Debugger_v2, cmd_enterScene));
+	DCmd_Register("rooms",				WRAP_METHOD(Debugger_v2, cmd_listScenes));	// for consistency with kyra_v1
+	DCmd_Register("scenes",				WRAP_METHOD(Debugger_v2, cmd_listScenes));
+	DCmd_Register("scene_info",			WRAP_METHOD(Debugger_v2, cmd_sceneInfo));
+	DCmd_Register("scene_to_facing",	WRAP_METHOD(Debugger_v2, cmd_sceneToFacing));
 }
 
+bool Debugger_v2::cmd_enterScene(int argc, const char **argv) {
+	uint direction = 0;
+	if (argc > 1) {
+		int scene = atoi(argv[1]);
+
+		// game will crash if entering a non-existent scene 
+		if (scene >= _vm->_sceneListSize) {
+			DebugPrintf("scene number must be any value between (including) 0 and %d\n", _vm->_sceneListSize-1);
+			return true;
+		}
+
+		if (argc > 2) {
+			direction = atoi(argv[2]);
+		} else {
+			if (_vm->_sceneList[scene].exit1 != 0xFFFF)
+				direction = 4;
+			else if (_vm->_sceneList[scene].exit2 != 0xFFFF)
+				direction = 6;
+			else if (_vm->_sceneList[scene].exit3 != 0xFFFF)
+				direction = 0;
+			else if (_vm->_sceneList[scene].exit4 != 0xFFFF)
+				direction = 2;
+		}
+
+		_vm->_system->hideOverlay();
+		_vm->_mainCharacter.facing = direction;
+
+		_vm->enterNewScene(scene, _vm->_mainCharacter.facing, 0, 0, 1);
+		_vm->_screen->_mouseLockCount = 0;
+
+		_detach_now = true;
+		return false;
+	}
+
+	DebugPrintf("Syntax: %d <scenenum> <direction>\n", argv[0]);
+	return true;
+}
+
+bool Debugger_v2::cmd_listScenes(int argc, const char **argv) {
+	int shown = 1;
+	for (int i = 0; i < _vm->_sceneListSize; ++i) {
+		if (_vm->_sceneList[i].filename[0]) {
+			DebugPrintf("%-2i: %-10s", i, _vm->_sceneList[i].filename);
+			if (!(shown % 5))
+				DebugPrintf("\n");
+			++shown;
+		}
+	}
+	DebugPrintf("\n");
+	DebugPrintf("Current scene: %i\n", _vm->_currentScene);
+	return true;
+}
+
+bool Debugger_v2::cmd_sceneInfo(int argc, const char **argv) {
+	DebugPrintf("Current scene: %d '%s'\n", _vm->_currentScene, _vm->_sceneList[_vm->_currentScene].filename);
+	DebugPrintf("\n");
+	DebugPrintf("Exit information:\n");
+	DebugPrintf("Exit1: leads to %d, position %dx%d\n", int16(_vm->_sceneExit1), _vm->_sceneEnterX1, _vm->_sceneEnterY1);
+	DebugPrintf("Exit2: leads to %d, position %dx%d\n", int16(_vm->_sceneExit2), _vm->_sceneEnterX2, _vm->_sceneEnterY2);
+	DebugPrintf("Exit3: leads to %d, position %dx%d\n", int16(_vm->_sceneExit3), _vm->_sceneEnterX3, _vm->_sceneEnterY3);
+	DebugPrintf("Exit4: leads to %d, position %dx%d\n", int16(_vm->_sceneExit4), _vm->_sceneEnterX4, _vm->_sceneEnterY4);
+	DebugPrintf("Special exit information:\n");
+	if (!_vm->_specialExitCount) {
+		DebugPrintf("No special exits.\n");
+	} else {
+		DebugPrintf("This scene has %d special exits.\n", _vm->_specialExitCount);
+		for (int i = 0; i < _vm->_specialExitCount; ++i) {
+			DebugPrintf("SpecialExit%d: facing %d, position (x1/y1/x2/y2): %d/%d/%d/%d\n", i,
+					_vm->_specialExitTable[20+i], _vm->_specialExitTable[0+i], _vm->_specialExitTable[5+i],
+					_vm->_specialExitTable[10+i], _vm->_specialExitTable[15+i]);
+		}
+	}
+
+	return true;
+}
+
+bool Debugger_v2::cmd_characterInfo(int argc, const char **argv) {
+	DebugPrintf("Main character is in scene: %d '%s'\n", _vm->_mainCharacter.sceneId, _vm->_sceneList[_vm->_mainCharacter.sceneId].filename);
+	DebugPrintf("Position: %dx%d\n", _vm->_mainCharacter.x1, _vm->_mainCharacter.y1);
+	DebugPrintf("Facing: %d\n", _vm->_mainCharacter.facing);
+	DebugPrintf("Inventory:\n");
+	for (int i = 0; i < 20; ++i) {
+		DebugPrintf("%-2d ", int8(_vm->_mainCharacter.inventory[i]));
+		if (i == 9 || i == 19)
+			DebugPrintf("\n");
+	}
+	return true;
+}
+
+bool Debugger_v2::cmd_sceneToFacing(int argc, const char **argv) {
+	if (argc == 2) {
+		int facing = atoi(argv[1]);
+		int16 exit = -1;
+
+		switch (facing) {
+		case 0: case 1: case 7:
+			exit = _vm->_sceneList[_vm->_currentScene].exit1;
+			break;
+
+		case 6:
+			exit = _vm->_sceneList[_vm->_currentScene].exit2;
+			break;
+
+		case 3: case 4: case 5:
+			exit = _vm->_sceneList[_vm->_currentScene].exit3;
+			break;
+
+		case 2:
+			exit = _vm->_sceneList[_vm->_currentScene].exit4;
+			break;
+
+		default:
+			break;
+		}
+
+		DebugPrintf("Exit to facing %d leads to room %d.\n", facing, exit);
+	} else {
+		DebugPrintf("Usage: %s <facing>\n", argv[0]);
+	}
+
+	return true;
+}
+
 } // End of namespace Kyra
 

Modified: scummvm/trunk/engines/kyra/debugger.h
===================================================================
--- scummvm/trunk/engines/kyra/debugger.h	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/debugger.h	2007-09-24 21:58:11 UTC (rev 29094)
@@ -43,6 +43,7 @@
 	KyraEngine *_vm;
 
 	bool cmd_setScreenDebug(int argc, const char **argv);
+	bool cmd_showFacings(int argc, const char **argv);
 };
 
 class Debugger_v1 : public Debugger {
@@ -74,6 +75,12 @@
 
 protected:
 	KyraEngine_v2 *_vm;
+
+	bool cmd_enterScene(int argc, const char **argv);
+	bool cmd_listScenes(int argc, const char **argv);
+	bool cmd_sceneInfo(int argc, const char **argv);
+	bool cmd_characterInfo(int argc, const char **argv);
+	bool cmd_sceneToFacing(int argc, const char **argv);
 };
 
 } // End of namespace Kyra

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2007-09-24 21:58:11 UTC (rev 29094)
@@ -258,6 +258,8 @@
 	// XXX
 	
 	_sceneList = new SceneDesc[86];
+	memset(_sceneList, 0, sizeof(SceneDesc)*86);
+	_sceneListSize = 86;
 	runStartScript(1, 0);
 	loadNPCScript();
 	

Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/kyra_v2.h	2007-09-24 21:58:11 UTC (rev 29094)
@@ -293,6 +293,9 @@
 	};
 	
 	SceneDesc *_sceneList;
+	int _sceneListSize;
+	uint16 _currentScene;
+
 	const char *_sceneCommentString;
 	uint16 _sceneExit1, _sceneExit2, _sceneExit3, _sceneExit4;
 	int _sceneEnterX1, _sceneEnterY1, _sceneEnterX2, _sceneEnterY2,

Modified: scummvm/trunk/engines/kyra/scene_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_v2.cpp	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/scene_v2.cpp	2007-09-24 21:58:11 UTC (rev 29094)
@@ -112,6 +112,8 @@
 	_screen->showMouse();
 	_unk5 = 0;
 	//setNextIdleAnimTimer();
+
+	_currentScene = newScene;
 }
 
 void KyraEngine_v2::enterNewSceneUnk1(int facing, int unk1, int unk2) {

Modified: scummvm/trunk/engines/kyra/screen_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/screen_v2.h	2007-09-24 20:26:27 UTC (rev 29093)
+++ scummvm/trunk/engines/kyra/screen_v2.h	2007-09-24 21:58:11 UTC (rev 29094)
@@ -33,6 +33,7 @@
 class KyraEngine_v2;
 
 class Screen_v2 : public Screen {
+friend class Debugger_v2;
 public:
 	Screen_v2(KyraEngine_v2 *vm, OSystem *system);
 	virtual ~Screen_v2();


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