2009-02-17 15:02:16 +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 .
*
* 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* 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 .
*
* $ URL $
* $ Id $
*
*/
2009-02-15 06:10:59 +00:00
2009-07-03 14:18:20 +00:00
# include "graphics/cursorman.h"
2009-10-16 18:05:56 +00:00
# include "graphics/video/avi_decoder.h"
2009-08-30 19:47:47 +00:00
# include "graphics/surface.h"
2009-02-21 15:40:14 +00:00
2009-05-13 16:52:41 +00:00
# include "sci/sci.h"
2009-06-04 11:28:05 +00:00
# include "sci/debug.h" // for g_debug_sleeptime_factor
2009-05-15 14:07:45 +00:00
# include "sci/resource.h"
2009-12-30 10:09:48 +00:00
# include "sci/video/seq_decoder.h"
2009-02-27 02:23:40 +00:00
# include "sci/engine/state.h"
2009-03-07 19:23:47 +00:00
# include "sci/engine/kernel.h"
2010-01-05 01:22:16 +00:00
# include "sci/graphics/gui.h"
2010-01-05 01:37:57 +00:00
# include "sci/graphics/animate.h"
# include "sci/graphics/cursor.h"
# include "sci/graphics/screen.h"
# include "sci/graphics/view.h"
2009-02-15 06:10:59 +00:00
2009-02-21 10:23:36 +00:00
namespace Sci {
2009-10-28 18:59:11 +00:00
void _k_dirloop ( reg_t object , uint16 angle , EngineState * s , int argc , reg_t * argv ) {
2009-11-03 14:24:47 +00:00
GuiResourceId viewId = GET_SEL32V ( s - > _segMan , object , view ) ;
uint16 signal = GET_SEL32V ( s - > _segMan , object , signal ) ;
2009-10-28 18:59:11 +00:00
int16 loopNo ;
int16 maxLoops ;
2009-10-09 17:34:52 +00:00
bool oldScriptHeader = ( getSciVersion ( ) = = SCI_VERSION_0_EARLY ) ;
2009-10-21 19:19:03 +00:00
if ( signal & kSignalDoesntTurn )
2009-10-09 17:34:52 +00:00
return ;
angle % = 360 ;
if ( ! oldScriptHeader ) {
if ( angle < 45 )
2009-10-28 18:59:11 +00:00
loopNo = 3 ;
2009-10-09 17:34:52 +00:00
else if ( angle < 136 )
2009-10-28 18:59:11 +00:00
loopNo = 0 ;
2009-10-09 17:34:52 +00:00
else if ( angle < 225 )
2009-10-28 18:59:11 +00:00
loopNo = 2 ;
2009-10-09 17:34:52 +00:00
else if ( angle < 316 )
2009-10-28 18:59:11 +00:00
loopNo = 1 ;
2009-10-09 17:34:52 +00:00
else
2009-10-28 18:59:11 +00:00
loopNo = 3 ;
2009-10-09 17:34:52 +00:00
} else {
if ( angle > = 330 | | angle < = 30 )
2009-10-28 18:59:11 +00:00
loopNo = 3 ;
2009-10-09 17:34:52 +00:00
else if ( angle < = 150 )
2009-10-28 18:59:11 +00:00
loopNo = 0 ;
2009-10-09 17:34:52 +00:00
else if ( angle < = 210 )
2009-10-28 18:59:11 +00:00
loopNo = 2 ;
2009-10-09 17:34:52 +00:00
else if ( angle < 330 )
2009-10-28 18:59:11 +00:00
loopNo = 1 ;
else loopNo = - 1 ;
2009-10-09 17:34:52 +00:00
}
2009-10-28 18:59:11 +00:00
maxLoops = s - > _gui - > getLoopCount ( viewId ) ;
2009-10-09 17:34:52 +00:00
2009-10-28 18:59:11 +00:00
if ( ( loopNo > 1 ) & & ( maxLoops < 4 ) )
2009-10-09 17:34:52 +00:00
return ;
2009-11-03 14:24:47 +00:00
PUT_SEL32V ( s - > _segMan , object , loop , loopNo ) ;
2009-10-09 17:34:52 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
static reg_t kSetCursorSci0 ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 12:47:53 +00:00
Common : : Point pos ;
2009-10-07 14:53:15 +00:00
GuiResourceId cursorId = argv [ 0 ] . toSint16 ( ) ;
2009-08-30 01:37:52 +00:00
// Set pointer position, if requested
2009-10-07 12:47:53 +00:00
if ( argc > = 4 ) {
pos . y = argv [ 3 ] . toSint16 ( ) ;
pos . x = argv [ 2 ] . toSint16 ( ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > setCursorPos ( pos ) ;
2009-10-07 12:47:53 +00:00
}
2009-10-07 14:53:15 +00:00
if ( ( argc > = 2 ) & & ( argv [ 1 ] . toSint16 ( ) = = 0 ) ) {
cursorId = - 1 ;
}
2009-10-07 21:29:47 +00:00
s - > _gui - > setCursorShape ( cursorId ) ;
2009-08-30 01:37:52 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
static reg_t kSetCursorSci11 ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 12:47:53 +00:00
Common : : Point pos ;
2009-08-30 01:37:52 +00:00
Common : : Point * hotspot = NULL ;
2009-08-25 08:38:14 +00:00
2009-02-15 22:28:12 +00:00
switch ( argc ) {
2009-08-30 01:37:52 +00:00
case 1 :
2009-11-30 19:34:45 +00:00
switch ( argv [ 0 ] . toSint16 ( ) ) {
case 0 :
2009-10-07 21:29:47 +00:00
s - > _gui - > hideCursor ( ) ;
2009-11-30 19:34:45 +00:00
break ;
case - 1 :
// TODO: Special case at least in kq6, check disassembly
break ;
case - 2 :
// TODO: Special case at least in kq6, check disassembly
break ;
default :
2009-10-07 21:29:47 +00:00
s - > _gui - > showCursor ( ) ;
2009-11-30 19:34:45 +00:00
break ;
}
2009-08-30 01:37:52 +00:00
case 2 :
2009-10-07 12:47:53 +00:00
pos . y = argv [ 1 ] . toSint16 ( ) ;
pos . x = argv [ 0 ] . toSint16 ( ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > setCursorPos ( pos ) ;
2009-05-29 08:25:42 +00:00
break ;
2009-08-30 01:38:14 +00:00
case 4 : {
int16 top = argv [ 0 ] . toSint16 ( ) ;
int16 left = argv [ 1 ] . toSint16 ( ) ;
int16 bottom = argv [ 2 ] . toSint16 ( ) ;
int16 right = argv [ 3 ] . toSint16 ( ) ;
if ( ( right > = left ) & & ( bottom > = top ) ) {
2009-10-07 11:35:12 +00:00
Common : : Rect rect = Common : : Rect ( left , top , right , bottom ) ;
2009-11-04 12:19:05 +00:00
s - > _gui - > setCursorZone ( rect ) ;
2009-08-30 01:38:14 +00:00
} else {
warning ( " kSetCursor: Ignoring invalid mouse zone (%i, %i)-(%i, %i) " , left , top , right , bottom ) ;
}
break ;
}
2009-08-30 01:37:52 +00:00
case 5 :
case 9 :
hotspot = new Common : : Point ( argv [ 3 ] . toSint16 ( ) , argv [ 4 ] . toSint16 ( ) ) ;
// Fallthrough
case 3 :
2009-10-13 17:09:32 +00:00
s - > _gui - > setCursorView ( argv [ 0 ] . toUint16 ( ) , argv [ 1 ] . toUint16 ( ) , argv [ 2 ] . toUint16 ( ) , hotspot ) ;
2009-02-15 06:10:59 +00:00
break ;
default :
2009-08-30 01:37:52 +00:00
warning ( " kSetCursor: Unhandled case: %d arguments given " , argc ) ;
2009-02-15 06:10:59 +00:00
break ;
}
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kSetCursor ( EngineState * s , int argc , reg_t * argv ) {
2009-08-30 01:37:52 +00:00
switch ( s - > detectSetCursorType ( ) ) {
case SCI_VERSION_0_EARLY :
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
return kSetCursorSci0 ( s , argc , argv ) ;
2009-08-30 01:37:52 +00:00
case SCI_VERSION_1_1 :
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
return kSetCursorSci11 ( s , argc , argv ) ;
2009-08-30 01:37:52 +00:00
default :
warning ( " Unknown SetCursor type " ) ;
return NULL_REG ;
}
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kMoveCursor ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 12:47:53 +00:00
Common : : Point pos ;
if ( argc = = 2 ) {
pos . y = argv [ 1 ] . toSint16 ( ) ;
pos . x = argv [ 0 ] . toSint16 ( ) ;
2009-10-14 13:28:36 +00:00
s - > _gui - > setCursorPos ( pos ) ;
2009-10-07 12:47:53 +00:00
}
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kPicNotValid ( EngineState * s , int argc , reg_t * argv ) {
2009-10-12 07:30:55 +00:00
int16 newPicNotValid = ( argc > 0 ) ? argv [ 0 ] . toUint16 ( ) : - 1 ;
2009-02-15 06:10:59 +00:00
2009-10-12 07:30:55 +00:00
return make_reg ( 0 , s - > _gui - > picNotValid ( newPicNotValid ) ) ;
2009-02-15 06:10:59 +00:00
}
2009-10-12 12:38:58 +00:00
void kGraphCreateRect ( int16 x , int16 y , int16 x1 , int16 y1 , Common : : Rect * destRect ) {
if ( x > x1 ) SWAP ( x , x1 ) ;
if ( y > y1 ) SWAP ( y , y1 ) ;
* destRect = Common : : Rect ( x , y , x1 , y1 ) ;
}
2009-10-28 18:59:11 +00:00
// Graph subfunctions
enum {
K_GRAPH_GET_COLORS_NR = 2 ,
// 3 - SET PALETTE VIA RESOURCE
K_GRAPH_DRAW_LINE = 4 ,
// 5 - NOP
// 6 - DRAW PATTERN
K_GRAPH_SAVE_BOX = 7 ,
K_GRAPH_RESTORE_BOX = 8 ,
K_GRAPH_FILL_BOX_BACKGROUND = 9 ,
K_GRAPH_FILL_BOX_FOREGROUND = 10 ,
K_GRAPH_FILL_BOX_ANY = 11 ,
K_GRAPH_UPDATE_BOX = 12 ,
K_GRAPH_REDRAW_BOX = 13 ,
2009-10-30 22:55:35 +00:00
K_GRAPH_ADJUST_PRIORITY = 14 ,
2009-10-31 15:25:47 +00:00
K_GRAPH_SAVE_UPSCALEDHIRES_BOX = 15 // KQ6CD Windows version
2009-10-28 18:59:11 +00:00
} ;
2009-10-03 20:49:18 +00:00
reg_t kGraph ( EngineState * s , int argc , reg_t * argv ) {
2009-10-12 12:38:58 +00:00
int16 x = 0 , y = 0 , x1 = 0 , y1 = 0 ;
2009-10-31 15:25:47 +00:00
uint16 screenMask ;
2009-10-03 20:49:18 +00:00
int16 priority , control , color , colorMask ;
Common : : Rect rect ;
2009-10-05 13:33:26 +00:00
if ( argc > = 5 ) {
x = argv [ 2 ] . toSint16 ( ) ;
y = argv [ 1 ] . toSint16 ( ) ;
x1 = argv [ 4 ] . toSint16 ( ) ;
y1 = argv [ 3 ] . toSint16 ( ) ;
2009-02-15 06:10:59 +00:00
}
2009-06-07 15:53:30 +00:00
switch ( argv [ 0 ] . toSint16 ( ) ) {
2009-02-15 06:10:59 +00:00
case K_GRAPH_GET_COLORS_NR :
2009-09-02 12:02:37 +00:00
return make_reg ( 0 , ! s - > resMan - > isVGA ( ) ? 0x10 : 0x100 ) ;
2009-02-15 06:10:59 +00:00
break ;
2009-10-03 20:49:18 +00:00
case K_GRAPH_DRAW_LINE :
priority = ( argc > 6 ) ? argv [ 6 ] . toSint16 ( ) : - 1 ;
control = ( argc > 7 ) ? argv [ 7 ] . toSint16 ( ) : - 1 ;
color = argv [ 5 ] . toSint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-07 21:29:47 +00:00
s - > _gui - > graphDrawLine ( Common : : Point ( x , y ) , Common : : Point ( x1 , y1 ) , color , priority , control ) ;
2009-10-03 20:49:18 +00:00
break ;
2009-02-15 06:10:59 +00:00
case K_GRAPH_SAVE_BOX :
2009-10-12 12:38:58 +00:00
kGraphCreateRect ( x , y , x1 , y1 , & rect ) ;
2009-10-31 15:25:47 +00:00
screenMask = ( argc > 5 ) ? argv [ 5 ] . toUint16 ( ) : 0 ;
return s - > _gui - > graphSaveBox ( rect , screenMask ) ;
2009-02-15 06:10:59 +00:00
case K_GRAPH_RESTORE_BOX :
2009-10-31 15:25:47 +00:00
// This may be called with a memoryhandle from SAVE_BOX or SAVE_UPSCALEDHIRES_BOX
2009-10-07 21:29:47 +00:00
s - > _gui - > graphRestoreBox ( argv [ 1 ] ) ;
2009-02-15 06:10:59 +00:00
break ;
case K_GRAPH_FILL_BOX_BACKGROUND :
2009-10-12 12:38:58 +00:00
kGraphCreateRect ( x , y , x1 , y1 , & rect ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > graphFillBoxBackground ( rect ) ;
2009-02-15 06:10:59 +00:00
break ;
case K_GRAPH_FILL_BOX_FOREGROUND :
2009-10-12 12:38:58 +00:00
kGraphCreateRect ( x , y , x1 , y1 , & rect ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > graphFillBoxForeground ( rect ) ;
2009-02-15 06:10:59 +00:00
break ;
2009-10-03 20:49:18 +00:00
case K_GRAPH_FILL_BOX_ANY :
priority = ( argc > 7 ) ? argv [ 7 ] . toSint16 ( ) : - 1 ;
control = ( argc > 8 ) ? argv [ 8 ] . toSint16 ( ) : - 1 ;
color = argv [ 6 ] . toSint16 ( ) ;
colorMask = argv [ 5 ] . toUint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-05 13:33:26 +00:00
rect = Common : : Rect ( x , y , x1 , y1 ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > graphFillBox ( rect , colorMask , color , priority , control ) ;
2009-10-03 20:49:18 +00:00
break ;
2009-02-15 06:10:59 +00:00
2009-10-12 12:42:50 +00:00
case K_GRAPH_UPDATE_BOX :
2009-10-12 12:38:58 +00:00
kGraphCreateRect ( x , y , x1 , y1 , & rect ) ;
2009-10-12 07:11:22 +00:00
s - > _gui - > graphUpdateBox ( rect ) ;
break ;
2009-02-15 06:10:59 +00:00
2009-10-12 12:42:50 +00:00
case K_GRAPH_REDRAW_BOX :
2009-10-12 12:38:58 +00:00
kGraphCreateRect ( x , y , x1 , y1 , & rect ) ;
2009-10-12 11:36:42 +00:00
s - > _gui - > graphRedrawBox ( rect ) ;
break ;
2009-02-15 06:10:59 +00:00
case K_GRAPH_ADJUST_PRIORITY :
2009-11-04 12:54:27 +00:00
// Seems to be only implemented for SCI0/SCI01 games
debugC ( 2 , kDebugLevelGraphics , " adjust_priority(%d, %d) \n " , argv [ 1 ] . toUint16 ( ) , argv [ 2 ] . toUint16 ( ) ) ;
s - > _gui - > graphAdjustPriority ( argv [ 1 ] . toUint16 ( ) , argv [ 2 ] . toUint16 ( ) ) ;
2009-02-15 06:10:59 +00:00
break ;
2009-10-31 15:25:47 +00:00
case K_GRAPH_SAVE_UPSCALEDHIRES_BOX :
2009-10-31 17:54:28 +00:00
warning ( " kGraph case 15 (%d, %d, %d, %d) " , x , y , x1 , y1 ) ;
// TODO: implement this properly. The code below crashes KQ6
2009-10-31 15:25:47 +00:00
// Save an area given in upscaled-hires coordinates, so that a hires control will be drawn over it
2009-10-31 17:54:28 +00:00
//kGraphCreateRect(x, y, x1, y1, &rect);
//return s->_gui->graphSaveUpscaledHiresBox(rect);
break ;
2009-10-30 22:55:35 +00:00
2009-02-15 06:10:59 +00:00
default :
2009-12-21 14:32:54 +00:00
warning ( " Unsupported kGraph() operation %04x " , argv [ 0 ] . toSint16 ( ) ) ;
2009-02-15 06:10:59 +00:00
}
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kTextSize ( EngineState * s , int argc , reg_t * argv ) {
2009-10-03 20:49:18 +00:00
int16 textWidth , textHeight ;
2009-10-04 18:38:18 +00:00
Common : : String text = s - > _segMan - > getString ( argv [ 1 ] ) ;
reg_t * dest = s - > _segMan - > derefRegPtr ( argv [ 0 ] , 4 ) ;
2009-06-07 16:50:34 +00:00
int maxwidth = ( argc > 3 ) ? argv [ 3 ] . toUint16 ( ) : 0 ;
2009-06-07 15:53:30 +00:00
int font_nr = argv [ 2 ] . toUint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-09-27 01:50:26 +00:00
Common : : String sep_str ;
2009-10-03 20:49:18 +00:00
const char * sep = NULL ;
2009-09-27 01:50:26 +00:00
if ( ( argc > 4 ) & & ( argv [ 4 ] . segment ) ) {
2009-10-04 18:38:18 +00:00
sep_str = s - > _segMan - > getString ( argv [ 4 ] ) ;
2009-09-27 01:50:26 +00:00
sep = sep_str . c_str ( ) ;
}
2009-06-24 19:12:45 +00:00
2009-02-15 06:10:59 +00:00
dest [ 0 ] = dest [ 1 ] = NULL_REG ;
2009-09-27 01:50:26 +00:00
if ( text . empty ( ) | | ! dest ) { // Empty text
2009-02-15 06:10:59 +00:00
dest [ 2 ] = dest [ 3 ] = make_reg ( 0 , 0 ) ;
2009-05-30 15:40:49 +00:00
debugC ( 2 , kDebugLevelStrings , " GetTextSize: Empty string \n " ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
2009-10-03 20:49:18 +00:00
textWidth = dest [ 3 ] . toUint16 ( ) ; textHeight = dest [ 2 ] . toUint16 ( ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > textSize ( s - > strSplit ( text . c_str ( ) , sep ) . c_str ( ) , font_nr , maxwidth , & textWidth , & textHeight ) ;
2009-10-03 20:49:18 +00:00
debugC ( 2 , kDebugLevelStrings , " GetTextSize '%s' -> %dx%d \n " , text . c_str ( ) , textWidth , textHeight ) ;
2009-02-15 06:10:59 +00:00
2009-10-03 20:49:18 +00:00
dest [ 2 ] = make_reg ( 0 , textHeight ) ;
dest [ 3 ] = make_reg ( 0 , textWidth ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kWait ( EngineState * s , int argc , reg_t * argv ) {
2009-06-07 15:53:30 +00:00
int sleep_time = argv [ 0 ] . toUint16 ( ) ;
2009-10-03 20:49:18 +00:00
#if 0
uint32 time ;
2009-02-15 06:10:59 +00:00
2009-02-21 15:40:14 +00:00
time = g_system - > getMillis ( ) ;
2009-02-21 23:16:03 +00:00
s - > r_acc = make_reg ( 0 , ( ( long ) time - ( long ) s - > last_wait_time ) * 60 / 1000 ) ;
2009-02-21 15:40:14 +00:00
s - > last_wait_time = time ;
2009-02-15 06:10:59 +00:00
2009-06-04 11:28:05 +00:00
sleep_time * = g_debug_sleeptime_factor ;
2009-08-31 14:24:35 +00:00
gfxop_sleep ( s - > gfx_state , sleep_time * 1000 / 60 ) ;
2009-02-15 06:10:59 +00:00
2009-10-03 20:49:18 +00:00
# endif
// FIXME: we should not be asking from the GUI to wait. The kernel sounds
// like a better place
2009-10-07 21:29:47 +00:00
s - > _gui - > wait ( sleep_time ) ;
2009-08-11 20:18:15 +00:00
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kCoordPri ( EngineState * s , int argc , reg_t * argv ) {
2009-10-09 13:15:37 +00:00
int16 y = argv [ 0 ] . toSint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-11 14:58:58 +00:00
if ( ( argc < 2 ) | | ( y ! = 1 ) ) {
return make_reg ( 0 , s - > _gui - > coordinateToPriority ( y ) ) ;
} else {
int16 priority = argv [ 1 ] . toSint16 ( ) ;
return make_reg ( 0 , s - > _gui - > priorityToCoordinate ( priority ) ) ;
}
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kPriCoord ( EngineState * s , int argc , reg_t * argv ) {
2009-10-09 13:15:37 +00:00
int16 priority = argv [ 0 ] . toSint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-09 13:15:37 +00:00
return make_reg ( 0 , s - > _gui - > priorityToCoordinate ( priority ) ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDirLoop ( EngineState * s , int argc , reg_t * argv ) {
2009-09-02 11:33:25 +00:00
_k_dirloop ( argv [ 0 ] , argv [ 1 ] . toUint16 ( ) , s , argc , argv ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kCanBeHere ( EngineState * s , int argc , reg_t * argv ) {
2009-10-09 16:51:10 +00:00
reg_t curObject = argv [ 0 ] ;
reg_t listReference = ( argc > 1 ) ? argv [ 1 ] : NULL_REG ;
2009-10-14 09:36:39 +00:00
bool canBeHere = s - > _gui - > canBeHere ( curObject , listReference ) ;
return make_reg ( 0 , canBeHere ) ;
2009-10-09 16:51:10 +00:00
}
2009-02-15 06:10:59 +00:00
2009-10-09 17:34:52 +00:00
// kCantBeHere does the same thing as kCanBeHere, except that it returns the opposite result.
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kCantBeHere ( EngineState * s , int argc , reg_t * argv ) {
2009-10-14 09:36:39 +00:00
reg_t curObject = argv [ 0 ] ;
reg_t listReference = ( argc > 1 ) ? argv [ 1 ] : NULL_REG ;
bool canBeHere = s - > _gui - > canBeHere ( curObject , listReference ) ;
return make_reg ( 0 , ! canBeHere ) ;
2009-09-17 13:22:00 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kIsItSkip ( EngineState * s , int argc , reg_t * argv ) {
2009-10-28 18:59:11 +00:00
GuiResourceId viewId = argv [ 0 ] . toSint16 ( ) ;
int16 loopNo = argv [ 1 ] . toSint16 ( ) ;
int16 celNo = argv [ 2 ] . toSint16 ( ) ;
2009-10-28 19:10:39 +00:00
Common : : Point position ( argv [ 4 ] . toUint16 ( ) , argv [ 3 ] . toUint16 ( ) ) ;
2009-02-15 06:10:59 +00:00
2009-10-28 19:10:39 +00:00
bool result = s - > _gui - > isItSkip ( viewId , loopNo , celNo , position ) ;
2009-10-28 13:43:09 +00:00
return make_reg ( 0 , result ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kCelHigh ( EngineState * s , int argc , reg_t * argv ) {
2009-10-28 18:59:11 +00:00
GuiResourceId viewId = argv [ 0 ] . toSint16 ( ) ;
2009-12-24 13:50:50 +00:00
if ( viewId = = - 1 ) // Happens in SCI32
return NULL_REG ;
2009-10-28 18:59:11 +00:00
int16 loopNo = argv [ 1 ] . toSint16 ( ) ;
int16 celNo = ( argc > = 3 ) ? argv [ 2 ] . toSint16 ( ) : 0 ;
2009-02-15 06:10:59 +00:00
2009-10-28 18:59:11 +00:00
return make_reg ( 0 , s - > _gui - > getCelHeight ( viewId , loopNo , celNo ) ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kCelWide ( EngineState * s , int argc , reg_t * argv ) {
2009-10-28 18:59:11 +00:00
GuiResourceId viewId = argv [ 0 ] . toSint16 ( ) ;
2009-12-24 13:50:50 +00:00
if ( viewId = = - 1 ) // Happens in SCI32
return NULL_REG ;
2009-10-28 18:59:11 +00:00
int16 loopNo = argv [ 1 ] . toSint16 ( ) ;
int16 celNo = ( argc > = 3 ) ? argv [ 2 ] . toSint16 ( ) : 0 ;
2009-02-15 06:10:59 +00:00
2009-10-28 18:59:11 +00:00
return make_reg ( 0 , s - > _gui - > getCelWidth ( viewId , loopNo , celNo ) ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kNumLoops ( EngineState * s , int argc , reg_t * argv ) {
2009-10-28 18:59:11 +00:00
reg_t object = argv [ 0 ] ;
2009-11-03 14:24:47 +00:00
GuiResourceId viewId = GET_SEL32V ( s - > _segMan , object , view ) ;
2009-10-28 18:59:11 +00:00
int16 loopCount = s - > _gui - > getLoopCount ( viewId ) ;
2009-02-15 06:10:59 +00:00
2009-10-28 18:59:11 +00:00
debugC ( 2 , kDebugLevelGraphics , " NumLoops(view.%d) = %d \n " , viewId , loopCount ) ;
2009-02-15 06:10:59 +00:00
2009-10-25 22:33:08 +00:00
return make_reg ( 0 , loopCount ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kNumCels ( EngineState * s , int argc , reg_t * argv ) {
2009-10-28 18:59:11 +00:00
reg_t object = argv [ 0 ] ;
2009-11-03 14:24:47 +00:00
GuiResourceId viewId = GET_SEL32V ( s - > _segMan , object , view ) ;
int16 loopNo = GET_SEL32V ( s - > _segMan , object , loop ) ;
2009-10-28 18:59:11 +00:00
int16 celCount = s - > _gui - > getCelCount ( viewId , loopNo ) ;
2009-02-15 06:10:59 +00:00
2009-10-28 18:59:11 +00:00
debugC ( 2 , kDebugLevelGraphics , " NumCels(view.%d, %d) = %d \n " , viewId , loopNo , celCount ) ;
2009-02-15 06:10:59 +00:00
2009-10-25 22:33:08 +00:00
return make_reg ( 0 , celCount ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kOnControl ( EngineState * s , int argc , reg_t * argv ) {
2009-10-04 10:47:10 +00:00
Common : : Rect rect ;
byte screenMask ;
int argBase = 0 ;
2009-02-15 06:10:59 +00:00
2009-10-04 10:47:10 +00:00
if ( ( argc = = 2 ) | | ( argc = = 4 ) ) {
2009-10-28 13:20:30 +00:00
screenMask = SCI_SCREEN_MASK_CONTROL ;
2009-10-04 10:47:10 +00:00
} else {
screenMask = argv [ 0 ] . toUint16 ( ) ;
argBase = 1 ;
2009-02-15 06:10:59 +00:00
}
2009-10-04 10:47:10 +00:00
rect . left = argv [ argBase ] . toSint16 ( ) ;
rect . top = argv [ argBase + 1 ] . toSint16 ( ) ;
2009-02-15 06:10:59 +00:00
if ( argc > 3 ) {
2009-10-07 11:35:12 +00:00
rect . right = argv [ argBase + 2 ] . toSint16 ( ) ;
rect . bottom = argv [ argBase + 3 ] . toSint16 ( ) ;
2009-10-04 10:47:10 +00:00
} else {
rect . right = rect . left + 1 ;
rect . bottom = rect . top + 1 ;
2009-02-15 06:10:59 +00:00
}
2009-10-29 14:16:20 +00:00
uint16 result = s - > _gui - > onControl ( screenMask , rect ) ;
return make_reg ( 0 , result ) ;
2009-02-15 06:10:59 +00:00
}
2009-10-28 18:59:11 +00:00
# define K_DRAWPIC_FLAGS_MIRRORED (1 << 14)
2009-10-14 18:09:54 +00:00
# define K_DRAWPIC_FLAGS_ANIMATIONBLACKOUT (1 << 15)
2009-05-17 13:37:54 +00:00
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDrawPic ( EngineState * s , int argc , reg_t * argv ) {
2009-10-05 07:10:01 +00:00
GuiResourceId pictureId = argv [ 0 ] . toUint16 ( ) ;
2009-10-14 11:28:50 +00:00
uint16 flags = 0 ;
2009-10-07 20:58:33 +00:00
int16 animationNr = - 1 ;
2009-10-14 18:09:54 +00:00
bool animationBlackoutFlag = false ;
2009-10-07 20:58:33 +00:00
bool mirroredFlag = false ;
bool addToFlag = false ;
2009-10-07 18:09:06 +00:00
int16 EGApaletteNo = 0 ; // default needs to be 0
2009-10-03 20:49:18 +00:00
2009-10-07 20:58:33 +00:00
if ( argc > = 2 ) {
2009-10-14 11:28:50 +00:00
flags = argv [ 1 ] . toUint16 ( ) ;
2009-10-14 18:09:54 +00:00
if ( flags & K_DRAWPIC_FLAGS_ANIMATIONBLACKOUT )
animationBlackoutFlag = true ;
2009-10-07 20:58:33 +00:00
animationNr = flags & 0xFF ;
2009-10-14 18:09:54 +00:00
if ( flags & K_DRAWPIC_FLAGS_MIRRORED )
2009-10-07 20:58:33 +00:00
mirroredFlag = true ;
}
2009-10-03 20:49:18 +00:00
if ( argc > = 3 ) {
2009-10-07 20:58:33 +00:00
if ( ! argv [ 2 ] . isNull ( ) )
addToFlag = true ;
2009-10-08 14:37:55 +00:00
if ( ! s - > usesOldGfxFunctions ( ) )
addToFlag = ! addToFlag ;
2009-02-15 06:10:59 +00:00
}
2009-10-03 20:49:18 +00:00
if ( argc > = 4 )
EGApaletteNo = argv [ 3 ] . toUint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-14 18:09:54 +00:00
s - > _gui - > drawPicture ( pictureId , animationNr , animationBlackoutFlag , mirroredFlag , addToFlag , EGApaletteNo ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kBaseSetter ( EngineState * s , int argc , reg_t * argv ) {
2009-02-15 06:10:59 +00:00
reg_t object = argv [ 0 ] ;
2009-10-28 19:19:35 +00:00
s - > _gui - > baseSetter ( object ) ;
2009-02-15 06:10:59 +00:00
2009-10-28 23:32:28 +00:00
// WORKAROUND for a problem in LSL1VGA. This allows the casino door to be opened,
// till the actual problem is found
2009-12-27 12:54:03 +00:00
if ( s - > _gameId = = " lsl1sci " & & s - > currentRoomNumber ( ) = = 300 ) {
2009-11-04 14:17:14 +00:00
int top = GET_SEL32V ( s - > _segMan , object , brTop ) ;
PUT_SEL32V ( s - > _segMan , object , brTop , top + 2 ) ;
}
2009-10-28 23:32:28 +00:00
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
2009-10-28 19:19:35 +00:00
}
2009-02-15 06:10:59 +00:00
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kSetNowSeen ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 21:29:47 +00:00
s - > _gui - > setNowSeen ( argv [ 0 ] ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
2009-02-26 02:21:55 +00:00
}
2009-02-15 06:10:59 +00:00
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kPalette ( EngineState * s , int argc , reg_t * argv ) {
2009-06-07 15:53:30 +00:00
switch ( argv [ 0 ] . toUint16 ( ) ) {
2009-10-20 16:11:31 +00:00
case 1 : // Set resource palette
2009-10-03 20:49:18 +00:00
if ( argc = = 3 ) {
2009-10-20 16:11:31 +00:00
GuiResourceId resourceId = argv [ 1 ] . toUint16 ( ) ;
uint16 flags = argv [ 2 ] . toUint16 ( ) ;
s - > _gui - > paletteSet ( resourceId , flags ) ;
2009-10-03 20:49:18 +00:00
}
2009-03-29 15:08:50 +00:00
break ;
2009-10-20 18:45:46 +00:00
case 2 : { // Set palette-flag(s)
uint16 fromColor = CLIP < uint16 > ( argv [ 1 ] . toUint16 ( ) , 1 , 255 ) ;
uint16 toColor = CLIP < uint16 > ( argv [ 2 ] . toUint16 ( ) , 1 , 255 ) ;
uint16 flags = argv [ 3 ] . toUint16 ( ) ;
s - > _gui - > paletteSetFlag ( fromColor , toColor , flags ) ;
2009-03-29 15:08:50 +00:00
break ;
2009-10-20 18:45:46 +00:00
}
case 3 : { // Remove palette-flag(s)
uint16 fromColor = CLIP < uint16 > ( argv [ 1 ] . toUint16 ( ) , 1 , 255 ) ;
uint16 toColor = CLIP < uint16 > ( argv [ 2 ] . toUint16 ( ) , 1 , 255 ) ;
uint16 flags = argv [ 3 ] . toUint16 ( ) ;
s - > _gui - > paletteUnsetFlag ( fromColor , toColor , flags ) ;
2009-03-29 15:08:50 +00:00
break ;
2009-10-20 18:45:46 +00:00
}
2009-10-04 19:49:47 +00:00
case 4 : { // Set palette intensity
2009-10-20 16:11:31 +00:00
switch ( argc ) {
case 4 :
case 5 : {
2009-10-20 18:45:46 +00:00
uint16 fromColor = CLIP < uint16 > ( argv [ 1 ] . toUint16 ( ) , 1 , 255 ) ;
uint16 toColor = CLIP < uint16 > ( argv [ 2 ] . toUint16 ( ) , 1 , 255 ) ;
2009-10-20 16:11:31 +00:00
uint16 intensity = argv [ 3 ] . toUint16 ( ) ;
2009-10-14 19:39:07 +00:00
bool setPalette = ( argc < 5 ) ? true : ( argv [ 4 ] . isNull ( ) ) ? true : false ;
2009-10-04 19:49:47 +00:00
2009-10-14 19:39:07 +00:00
s - > _gui - > paletteSetIntensity ( fromColor , toColor , intensity , setPalette ) ;
2009-10-20 16:11:31 +00:00
break ;
}
default :
warning ( " kPalette(4) called with %d parameters " , argc ) ;
2009-04-01 20:32:45 +00:00
}
2009-03-29 15:08:50 +00:00
break ;
2009-10-04 19:49:47 +00:00
}
case 5 : { // Find closest color
2009-10-20 16:11:31 +00:00
uint16 r = argv [ 1 ] . toUint16 ( ) ;
uint16 g = argv [ 2 ] . toUint16 ( ) ;
uint16 b = argv [ 3 ] . toUint16 ( ) ;
2009-02-15 06:10:59 +00:00
2009-10-07 21:29:47 +00:00
return make_reg ( 0 , s - > _gui - > paletteFind ( r , g , b ) ) ;
2009-02-15 06:10:59 +00:00
}
2009-10-20 16:11:31 +00:00
case 6 : { // Animate
2009-10-20 18:45:46 +00:00
int16 argNr ;
2010-01-04 16:44:58 +00:00
bool paletteChanged = false ;
2009-10-20 18:45:46 +00:00
for ( argNr = 1 ; argNr < argc ; argNr + = 3 ) {
uint16 fromColor = argv [ argNr ] . toUint16 ( ) ;
uint16 toColor = argv [ argNr + 1 ] . toUint16 ( ) ;
int16 speed = argv [ argNr + 2 ] . toSint16 ( ) ;
2010-01-04 16:44:58 +00:00
if ( s - > _gui - > paletteAnimate ( fromColor , toColor , speed ) )
paletteChanged = true ;
2009-10-03 20:49:18 +00:00
}
2010-01-04 16:44:58 +00:00
if ( paletteChanged )
s - > _gui - > paletteAnimateSet ( ) ;
2009-02-15 06:10:59 +00:00
break ;
2009-10-20 16:11:31 +00:00
}
case 7 : { // Save palette to heap
warning ( " kPalette(7), save palette to heap STUB " ) ;
2009-03-29 15:08:50 +00:00
break ;
2009-10-20 16:11:31 +00:00
}
case 8 : { // Restore palette from heap
warning ( " kPalette(8), set stored palette STUB " ) ;
2009-03-29 15:08:50 +00:00
break ;
2009-10-20 16:11:31 +00:00
}
2009-03-29 15:08:50 +00:00
default :
2009-10-20 16:11:31 +00:00
warning ( " kPalette(%d), not implemented " , argv [ 0 ] . toUint16 ( ) ) ;
2009-02-15 06:10:59 +00:00
}
2009-02-19 20:50:55 +00:00
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
2009-10-15 06:37:05 +00:00
// This here is needed to make Pharkas work
reg_t kPalVary ( EngineState * s , int argc , reg_t * argv ) {
2009-10-20 19:56:37 +00:00
uint16 operation = argv [ 0 ] . toUint16 ( ) ;
switch ( operation ) {
case 0 : { // Init
GuiResourceId paletteId ;
uint16 time ;
if ( argc = = 3 ) {
paletteId = argv [ 1 ] . toUint16 ( ) ;
time = argv [ 2 ] . toUint16 ( ) ;
// forward call to SciGui
} else {
warning ( " kPalVary(init) called with unsupported argc %d " , argc ) ;
}
break ;
}
case 3 : { // DeInit
if ( argc = = 1 ) {
// forward call to SciGui
} else {
warning ( " kPalVary(deinit) called with unsupported argc %d " , argc ) ;
}
break ;
}
2009-10-20 20:57:08 +00:00
case 6 : { // Pause
bool pauseState ;
if ( argc = = 2 ) {
pauseState = argv [ 1 ] . isNull ( ) ? false : true ;
// this call is actually counting states, so calling this 3 times with true will require calling it later
// 3 times with false to actually remove pause
// forward call to SciGui
} else {
warning ( " kPalVary(pause) called with unsupported argc %d " , argc ) ;
}
break ;
}
2009-10-20 19:56:37 +00:00
default :
warning ( " kPalVary(%d), not implemented (argc = %d) " , operation , argc ) ;
}
2009-10-15 06:37:05 +00:00
return NULL_REG ;
}
2009-10-20 16:11:31 +00:00
reg_t kAssertPalette ( EngineState * s , int argc , reg_t * argv ) {
GuiResourceId viewId = argv [ 1 ] . toUint16 ( ) ;
2009-10-31 17:54:28 +00:00
// TODO: implement this
2009-10-20 16:11:31 +00:00
warning ( " kAssertPalette() called with viewId = %d " , viewId ) ;
return s - > r_acc ;
}
2009-10-30 22:55:35 +00:00
// Used to show hires character portraits in the Windows CD version of KQ6
reg_t kPortrait ( EngineState * s , int argc , reg_t * argv ) {
uint16 operation = argv [ 0 ] . toUint16 ( ) ;
switch ( operation ) {
2009-10-31 19:48:28 +00:00
case 0 : { // load
2009-10-31 15:25:47 +00:00
if ( argc = = 2 ) {
Common : : String resourceName = s - > _segMan - > getString ( argv [ 1 ] ) ;
2009-10-31 19:48:28 +00:00
return s - > _gui - > portraitLoad ( resourceName ) ;
2009-10-31 15:25:47 +00:00
} else {
warning ( " kPortrait(loadResource) called with unsupported argc %d " , argc ) ;
}
break ;
}
2009-10-31 19:48:28 +00:00
case 1 : { // show
2009-10-31 15:25:47 +00:00
if ( argc = = 10 ) {
Common : : String resourceName = s - > _segMan - > getString ( argv [ 1 ] ) ;
2009-10-31 19:48:28 +00:00
Common : : Point position = Common : : Point ( argv [ 2 ] . toUint16 ( ) , argv [ 3 ] . toUint16 ( ) ) ;
2009-10-31 19:55:49 +00:00
uint resourceNum = argv [ 4 ] . toUint16 ( ) & 0xff ;
2009-10-31 15:25:47 +00:00
uint noun = argv [ 5 ] . toUint16 ( ) & 0xff ;
uint verb = argv [ 6 ] . toUint16 ( ) & 0xff ;
uint cond = argv [ 7 ] . toUint16 ( ) & 0xff ;
2009-10-31 19:55:49 +00:00
uint seq = argv [ 8 ] . toUint16 ( ) & 0xff ;
2009-10-31 15:25:47 +00:00
// argv[9] is usually 0??!!
2009-10-31 17:54:28 +00:00
2009-10-31 19:48:28 +00:00
s - > _gui - > portraitShow ( resourceName , position , resourceNum , noun , verb , cond , seq ) ;
return SIGNAL_REG ;
2009-10-31 17:54:28 +00:00
// TODO: implement this. Looks to be a modified version of kDoSync
2009-10-31 15:25:47 +00:00
} else {
warning ( " kPortrait(show) called with unsupported argc %d " , argc ) ;
}
break ;
}
2009-10-31 19:48:28 +00:00
case 2 : { // unload
2009-10-31 15:25:47 +00:00
if ( argc = = 2 ) {
2009-10-31 19:55:49 +00:00
uint16 portraitId = argv [ 1 ] . toUint16 ( ) ;
2009-10-31 19:48:28 +00:00
s - > _gui - > portraitUnload ( portraitId ) ;
2009-10-31 15:25:47 +00:00
} else {
warning ( " kPortrait(unload) called with unsupported argc %d " , argc ) ;
}
break ;
}
2009-10-30 23:44:12 +00:00
default :
warning ( " kPortrait(%d), not implemented (argc = %d) " , operation , argc ) ;
2009-10-30 22:55:35 +00:00
}
2009-10-31 17:54:28 +00:00
return s - > r_acc ;
2009-10-30 22:55:35 +00:00
}
2009-10-11 14:28:20 +00:00
void _k_GenericDrawControl ( EngineState * s , reg_t controlObject , bool hilite ) {
2009-11-03 14:24:47 +00:00
int16 type = GET_SEL32V ( s - > _segMan , controlObject , type ) ;
int16 style = GET_SEL32V ( s - > _segMan , controlObject , state ) ;
int16 x = GET_SEL32V ( s - > _segMan , controlObject , nsLeft ) ;
int16 y = GET_SEL32V ( s - > _segMan , controlObject , nsTop ) ;
GuiResourceId fontId = GET_SEL32V ( s - > _segMan , controlObject , font ) ;
reg_t textReference = GET_SEL32 ( s - > _segMan , controlObject , text ) ;
2009-10-11 14:28:20 +00:00
Common : : String text ;
Common : : Rect rect ;
2010-01-05 01:37:57 +00:00
TextAlignment alignment ;
2009-10-11 14:28:20 +00:00
int16 mode , maxChars , cursorPos , upperPos , listCount , i ;
int16 upperOffset , cursorOffset ;
GuiResourceId viewId ;
2010-01-06 17:25:54 +00:00
int16 loopNo ;
int16 celNo ;
2009-10-11 14:28:20 +00:00
reg_t listSeeker ;
Common : : String * listStrings = NULL ;
const char * * listEntries = NULL ;
2009-10-11 15:41:52 +00:00
bool isAlias = false ;
2009-10-11 14:28:20 +00:00
2009-11-03 14:24:47 +00:00
kGraphCreateRect ( x , y , GET_SEL32V ( s - > _segMan , controlObject , nsRight ) , GET_SEL32V ( s - > _segMan , controlObject , nsBottom ) , & rect ) ;
2009-10-14 10:11:03 +00:00
2009-10-11 14:28:20 +00:00
if ( ! textReference . isNull ( ) )
2009-11-03 14:24:47 +00:00
text = s - > _segMan - > getString ( textReference ) ;
2009-10-11 14:28:20 +00:00
switch ( type ) {
2009-10-13 18:49:10 +00:00
case SCI_CONTROLS_TYPE_BUTTON :
2009-10-11 14:28:20 +00:00
debugC ( 2 , kDebugLevelGraphics , " drawing button %04x:%04x to %d,%d \n " , PRINT_REG ( controlObject ) , x , y ) ;
2009-10-11 15:41:52 +00:00
s - > _gui - > drawControlButton ( rect , controlObject , s - > strSplit ( text . c_str ( ) , NULL ) . c_str ( ) , fontId , style , hilite ) ;
2009-10-11 14:28:20 +00:00
return ;
2009-10-13 18:49:10 +00:00
case SCI_CONTROLS_TYPE_TEXT :
2009-11-03 14:24:47 +00:00
alignment = GET_SEL32V ( s - > _segMan , controlObject , mode ) ;
2009-10-18 15:38:49 +00:00
debugC ( 2 , kDebugLevelGraphics , " drawing text %04x:%04x ('%s') to %d,%d, mode=%d \n " , PRINT_REG ( controlObject ) , text . c_str ( ) , x , y , alignment ) ;
2009-12-21 14:06:47 +00:00
s - > _gui - > drawControlText ( rect , controlObject , s - > strSplit ( text . c_str ( ) ) . c_str ( ) , fontId , alignment , style , hilite ) ;
2009-10-11 14:28:20 +00:00
return ;
2009-10-13 18:49:10 +00:00
case SCI_CONTROLS_TYPE_TEXTEDIT :
2009-11-03 14:24:47 +00:00
mode = GET_SEL32V ( s - > _segMan , controlObject , mode ) ;
maxChars = GET_SEL32V ( s - > _segMan , controlObject , max ) ;
cursorPos = GET_SEL32V ( s - > _segMan , controlObject , cursor ) ;
2009-10-11 14:28:20 +00:00
debugC ( 2 , kDebugLevelGraphics , " drawing edit control %04x:%04x (text %04x:%04x, '%s') to %d,%d \n " , PRINT_REG ( controlObject ) , PRINT_REG ( textReference ) , text . c_str ( ) , x , y ) ;
2009-10-11 15:41:52 +00:00
s - > _gui - > drawControlTextEdit ( rect , controlObject , s - > strSplit ( text . c_str ( ) , NULL ) . c_str ( ) , fontId , mode , style , cursorPos , maxChars , hilite ) ;
2009-10-11 14:28:20 +00:00
return ;
2009-10-13 18:49:10 +00:00
case SCI_CONTROLS_TYPE_ICON :
2009-11-03 14:24:47 +00:00
viewId = GET_SEL32V ( s - > _segMan , controlObject , view ) ;
2009-10-13 20:25:51 +00:00
{
2009-11-03 14:24:47 +00:00
int l = GET_SEL32V ( s - > _segMan , controlObject , loop ) ;
2009-10-13 20:25:51 +00:00
loopNo = ( l & 0x80 ) ? l - 256 : l ;
2009-11-03 14:24:47 +00:00
int c = GET_SEL32V ( s - > _segMan , controlObject , cel ) ;
2009-10-13 20:25:51 +00:00
celNo = ( c & 0x80 ) ? c - 256 : c ;
}
2009-10-11 14:28:20 +00:00
debugC ( 2 , kDebugLevelGraphics , " drawing icon control %04x:%04x to %d,%d \n " , PRINT_REG ( controlObject ) , x , y - 1 ) ;
2009-10-11 15:41:52 +00:00
s - > _gui - > drawControlIcon ( rect , controlObject , viewId , loopNo , celNo , style , hilite ) ;
2009-10-11 14:28:20 +00:00
return ;
2009-10-13 18:49:10 +00:00
case SCI_CONTROLS_TYPE_LIST :
case SCI_CONTROLS_TYPE_LIST_ALIAS :
if ( type = = SCI_CONTROLS_TYPE_LIST_ALIAS )
2009-10-11 15:41:52 +00:00
isAlias = true ;
2009-11-03 14:24:47 +00:00
maxChars = GET_SEL32V ( s - > _segMan , controlObject , x ) ; // max chars per entry
2009-10-11 14:28:20 +00:00
// NOTE: most types of pointer dereferencing don't like odd offsets
if ( maxChars & 1 ) {
warning ( " List control with odd maxChars %d. This is not yet implemented for all types of segments " , maxChars ) ;
}
2009-11-03 14:24:47 +00:00
cursorOffset = GET_SEL32V ( s - > _segMan , controlObject , cursor ) ;
2009-10-11 14:28:20 +00:00
if ( s - > _kernel - > _selectorCache . topString ! = - 1 ) {
// Games from early SCI1 onwards use topString
2009-11-03 14:24:47 +00:00
upperOffset = GET_SEL32V ( s - > _segMan , controlObject , topString ) ;
2009-10-11 14:28:20 +00:00
} else {
// Earlier games use lsTop
2009-11-03 14:24:47 +00:00
upperOffset = GET_SEL32V ( s - > _segMan , controlObject , lsTop ) ;
2009-10-11 14:28:20 +00:00
}
// Count string entries in NULL terminated string list
listCount = 0 ; listSeeker = textReference ;
while ( s - > _segMan - > strlen ( listSeeker ) > 0 ) {
listCount + + ;
listSeeker . offset + = maxChars ;
}
// TODO: This is rather convoluted... It would be a lot cleaner
// if sciw_new_list_control would take a list of Common::String
cursorPos = 0 ; upperPos = 0 ;
if ( listCount ) {
// We create a pointer-list to the different strings, we also find out whats upper and cursor position
listSeeker = textReference ;
listEntries = ( const char * * ) malloc ( sizeof ( char * ) * listCount ) ;
listStrings = new Common : : String [ listCount ] ;
for ( i = 0 ; i < listCount ; i + + ) {
listStrings [ i ] = s - > _segMan - > getString ( listSeeker ) ;
listEntries [ i ] = listStrings [ i ] . c_str ( ) ;
if ( listSeeker . offset = = upperOffset )
upperPos = i ;
if ( listSeeker . offset = = cursorOffset )
cursorPos = i ;
listSeeker . offset + = maxChars ;
}
}
debugC ( 2 , kDebugLevelGraphics , " drawing list control %04x:%04x to %d,%d, diff %d \n " , PRINT_REG ( controlObject ) , x , y , SCI_MAX_SAVENAME_LENGTH ) ;
2009-10-11 15:41:52 +00:00
s - > _gui - > drawControlList ( rect , controlObject , maxChars , listCount , listEntries , fontId , style , upperPos , cursorPos , isAlias , hilite ) ;
2009-10-11 14:28:20 +00:00
free ( listEntries ) ;
delete [ ] listStrings ;
return ;
2009-10-13 19:08:40 +00:00
case SCI_CONTROLS_TYPE_DUMMY :
// Actually this here does nothing at all, its required by at least QfG1/EGA that we accept this type
2009-10-13 17:50:27 +00:00
return ;
2009-10-11 14:28:20 +00:00
default :
error ( " unsupported control type %d " , type ) ;
}
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDrawControl ( EngineState * s , int argc , reg_t * argv ) {
2009-10-11 14:28:20 +00:00
reg_t controlObject = argv [ 0 ] ;
2009-10-29 19:32:27 +00:00
Common : : String objName = s - > _segMan - > getObjectName ( controlObject ) ;
// Disable the "Change Directory" button, as we don't allow the game engine to
// change the directory where saved games are placed
if ( objName = = " changeDirI " ) {
int state = GET_SEL32V ( s - > _segMan , controlObject , state ) ;
PUT_SEL32V ( s - > _segMan , controlObject , state , ( state | kControlStateDisabled ) & ~ kControlStateEnabled ) ;
}
2009-02-15 06:10:59 +00:00
2009-10-11 14:28:20 +00:00
_k_GenericDrawControl ( s , controlObject , false ) ;
2009-02-15 06:10:59 +00:00
return NULL_REG ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kHiliteControl ( EngineState * s , int argc , reg_t * argv ) {
2009-10-11 14:28:20 +00:00
reg_t controlObject = argv [ 0 ] ;
2009-02-19 20:50:55 +00:00
2009-10-11 14:28:20 +00:00
_k_GenericDrawControl ( s , controlObject , true ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kEditControl ( EngineState * s , int argc , reg_t * argv ) {
2009-10-11 12:15:17 +00:00
reg_t controlObject = argv [ 0 ] ;
reg_t eventObject = argv [ 1 ] ;
2009-02-15 06:10:59 +00:00
2009-10-11 12:15:17 +00:00
if ( ! controlObject . isNull ( ) )
s - > _gui - > editControl ( controlObject , eventObject ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kAddToPic ( EngineState * s , int argc , reg_t * argv ) {
2009-10-05 07:10:01 +00:00
GuiResourceId viewId ;
2010-01-06 17:25:54 +00:00
int16 loopNo ;
int16 celNo ;
2009-10-04 14:59:51 +00:00
int16 leftPos , topPos , priority , control ;
2009-02-15 06:10:59 +00:00
2009-10-04 14:59:51 +00:00
switch ( argc ) {
2009-10-25 18:43:23 +00:00
// Is this ever really gets called with 0 parameters, we need to set _picNotValid!!
//case 0:
// break;
2009-10-04 14:59:51 +00:00
case 1 :
2009-10-23 20:41:59 +00:00
if ( argv [ 0 ] . isNull ( ) )
return s - > r_acc ;
2009-10-07 21:29:47 +00:00
s - > _gui - > addToPicList ( argv [ 0 ] , argc , argv ) ;
2009-10-04 14:59:51 +00:00
break ;
case 7 :
viewId = argv [ 0 ] . toUint16 ( ) ;
2009-10-04 16:35:02 +00:00
loopNo = argv [ 1 ] . toSint16 ( ) ;
2009-10-05 07:10:01 +00:00
celNo = argv [ 2 ] . toSint16 ( ) ;
2009-10-04 14:59:51 +00:00
leftPos = argv [ 3 ] . toSint16 ( ) ;
topPos = argv [ 4 ] . toSint16 ( ) ;
2009-06-07 15:53:30 +00:00
priority = argv [ 5 ] . toSint16 ( ) ;
control = argv [ 6 ] . toSint16 ( ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > addToPicView ( viewId , loopNo , celNo , leftPos , topPos , priority , control ) ;
2009-10-04 14:59:51 +00:00
break ;
default :
2009-10-07 21:25:31 +00:00
error ( " kAddToPic with unsupported parameter count %d " , argc ) ;
2009-02-15 06:10:59 +00:00
}
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kGetPort ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 21:29:47 +00:00
return s - > _gui - > getPort ( ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kSetPort ( EngineState * s , int argc , reg_t * argv ) {
2009-10-03 20:49:18 +00:00
uint16 portPtr ;
Common : : Rect picRect ;
int16 picTop , picLeft ;
2009-10-13 16:18:17 +00:00
bool initPriorityBandsFlag = false ;
2009-10-07 21:25:31 +00:00
2009-02-15 22:28:12 +00:00
switch ( argc ) {
2009-10-11 18:42:52 +00:00
case 1 :
2009-10-03 20:49:18 +00:00
portPtr = argv [ 0 ] . toSint16 ( ) ;
2009-10-07 21:29:47 +00:00
s - > _gui - > setPort ( portPtr ) ;
2009-10-03 20:49:18 +00:00
break ;
2009-02-15 06:10:59 +00:00
2009-10-13 16:18:17 +00:00
case 7 :
initPriorityBandsFlag = true ;
2009-10-11 18:42:52 +00:00
case 4 :
case 6 :
2009-10-03 20:49:18 +00:00
picRect . top = argv [ 0 ] . toSint16 ( ) ;
picRect . left = argv [ 1 ] . toSint16 ( ) ;
2009-10-07 11:35:12 +00:00
picRect . bottom = argv [ 2 ] . toSint16 ( ) ;
picRect . right = argv [ 3 ] . toSint16 ( ) ;
2009-10-13 16:18:17 +00:00
picTop = ( argc > = 6 ) ? argv [ 4 ] . toSint16 ( ) : 0 ;
picLeft = ( argc > = 6 ) ? argv [ 5 ] . toSint16 ( ) : 0 ;
s - > _gui - > setPortPic ( picRect , picTop , picLeft , initPriorityBandsFlag ) ;
2009-02-15 06:10:59 +00:00
break ;
2009-10-03 20:49:18 +00:00
2009-10-11 18:42:52 +00:00
default :
2009-05-31 10:02:16 +00:00
error ( " SetPort was called with %d parameters " , argc ) ;
2009-02-15 06:10:59 +00:00
break ;
}
return NULL_REG ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDrawCel ( EngineState * s , int argc , reg_t * argv ) {
2009-10-05 07:10:01 +00:00
GuiResourceId viewId = argv [ 0 ] . toSint16 ( ) ;
2010-01-06 17:25:54 +00:00
int16 loopNo = argv [ 1 ] . toSint16 ( ) ;
int16 celNo = argv [ 2 ] . toSint16 ( ) ;
2009-10-31 15:25:47 +00:00
uint16 x = argv [ 3 ] . toUint16 ( ) ;
uint16 y = argv [ 4 ] . toUint16 ( ) ;
int16 priority = ( argc > 5 ) ? argv [ 5 ] . toSint16 ( ) : - 1 ;
uint16 paletteNo = ( argc > 6 ) ? argv [ 6 ] . toUint16 ( ) : 0 ;
2009-10-31 17:54:28 +00:00
int16 origHeight = ( argc > 7 ) ? argv [ 7 ] . toSint16 ( ) : - 1 ;
2009-02-15 06:10:59 +00:00
2009-10-31 17:54:28 +00:00
s - > _gui - > drawCel ( viewId , loopNo , celNo , x , y , priority , paletteNo , origHeight ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDisposeWindow ( EngineState * s , int argc , reg_t * argv ) {
2009-10-03 20:49:18 +00:00
int goner_nr = argv [ 0 ] . toSint16 ( ) ;
2009-11-05 07:27:36 +00:00
bool reanimate = true ;
2009-10-31 22:50:05 +00:00
if ( ( argc = = 2 ) & & ( argv [ 1 ] . isNull ( ) ) )
2009-11-05 07:27:36 +00:00
reanimate = false ;
2009-02-19 20:50:55 +00:00
2009-10-31 22:50:05 +00:00
s - > _gui - > disposeWindow ( goner_nr , reanimate ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kNewWindow ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 11:35:12 +00:00
Common : : Rect rect1 ( argv [ 1 ] . toSint16 ( ) , argv [ 0 ] . toSint16 ( ) , argv [ 3 ] . toSint16 ( ) , argv [ 2 ] . toSint16 ( ) ) ;
2009-10-03 20:49:18 +00:00
Common : : Rect rect2 ;
2009-05-25 13:25:31 +00:00
int argextra = argc = = 13 ? 4 : 0 ; // Triggers in PQ3 and SCI1.1 games
2009-10-03 20:49:18 +00:00
int style = argv [ 5 + argextra ] . toSint16 ( ) ;
int priority = ( argc > 6 + argextra ) ? argv [ 6 + argextra ] . toSint16 ( ) : - 1 ;
int colorPen = ( argc > 7 + argextra ) ? argv [ 7 + argextra ] . toSint16 ( ) : 0 ;
int colorBack = ( argc > 8 + argextra ) ? argv [ 8 + argextra ] . toSint16 ( ) : 255 ;
2009-02-15 06:10:59 +00:00
2009-10-03 20:49:18 +00:00
// const char *title = argv[4 + argextra].segment ? kernel_dereference_char_pointer(s, argv[4 + argextra], 0) : NULL;
if ( argc = = 13 ) {
2009-10-07 11:35:12 +00:00
rect2 = Common : : Rect ( argv [ 5 ] . toSint16 ( ) , argv [ 4 ] . toSint16 ( ) , argv [ 7 ] . toSint16 ( ) , argv [ 6 ] . toSint16 ( ) ) ;
2009-10-03 20:49:18 +00:00
}
2009-06-07 16:50:34 +00:00
2009-09-27 01:50:26 +00:00
Common : : String title ;
if ( argv [ 4 + argextra ] . segment ) {
2009-10-04 18:38:18 +00:00
title = s - > _segMan - > getString ( argv [ 4 + argextra ] ) ;
2009-09-27 01:50:26 +00:00
title = s - > strSplit ( title . c_str ( ) , NULL ) ;
}
2009-02-15 06:10:59 +00:00
2009-10-07 21:29:47 +00:00
return s - > _gui - > newWindow ( rect1 , rect2 , style , priority , colorPen , colorBack , title . c_str ( ) ) ;
2009-02-15 06:10:59 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kAnimate ( EngineState * s , int argc , reg_t * argv ) {
2009-10-04 14:59:51 +00:00
reg_t castListReference = ( argc > 0 ) ? argv [ 0 ] : NULL_REG ;
bool cycle = ( argc > 1 ) ? ( ( argv [ 1 ] . toUint16 ( ) ) ? true : false ) : false ;
2009-02-15 06:10:59 +00:00
2009-12-19 16:19:53 +00:00
# ifdef USE_OLD_MUSIC_FUNCTIONS
2010-01-01 15:35:27 +00:00
// Take care of incoming events (kAnimate is called semi-regularly)
2009-10-09 19:41:39 +00:00
process_sound_events ( s ) ;
2009-12-19 16:19:53 +00:00
# endif
2009-10-07 21:29:47 +00:00
s - > _gui - > animate ( castListReference , cycle , argc , argv ) ;
2009-10-14 21:45:16 +00:00
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kShakeScreen ( EngineState * s , int argc , reg_t * argv ) {
2009-10-11 08:52:23 +00:00
int16 shakeCount = ( argc > 0 ) ? argv [ 0 ] . toUint16 ( ) : 1 ;
int16 directions = ( argc > 1 ) ? argv [ 1 ] . toUint16 ( ) : 1 ;
2009-02-15 06:10:59 +00:00
2009-10-11 08:52:23 +00:00
s - > _gui - > shakeScreen ( shakeCount , directions ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kDisplay ( EngineState * s , int argc , reg_t * argv ) {
2009-02-15 06:10:59 +00:00
reg_t textp = argv [ 0 ] ;
2009-06-07 16:50:34 +00:00
int index = ( argc > 1 ) ? argv [ 1 ] . toUint16 ( ) : 0 ;
2009-02-15 06:10:59 +00:00
2009-10-03 20:49:18 +00:00
Common : : String text ;
2009-02-15 06:10:59 +00:00
if ( textp . segment ) {
2009-10-03 20:49:18 +00:00
argc - - ; argv + + ;
2009-10-04 18:38:18 +00:00
text = s - > _segMan - > getString ( textp ) ;
2009-02-15 06:10:59 +00:00
} else {
2009-10-03 20:49:18 +00:00
argc - - ; argc - - ; argv + + ; argv + + ;
2009-02-15 06:10:59 +00:00
text = kernel_lookup_text ( s , textp , index ) ;
}
2009-10-07 21:29:47 +00:00
s - > _gui - > display ( s - > strSplit ( text . c_str ( ) ) . c_str ( ) , argc , argv ) ;
2009-02-15 06:10:59 +00:00
return s - > r_acc ;
}
2009-02-21 10:23:36 +00:00
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kShowMovie ( EngineState * s , int argc , reg_t * argv ) {
2009-08-30 19:47:47 +00:00
// KQ6 Windows calls this with one argument. It doesn't seem
// to have a purpose...
if ( argc = = 1 )
return NULL_REG ;
// The Windows and DOS versions use different video format as well
// as a different argument set.
2009-10-16 18:05:56 +00:00
if ( argv [ 0 ] . toUint16 ( ) = = 0 ) {
// Windows
Common : : String filename = s - > _segMan - > getString ( argv [ 1 ] ) ;
Graphics : : AviDecoder * aviDecoder = new Graphics : : AviDecoder ( g_system - > getMixer ( ) ) ;
Graphics : : VideoPlayer * player = new Graphics : : VideoPlayer ( aviDecoder ) ;
if ( aviDecoder - > loadFile ( filename . c_str ( ) ) )
player - > playVideo ( ) ;
else
warning ( " Failed to open movie file %s " , filename . c_str ( ) ) ;
aviDecoder - > closeFile ( ) ;
delete player ;
delete aviDecoder ;
} else {
// DOS
2009-08-30 19:47:47 +00:00
2009-10-16 18:05:56 +00:00
Common : : String filename = s - > _segMan - > getString ( argv [ 0 ] ) ;
int delay = argv [ 1 ] . toUint16 ( ) ; // Time between frames in ticks
2009-10-18 18:47:53 +00:00
SeqDecoder * seqDecoder = new SeqDecoder ( ) ;
2009-10-16 18:05:56 +00:00
Graphics : : VideoPlayer * player = new Graphics : : VideoPlayer ( seqDecoder ) ;
if ( seqDecoder - > loadFile ( filename . c_str ( ) , delay ) )
player - > playVideo ( ) ;
else
warning ( " Failed to open movie file %s " , filename . c_str ( ) ) ;
seqDecoder - > closeFile ( ) ;
delete player ;
delete seqDecoder ;
}
return s - > r_acc ;
2009-08-30 19:47:47 +00:00
}
- Changed the unimplemented debug SCI kernel functions (InspectObj, ShowSends, ShowObjs, ShowFree, StackUsage and Profiler) to be dummy functions - we have our own debugger, and don't use these functions for debugging
- Removed the function number parameter from all kernel functions, as it's no longer needed, and removed the FAKE_FUNCT_NR hack
- Removed kUnknown() and kStub()
- Dummy/unknown kernel functions are no longer invoked, and a warning is shown instead, with the paremeters passed to them
Note: there is an evil hack used for debugging scripts in invoke_selector(), which probably no longer works now
svn-id: r44461
2009-09-29 14:24:07 +00:00
reg_t kSetVideoMode ( EngineState * s , int argc , reg_t * argv ) {
2009-05-23 13:26:45 +00:00
// This call is used for KQ6's intro. It has one parameter, which is
// 1 when the intro begins, and 0 when it ends. It is suspected that
// this is actually a flag to enable video planar memory access, as
// the video decoder in KQ6 is specifically written for the planar
// memory model. Planar memory mode access was used for VGA "Mode X"
// (320x240 resolution, although the intro in KQ6 is 320x200).
// Refer to http://en.wikipedia.org/wiki/Mode_X
2009-10-28 18:59:11 +00:00
//warning("STUB: SetVideoMode %d", argv[0].toUint16());
2009-05-23 13:26:45 +00:00
return s - > r_acc ;
}
2009-10-03 20:49:18 +00:00
// New calls for SCI11. Using those is only needed when using text-codes so that one is able to change
// font and/or color multiple times during kDisplay and kDrawControl
reg_t kTextFonts ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 21:29:47 +00:00
s - > _gui - > textFonts ( argc , argv ) ;
2009-10-03 20:49:18 +00:00
return s - > r_acc ;
}
reg_t kTextColors ( EngineState * s , int argc , reg_t * argv ) {
2009-10-07 21:29:47 +00:00
s - > _gui - > textColors ( argc , argv ) ;
2009-10-03 20:49:18 +00:00
return s - > r_acc ;
}
2009-02-21 10:23:36 +00:00
} // End of namespace Sci