2007-05-30 21:56:52 +00:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
2005-12-09 14:52:31 +00:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
2008-01-05 12:45:14 +00:00
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2005-12-09 14:52:31 +00:00
* GNU General Public License for more details .
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
# include "kyra/debugger.h"
2008-05-11 22:32:37 +00:00
# include "kyra/kyra_lok.h"
2008-05-02 14:46:30 +00:00
# include "kyra/kyra_hof.h"
2007-07-29 16:33:11 +00:00
# include "kyra/timer.h"
2008-03-27 15:27:31 +00:00
# include "kyra/resource.h"
2009-06-01 22:03:27 +00:00
# include "kyra/lol.h"
2011-11-06 17:53:52 +01:00
# include "kyra/eobcommon.h"
2005-12-09 14:52:31 +00:00
2011-04-28 15:39:17 +02:00
# include "common/system.h"
2012-01-15 01:13:03 +01:00
# include "common/config-manager.h"
# include "gui/message.h"
2011-04-28 15:39:17 +02:00
2005-12-09 14:52:31 +00:00
namespace Kyra {
2008-05-11 23:16:50 +00:00
Debugger : : Debugger ( KyraEngine_v1 * vm )
2011-11-18 03:47:51 +01:00
: : : GUI : : Debugger ( ) , _vm ( vm ) {
}
2007-09-23 23:37:01 +00:00
2011-11-18 03:47:51 +01:00
void Debugger : : initialize ( ) {
2011-12-26 21:19:29 +01:00
DCmd_Register ( " continue " , WRAP_METHOD ( Debugger , Cmd_Exit ) ) ;
DCmd_Register ( " screen_debug_mode " , WRAP_METHOD ( Debugger , cmd_setScreenDebug ) ) ;
DCmd_Register ( " load_palette " , WRAP_METHOD ( Debugger , cmd_loadPalette ) ) ;
DCmd_Register ( " facings " , WRAP_METHOD ( Debugger , cmd_showFacings ) ) ;
DCmd_Register ( " gamespeed " , WRAP_METHOD ( Debugger , cmd_gameSpeed ) ) ;
DCmd_Register ( " flags " , WRAP_METHOD ( Debugger , cmd_listFlags ) ) ;
DCmd_Register ( " toggleflag " , WRAP_METHOD ( Debugger , cmd_toggleFlag ) ) ;
DCmd_Register ( " queryflag " , WRAP_METHOD ( Debugger , cmd_queryFlag ) ) ;
DCmd_Register ( " timers " , WRAP_METHOD ( Debugger , cmd_listTimers ) ) ;
DCmd_Register ( " settimercountdown " , WRAP_METHOD ( Debugger , cmd_setTimerCountdown ) ) ;
2007-09-23 23:37:01 +00:00
}
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 ;
}
2008-03-27 15:27:31 +00:00
bool Debugger : : cmd_loadPalette ( int argc , const char * * argv ) {
2009-06-22 02:36:54 +00:00
Palette palette ( _vm - > screen ( ) - > getPalette ( 0 ) . getNumColors ( ) ) ;
2008-03-27 15:27:31 +00:00
if ( argc < = 1 ) {
2008-03-27 16:12:48 +00:00
DebugPrintf ( " Use load_palette <file> [start_col] [end_col] \n " ) ;
2008-03-27 15:27:31 +00:00
return true ;
}
2010-08-24 13:41:24 +00:00
if ( _vm - > game ( ) ! = GI_KYRA1 & & _vm - > resource ( ) - > getFileSize ( argv [ 1 ] ) ! = 768 ) {
2011-07-01 17:05:39 +02:00
uint8 * buffer = new uint8 [ 320 * 200 * sizeof ( uint8 ) ] ;
2011-06-06 01:14:48 +08:00
if ( ! buffer ) {
DebugPrintf ( " ERROR: Cannot allocate buffer for screen region! \n " ) ;
return true ;
}
2008-04-12 23:17:21 +00:00
_vm - > screen ( ) - > copyRegionToBuffer ( 5 , 0 , 0 , 320 , 200 , buffer ) ;
2008-03-27 15:27:31 +00:00
_vm - > screen ( ) - > loadBitmap ( argv [ 1 ] , 5 , 5 , 0 ) ;
2009-06-22 02:36:54 +00:00
palette . copy ( _vm - > screen ( ) - > getCPagePtr ( 5 ) , 0 , 256 ) ;
2008-04-12 23:17:21 +00:00
_vm - > screen ( ) - > copyBlockToPage ( 5 , 0 , 0 , 320 , 200 , buffer ) ;
2011-06-06 01:14:48 +08:00
2011-07-01 17:05:39 +02:00
delete [ ] buffer ;
2009-06-22 02:37:41 +00:00
} else if ( ! _vm - > screen ( ) - > loadPalette ( argv [ 1 ] , palette ) ) {
2008-03-27 16:12:48 +00:00
DebugPrintf ( " ERROR: Palette '%s' not found! \n " , argv [ 1 ] ) ;
2008-03-27 15:27:31 +00:00
return true ;
}
int startCol = 0 ;
2009-06-22 02:36:54 +00:00
int endCol = palette . getNumColors ( ) ;
2008-03-27 15:27:31 +00:00
if ( argc > 2 )
2009-06-22 02:36:54 +00:00
startCol = MIN ( palette . getNumColors ( ) , MAX ( 0 , atoi ( argv [ 2 ] ) ) ) ;
2008-03-27 15:27:31 +00:00
if ( argc > 3 )
2009-06-22 02:36:54 +00:00
endCol = MIN ( palette . getNumColors ( ) , MAX ( 0 , atoi ( argv [ 3 ] ) ) ) ;
2008-03-27 15:27:31 +00:00
if ( startCol > 0 )
2009-06-22 02:36:54 +00:00
palette . copy ( _vm - > screen ( ) - > getPalette ( 0 ) , 0 , startCol ) ;
if ( endCol < palette . getNumColors ( ) )
palette . copy ( _vm - > screen ( ) - > getPalette ( 0 ) , endCol ) ;
2008-03-27 15:27:31 +00:00
_vm - > screen ( ) - > setScreenPalette ( palette ) ;
_vm - > screen ( ) - > updateScreen ( ) ;
return true ;
}
2007-09-24 21:58:11 +00:00
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 ;
}
2008-03-27 16:12:48 +00:00
bool Debugger : : cmd_gameSpeed ( int argc , const char * * argv ) {
if ( argc = = 2 ) {
int val = atoi ( argv [ 1 ] ) ;
if ( val < 1 | | val > 1000 ) {
DebugPrintf ( " speed must lie between 1 and 1000 (default: 60) \n " ) ;
return true ;
}
_vm - > _tickLength = ( uint8 ) ( 1000.0 / val ) ;
} else {
DebugPrintf ( " Syntax: gamespeed <value> \n " ) ;
}
return true ;
}
2008-03-27 22:05:13 +00:00
bool Debugger : : cmd_listFlags ( int argc , const char * * argv ) {
2011-12-26 21:19:29 +01:00
for ( int i = 0 , p = 0 ; i < ( int ) sizeof ( _vm - > _flagsTable ) * 8 ; i + + , + + p ) {
2009-06-01 22:03:27 +00:00
DebugPrintf ( " (%-3i): %-2i " , i , _vm - > queryGameFlag ( i ) ) ;
if ( p = = 5 ) {
2008-03-27 22:05:13 +00:00
DebugPrintf ( " \n " ) ;
2009-06-01 22:03:27 +00:00
p - = 6 ;
}
2008-03-27 22:05:13 +00:00
}
DebugPrintf ( " \n " ) ;
return true ;
}
bool Debugger : : cmd_toggleFlag ( int argc , const char * * argv ) {
if ( argc > 1 ) {
uint flag = atoi ( argv [ 1 ] ) ;
if ( _vm - > queryGameFlag ( flag ) )
_vm - > resetGameFlag ( flag ) ;
else
_vm - > setGameFlag ( flag ) ;
DebugPrintf ( " Flag %i is now %i \n " , flag , _vm - > queryGameFlag ( flag ) ) ;
} else {
DebugPrintf ( " Syntax: toggleflag <flag> \n " ) ;
}
return true ;
}
bool Debugger : : cmd_queryFlag ( int argc , const char * * argv ) {
if ( argc > 1 ) {
uint flag = atoi ( argv [ 1 ] ) ;
DebugPrintf ( " Flag %i is %i \n " , flag , _vm - > queryGameFlag ( flag ) ) ;
} else {
DebugPrintf ( " Syntax: queryflag <flag> \n " ) ;
}
return true ;
}
bool Debugger : : cmd_listTimers ( int argc , const char * * argv ) {
DebugPrintf ( " Current time: %-8u \n " , g_system - > getMillis ( ) ) ;
for ( int i = 0 ; i < _vm - > timer ( ) - > count ( ) ; i + + )
DebugPrintf ( " Timer %-2i: Active: %-3s Countdown: %-6i %-8u \n " , i , _vm - > timer ( ) - > isEnabled ( i ) ? " Yes " : " No " , _vm - > timer ( ) - > getDelay ( i ) , _vm - > timer ( ) - > getNextRun ( i ) ) ;
return true ;
}
bool Debugger : : cmd_setTimerCountdown ( int argc , const char * * argv ) {
if ( argc > 2 ) {
uint timer = atoi ( argv [ 1 ] ) ;
uint countdown = atoi ( argv [ 2 ] ) ;
_vm - > timer ( ) - > setCountdown ( timer , countdown ) ;
DebugPrintf ( " Timer %i now has countdown %i \n " , timer , _vm - > timer ( ) - > getDelay ( timer ) ) ;
} else {
DebugPrintf ( " Syntax: settimercountdown <timer> <countdown> \n " ) ;
}
return true ;
}
2007-09-23 23:37:01 +00:00
# pragma mark -
2008-05-11 22:32:37 +00:00
Debugger_LoK : : Debugger_LoK ( KyraEngine_LoK * vm )
2008-04-25 16:02:20 +00:00
: Debugger ( vm ) , _vm ( vm ) {
2011-11-18 03:47:51 +01:00
}
void Debugger_LoK : : initialize ( ) {
2011-12-26 21:19:29 +01:00
DCmd_Register ( " enter " , WRAP_METHOD ( Debugger_LoK , cmd_enterRoom ) ) ;
DCmd_Register ( " scenes " , WRAP_METHOD ( Debugger_LoK , cmd_listScenes ) ) ;
DCmd_Register ( " give " , WRAP_METHOD ( Debugger_LoK , cmd_giveItem ) ) ;
DCmd_Register ( " birthstones " , WRAP_METHOD ( Debugger_LoK , cmd_listBirthstones ) ) ;
2012-01-14 16:39:24 +01:00
Debugger : : initialize ( ) ;
2005-12-09 14:52:31 +00:00
}
2008-05-11 22:32:37 +00:00
bool Debugger_LoK : : cmd_enterRoom ( int argc , const char * * argv ) {
2005-12-09 14:52:31 +00:00
uint direction = 0 ;
if ( argc > 1 ) {
2006-01-01 10:49:27 +00:00
int room = atoi ( argv [ 1 ] ) ;
2005-12-09 14:52:31 +00:00
2005-12-31 15:41:37 +00:00
// game will crash if entering a non-existent room
if ( room > = _vm - > _roomTableSize ) {
2011-12-26 21:19:29 +01:00
DebugPrintf ( " room number must be any value between (including) 0 and %d \n " , _vm - > _roomTableSize - 1 ) ;
2005-12-31 15:41:37 +00:00
return true ;
}
if ( argc > 2 ) {
2005-12-09 14:52:31 +00:00
direction = atoi ( argv [ 2 ] ) ;
2005-12-31 15:41:37 +00:00
} else {
2007-09-24 21:58:11 +00:00
if ( _vm - > _roomTable [ room ] . northExit ! = 0xFFFF )
2005-12-09 14:52:31 +00:00
direction = 3 ;
2007-09-24 21:58:11 +00:00
else if ( _vm - > _roomTable [ room ] . eastExit ! = 0xFFFF )
2005-12-09 14:52:31 +00:00
direction = 4 ;
2007-09-24 21:58:11 +00:00
else if ( _vm - > _roomTable [ room ] . southExit ! = 0xFFFF )
2005-12-09 14:52:31 +00:00
direction = 1 ;
2007-09-24 21:58:11 +00:00
else if ( _vm - > _roomTable [ room ] . westExit ! = 0xFFFF )
2005-12-09 14:52:31 +00:00
direction = 2 ;
}
_vm - > _system - > hideOverlay ( ) ;
_vm - > _currentCharacter - > facing = direction ;
2007-09-19 08:40:12 +00:00
2005-12-09 14:52:31 +00:00
_vm - > enterNewScene ( room , _vm - > _currentCharacter - > facing , 0 , 0 , 1 ) ;
2008-04-25 16:02:20 +00:00
while ( ! _vm - > _screen - > isMouseVisible ( ) )
_vm - > _screen - > showMouse ( ) ;
2006-01-10 02:43:30 +00:00
2010-07-17 18:38:42 +00:00
detach ( ) ;
2005-12-09 14:52:31 +00:00
return false ;
}
DebugPrintf ( " Syntax: room <roomnum> <direction> \n " ) ;
return true ;
}
2009-05-12 14:55:45 +00:00
bool Debugger_LoK : : cmd_listScenes ( int argc , const char * * argv ) {
2005-12-09 14:52:31 +00:00
for ( int i = 0 ; i < _vm - > _roomTableSize ; i + + ) {
DebugPrintf ( " %-3i: %-10s " , i , _vm - > _roomFilenameTable [ _vm - > _roomTable [ i ] . nameIndex ] ) ;
2007-09-19 08:40:12 +00:00
if ( ! ( i % 8 ) )
2005-12-09 14:52:31 +00:00
DebugPrintf ( " \n " ) ;
}
DebugPrintf ( " \n " ) ;
DebugPrintf ( " Current room: %i \n " , _vm - > _currentRoom ) ;
return true ;
}
2008-05-11 22:32:37 +00:00
bool Debugger_LoK : : cmd_giveItem ( int argc , const char * * argv ) {
2005-12-31 15:41:37 +00:00
if ( argc = = 2 ) {
2005-12-09 23:02:16 +00:00
int item = atoi ( argv [ 1 ] ) ;
2005-12-31 15:41:37 +00:00
// Kyrandia 1 has only 108 items (-1 to 106), otherwise it will crash
if ( item < - 1 | | item > 106 ) {
2009-05-12 14:55:45 +00:00
DebugPrintf ( " 'itemid' must be any value between (including) -1 and 106 \n " ) ;
2005-12-31 15:41:37 +00:00
return true ;
}
2005-12-09 23:02:16 +00:00
_vm - > setMouseItem ( item ) ;
_vm - > _itemInHand = item ;
2007-04-15 16:41:20 +00:00
} else {
2005-12-09 23:02:16 +00:00
DebugPrintf ( " Syntax: give <itemid> \n " ) ;
2007-04-15 16:41:20 +00:00
}
2007-09-19 08:40:12 +00:00
2005-12-09 23:02:16 +00:00
return true ;
}
2007-09-23 23:00:54 +00:00
2008-05-11 22:32:37 +00:00
bool Debugger_LoK : : cmd_listBirthstones ( int argc , const char * * argv ) {
2009-05-12 14:55:45 +00:00
DebugPrintf ( " Needed birthstone gems: \n " ) ;
2007-09-23 23:00:54 +00:00
for ( int i = 0 ; i < ARRAYSIZE ( _vm - > _birthstoneGemTable ) ; + + i )
2009-05-12 14:55:45 +00:00
DebugPrintf ( " %-3d '%s' \n " , _vm - > _birthstoneGemTable [ i ] , _vm - > _itemList [ _vm - > _birthstoneGemTable [ i ] ] ) ;
2007-09-23 23:00:54 +00:00
return true ;
}
2007-09-24 20:02:08 +00:00
# pragma mark -
2008-05-04 15:56:28 +00:00
Debugger_v2 : : Debugger_v2 ( KyraEngine_v2 * vm ) : Debugger ( vm ) , _vm ( vm ) {
2011-11-18 03:47:51 +01:00
}
void Debugger_v2 : : initialize ( ) {
2011-12-26 21:19:29 +01:00
DCmd_Register ( " character_info " , WRAP_METHOD ( Debugger_v2 , cmd_characterInfo ) ) ;
DCmd_Register ( " enter " , WRAP_METHOD ( Debugger_v2 , cmd_enterScene ) ) ;
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 ) ) ;
DCmd_Register ( " give " , WRAP_METHOD ( Debugger_v2 , cmd_giveItem ) ) ;
2012-01-14 16:39:24 +01:00
Debugger : : initialize ( ) ;
2007-09-24 21:58:11 +00:00
}
bool Debugger_v2 : : cmd_enterScene ( int argc , const char * * argv ) {
uint direction = 0 ;
if ( argc > 1 ) {
int scene = atoi ( argv [ 1 ] ) ;
2008-01-27 19:47:41 +00:00
// game will crash if entering a non-existent scene
2007-09-24 21:58:11 +00:00
if ( scene > = _vm - > _sceneListSize ) {
2011-12-26 21:19:29 +01:00
DebugPrintf ( " scene number must be any value between (including) 0 and %d \n " , _vm - > _sceneListSize - 1 ) ;
2007-09-24 21:58:11 +00:00
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 ) ;
2008-05-04 15:56:28 +00:00
while ( ! _vm - > screen_v2 ( ) - > isMouseVisible ( ) )
_vm - > screen_v2 ( ) - > showMouse ( ) ;
2007-09-24 21:58:11 +00:00
2010-07-17 18:38:42 +00:00
detach ( ) ;
2007-09-24 21:58:11 +00:00
return false ;
}
2010-11-01 16:03:35 +00:00
DebugPrintf ( " Syntax: %s <scenenum> <direction> \n " , argv [ 0 ] ) ;
2007-09-24 21:58:11 +00:00
return true ;
}
bool Debugger_v2 : : cmd_listScenes ( int argc , const char * * argv ) {
int shown = 1 ;
for ( int i = 0 ; i < _vm - > _sceneListSize ; + + i ) {
2008-05-02 14:46:30 +00:00
if ( _vm - > _sceneList [ i ] . filename1 [ 0 ] ) {
DebugPrintf ( " %-2i: %-10s " , i , _vm - > _sceneList [ i ] . filename1 ) ;
2007-09-24 21:58:11 +00:00
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 ) {
2008-05-02 14:46:30 +00:00
DebugPrintf ( " Current scene: %d '%s' \n " , _vm - > _currentScene , _vm - > _sceneList [ _vm - > _currentScene ] . filename1 ) ;
2007-09-24 21:58:11 +00:00
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 ,
2011-12-26 21:19:29 +01:00
_vm - > _specialExitTable [ 20 + i ] , _vm - > _specialExitTable [ 0 + i ] , _vm - > _specialExitTable [ 5 + i ] ,
_vm - > _specialExitTable [ 10 + i ] , _vm - > _specialExitTable [ 15 + i ] ) ;
2007-09-24 21:58:11 +00:00
}
}
return true ;
}
bool Debugger_v2 : : cmd_characterInfo ( int argc , const char * * argv ) {
2008-05-02 14:46:30 +00:00
DebugPrintf ( " Main character is in scene: %d '%s' \n " , _vm - > _mainCharacter . sceneId , _vm - > _sceneList [ _vm - > _mainCharacter . sceneId ] . filename1 ) ;
2007-09-24 21:58:11 +00:00
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 ;
2007-09-24 20:02:08 +00:00
}
2008-03-09 14:46:24 +00:00
bool Debugger_v2 : : cmd_giveItem ( int argc , const char * * argv ) {
if ( argc = = 2 ) {
int item = atoi ( argv [ 1 ] ) ;
2008-05-06 20:55:33 +00:00
if ( item < - 1 | | item > _vm - > engineDesc ( ) . maxItemId ) {
DebugPrintf ( " itemid must be any value between (including) -1 and %d \n " , _vm - > engineDesc ( ) . maxItemId ) ;
2008-03-09 14:46:24 +00:00
return true ;
}
_vm - > setHandItem ( item ) ;
} else {
DebugPrintf ( " Syntax: give <itemid> \n " ) ;
}
return true ;
}
2008-05-04 15:56:28 +00:00
# pragma mark -
Debugger_HoF : : Debugger_HoF ( KyraEngine_HoF * vm ) : Debugger_v2 ( vm ) , _vm ( vm ) {
2011-11-18 03:47:51 +01:00
}
void Debugger_HoF : : initialize ( ) {
2011-12-26 21:19:29 +01:00
DCmd_Register ( " pass_codes " , WRAP_METHOD ( Debugger_HoF , cmd_passcodes ) ) ;
2012-01-14 16:39:24 +01:00
Debugger_v2 : : initialize ( ) ;
2008-05-04 15:56:28 +00:00
}
bool Debugger_HoF : : cmd_passcodes ( int argc , const char * * argv ) {
2008-03-17 01:34:24 +00:00
if ( argc = = 2 ) {
int val = atoi ( argv [ 1 ] ) ;
if ( val < 0 | | val > 1 ) {
DebugPrintf ( " value must be either 1 (on) or 0 (off) \n " ) ;
return true ;
}
2009-01-01 15:06:43 +00:00
_vm - > _dbgPass = val ;
2008-03-17 01:34:24 +00:00
} else {
DebugPrintf ( " Syntax: pass_codes <0/1> \n " ) ;
}
return true ;
}
2009-06-01 22:03:27 +00:00
# pragma mark -
2009-06-02 11:58:30 +00:00
# ifdef ENABLE_LOL
2009-06-01 22:03:27 +00:00
Debugger_LoL : : Debugger_LoL ( LoLEngine * vm ) : Debugger ( vm ) , _vm ( vm ) {
}
2009-06-02 11:58:30 +00:00
# endif // ENABLE_LOL
2009-06-01 22:03:27 +00:00
2011-11-06 17:53:52 +01:00
# ifdef ENABLE_EOB
2011-12-12 16:23:01 +01:00
Debugger_EoB : : Debugger_EoB ( EoBCoreEngine * vm ) : Debugger ( vm ) , _vm ( vm ) {
2011-11-06 17:53:52 +01:00
}
2012-01-15 01:13:03 +01:00
void Debugger_EoB : : initialize ( ) {
DCmd_Register ( " import_savefile " , WRAP_METHOD ( Debugger_EoB , cmd_importSaveFile ) ) ;
2013-04-07 22:38:25 +02:00
DCmd_Register ( " save_original " , WRAP_METHOD ( Debugger_EoB , cmd_saveOriginal ) ) ;
2012-01-15 01:13:03 +01:00
}
bool Debugger_EoB : : cmd_importSaveFile ( int argc , const char * * argv ) {
2012-01-16 16:18:26 +01:00
if ( ! _vm - > _allowImport ) {
2013-04-07 22:38:25 +02:00
DebugPrintf ( " This command only works from the main menu. \n " ) ;
2012-01-16 16:18:26 +01:00
return true ;
}
2012-01-15 01:13:03 +01:00
if ( argc = = 3 ) {
int slot = atoi ( argv [ 1 ] ) ;
if ( slot < - 1 | | slot > 989 ) {
DebugPrintf ( " slot must be between (including) -1 and 989 \n " ) ;
return true ;
}
DebugPrintf ( _vm - > importOriginalSaveFile ( slot , argv [ 2 ] ) ? " Success. \n " : " Failure. \n " ) ;
_vm - > loadItemDefs ( ) ;
} else {
2012-01-16 16:18:26 +01:00
DebugPrintf ( " Syntax: import_savefile <dest slot> <source file> \n (Imports source save game file to dest slot.) \n import_savefile -1 \n (Imports all original save game files found and puts them into the first available slots.) \n \n " ) ;
2012-01-15 01:13:03 +01:00
}
return true ;
}
2013-04-07 22:38:25 +02:00
bool Debugger_EoB : : cmd_saveOriginal ( int argc , const char * * argv ) {
if ( ! _vm - > _runFlag ) {
DebugPrintf ( " This command doesn't work during intro or outro sequences, \n from the main menu or from the character generation. \n " ) ;
return true ;
}
Common : : String dir = ConfMan . get ( " savepath " ) ;
if ( dir = = " None " )
dir . clear ( ) ;
Common : : FSNode nd ( dir ) ;
if ( ! nd . isDirectory ( ) )
return false ;
if ( _vm - > game ( ) = = GI_EOB1 ) {
if ( argc = = 1 ) {
if ( _vm - > saveAsOriginalSaveFile ( ) ) {
Common : : FSNode nf = nd . getChild ( Common : : String : : format ( " EOBDATA.SAV " ) ) ;
if ( nf . isReadable ( ) )
DebugPrintf ( " Saved to file: %s \n \n " , nf . getPath ( ) . c_str ( ) ) ;
else
DebugPrintf ( " Failure. \n " ) ;
} else {
DebugPrintf ( " Failure. \n " ) ;
}
} else {
DebugPrintf ( " Syntax: save_original \n (Saves game in original file format to a file which can be used with the orginal game executable.) \n \n " ) ;
}
return true ;
} else if ( argc = = 2 ) {
int slot = atoi ( argv [ 1 ] ) ;
if ( slot < 0 | | slot > 5 ) {
DebugPrintf ( " Slot must be between (including) 0 and 5. \n " ) ;
} else if ( _vm - > saveAsOriginalSaveFile ( slot ) ) {
Common : : FSNode nf = nd . getChild ( Common : : String : : format ( " EOBDATA%d.SAV " , slot ) ) ;
if ( nf . isReadable ( ) )
DebugPrintf ( " Saved to file: %s \n \n " , nf . getPath ( ) . c_str ( ) ) ;
else
DebugPrintf ( " Failure. \n " ) ;
} else {
DebugPrintf ( " Failure. \n " ) ;
}
return true ;
}
DebugPrintf ( " Syntax: save_original <slot> \n (Saves game in original file format to a file which can be used with the orginal game executable. \n A save slot between 0 and 5 must be specified.) \n \n " ) ;
return true ;
}
2011-11-06 17:53:52 +01:00
# endif // ENABLE_EOB
2005-12-09 14:52:31 +00:00
} // End of namespace Kyra