aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/kernel.h5
-rw-r--r--engines/sci/engine/kgraphics.cpp60
-rw-r--r--engines/sci/engine/kmath.cpp12
-rw-r--r--engines/sci/engine/kmenu.cpp6
-rw-r--r--engines/sci/engine/kmisc.cpp2
-rw-r--r--engines/sci/engine/kmovement.cpp3
-rw-r--r--engines/sci/engine/kpathing.cpp2
-rw-r--r--engines/sci/engine/kscripts.cpp2
-rw-r--r--engines/sci/engine/ksound.cpp10
9 files changed, 50 insertions, 52 deletions
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index 0ec47e4ce7..27d9df059d 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -204,11 +204,6 @@ bool is_object(EngineState *s, reg_t obj);
/* Returns the parameter value or (alt) if not enough parameters were supplied */
-#define KP_ALT(x, alt) ((x < argc)? argv[x] : (alt))
-
-#define SKPV_OR_ALT(x,a) KP_ALT(x, make_reg(0, a)).toSint16()
-#define UKPV_OR_ALT(x,a) KP_ALT(x, make_reg(0, a)).toUint16()
-
reg_t *kernel_dereference_reg_pointer(EngineState *s, reg_t pointer, int entries);
byte *kernel_dereference_bulk_pointer(EngineState *s, reg_t pointer, int entries);
#define kernel_dereference_char_pointer(state, pointer, entries) (char*)kernel_dereference_bulk_pointer(state, pointer, entries)
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 5c3e481710..5a6f586cb5 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -397,7 +397,7 @@ reg_t kMoveCursor(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kShow(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int old_map = s->pic_visible_map;
- s->pic_visible_map = (gfx_map_mask_t) UKPV_OR_ALT(0, 1);
+ s->pic_visible_map = (argc > 0) ? (gfx_map_mask_t) argv[0].toUint16() : GFX_MASK_VISUAL;
switch (s->pic_visible_map) {
@@ -501,11 +501,12 @@ reg_t kGraph(EngineState *s, int funct_nr, int argc, reg_t *argv) {
break;
case K_GRAPH_DRAW_LINE: {
-
- gfx_color_t gfxcolor = graph_map_color(s, argv[5].toSint16(), SKPV_OR_ALT(6, -1), SKPV_OR_ALT(7, -1));
+ int16 priority = (argc > 6) ? argv[6].toSint16() : -1;
+ int16 control = (argc > 7) ? argv[7].toSint16() : -1;
+ gfx_color_t gfxcolor = graph_map_color(s, argv[5].toSint16(), priority, control);
debugC(2, kDebugLevelGraphics, "draw_line((%d, %d), (%d, %d), col=%d, p=%d, c=%d, mask=%d)\n",
- argv[2].toSint16(), argv[1].toSint16(), argv[4].toSint16(), argv[3].toSint16(), argv[5].toSint16(), SKPV_OR_ALT(6, -1), SKPV_OR_ALT(7, -1), gfxcolor.mask);
+ argv[2].toSint16(), argv[1].toSint16(), argv[4].toSint16(), argv[3].toSint16(), argv[5].toSint16(), priority, control, gfxcolor.mask);
redraw_port = 1;
@@ -551,13 +552,14 @@ reg_t kGraph(EngineState *s, int funct_nr, int argc, reg_t *argv) {
break;
case K_GRAPH_FILL_BOX_ANY: {
-
- gfx_color_t color = graph_map_color(s, argv[6].toSint16(), SKPV_OR_ALT(7, -1), SKPV_OR_ALT(8, -1));
+ int16 priority = (argc > 7) ? argv[7].toSint16() : -1;
+ int16 control = (argc > 8) ? argv[8].toSint16() : -1;
+ gfx_color_t color = graph_map_color(s, argv[6].toSint16(), priority, control);
color.mask = (byte)argv[5].toUint16();
debugC(2, kDebugLevelGraphics, "fill_box_any((%d, %d), (%d, %d), col=%d, p=%d, c=%d, mask=%d)\n",
- argv[2].toSint16(), argv[1].toSint16(), argv[4].toSint16(), argv[3].toSint16(), argv[6].toSint16(), SKPV_OR_ALT(7, -1), SKPV_OR_ALT(8, -1), argv[5].toUint16());
+ argv[2].toSint16(), argv[1].toSint16(), argv[4].toSint16(), argv[3].toSint16(), argv[6].toSint16(), priority, control, argv[5].toUint16());
// FIXME/TODO: this is not right, as some of the dialogs are drawn *behind* some widgets. But at least it works for now
//ADD_TO_CURRENT_PICTURE_PORT(gfxw_new_box(s->gfx_state, area, color, color, GFX_BOX_SHADE_FLAT)); // old code
@@ -620,7 +622,7 @@ reg_t kTextSize(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int width, height;
char *text = argv[1].segment ? (char *) kernel_dereference_bulk_pointer(s, argv[1], 0) : NULL;
reg_t *dest = kernel_dereference_reg_pointer(s, argv[0], 4);
- int maxwidth = KP_ALT(3, NULL_REG).toUint16();
+ int maxwidth = (argc > 3) ? argv[3].toUint16() : 0;
int font_nr = argv[2].toUint16();
if (maxwidth < 0)
@@ -771,7 +773,7 @@ static int collides_with(EngineState *s, Common::Rect area, reg_t other_obj, int
reg_t kCanBeHere(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t obj = argv[0];
- reg_t cliplist_ref = KP_ALT(1, NULL_REG);
+ reg_t cliplist_ref = (argc > 1) ? argv[1] : NULL_REG;
List *cliplist = NULL;
GfxPort *port = s->picture_port;
uint16 signal;
@@ -987,24 +989,19 @@ void _k_view_list_free_backgrounds(EngineState *s, ViewObject *list, int list_nr
reg_t kDrawPic(EngineState *s, int funct_nr, int argc, reg_t *argv) {
drawn_pic_t dp;
- int add_to_pic = 1;
+ bool add_to_pic = (argc > 2) ? !argv[2].toSint16() : false;
gfx_color_t transparent = s->wm_port->_bgcolor;
int picFlags = DRAWPIC01_FLAG_FILL_NORMALLY;
+ if (s->_flags & GF_SCI0_OLDGFXFUNCS)
+ add_to_pic = (argc > 2) ? argv[2].toSint16() : false;
+
dp.nr = argv[0].toSint16();
- dp.palette = SKPV_OR_ALT(3, 0);
+ dp.palette = (argc > 3) ? argv[3].toSint16() : 0;
if ((argc > 1) && (argv[1].toUint16() & K_DRAWPIC_FLAG_MIRRORED))
picFlags |= DRAWPIC1_FLAG_MIRRORED;
- if (s->_flags & GF_SCI0_OLDGFXFUNCS) {
- if (!SKPV_OR_ALT(2, 0))
- add_to_pic = 0;
- } else {
- if (SKPV_OR_ALT(2, 1))
- add_to_pic = 0;
- }
-
gfxop_disable_dirty_frames(s->gfx_state);
if (NULL != s->old_screen) {
@@ -2403,7 +2400,7 @@ reg_t kDrawCel(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int cel = argv[2].toSint16();
int x = argv[3].toSint16();
int y = argv[4].toSint16();
- int priority = SKPV_OR_ALT(5, -1);
+ int priority = (argc > 5) ? argv[5].toSint16() : -1;
GfxView *new_view;
/*
@@ -2490,14 +2487,16 @@ reg_t kNewWindow(EngineState *s, int funct_nr, int argc, reg_t *argv) {
flags = argv[5 + argextra].toSint16();
- priority = SKPV_OR_ALT(6 + argextra, -1);
+ priority = (argc > 6 + argextra) ? argv[6 + argextra].toSint16() : -1;
bgcolor.mask = 0;
- if (SKPV_OR_ALT(8 + argextra, 255) >= 0) {
+ int16 bgColor = (argc > 8 + argextra) ? argv[8 + argextra].toSint16() : 255;
+
+ if (bgColor >= 0) {
if (s->resmgr->_sciVersion < SCI_VERSION_01_VGA)
- bgcolor.visual = get_pic_color(s, SKPV_OR_ALT(8 + argextra, 15));
+ bgcolor.visual = get_pic_color(s, MIN<int>(bgColor, 15));
else
- bgcolor.visual = get_pic_color(s, SKPV_OR_ALT(8 + argextra, 255));
+ bgcolor.visual = get_pic_color(s, bgColor);
bgcolor.mask = GFX_MASK_VISUAL;
} else {
bgcolor.visual = PaletteEntry(0,0,0);
@@ -2509,7 +2508,8 @@ reg_t kNewWindow(EngineState *s, int funct_nr, int argc, reg_t *argv) {
bgcolor.control = -1;
debugC(2, kDebugLevelGraphics, "New window with params %d, %d, %d, %d\n", argv[0].toSint16(), argv[1].toSint16(), argv[2].toSint16(), argv[3].toSint16());
- fgcolor.visual = get_pic_color(s, SKPV_OR_ALT(7 + argextra, 0));
+ int16 visualColor = (argc > 7 + argextra) ? argv[7 + argextra].toSint16() : 0;
+ fgcolor.visual = get_pic_color(s, visualColor);
fgcolor.mask = GFX_MASK_VISUAL;
fgcolor.control = -1;
fgcolor.priority = -1;
@@ -2962,8 +2962,8 @@ static void animate_do_animation(EngineState *s, int funct_nr, int argc, reg_t *
reg_t kAnimate(EngineState *s, int funct_nr, int argc, reg_t *argv) {
// Animations are supposed to take a maximum of animation_delay milliseconds.
- reg_t cast_list_ref = KP_ALT(0, NULL_REG);
- int cycle = (KP_ALT(1, NULL_REG)).offset;
+ reg_t cast_list_ref = (argc > 0) ? argv[0] : NULL_REG;
+ int cycle = (argc > 1) ? argv[1].toUint16() : 0;
List *cast_list = NULL;
int open_animation = 0;
@@ -3071,8 +3071,8 @@ reg_t kAnimate(EngineState *s, int funct_nr, int argc, reg_t *argv) {
#define SHAKE_RIGHT 2
reg_t kShakeScreen(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- int shakes = SKPV_OR_ALT(0, 1);
- int directions = SKPV_OR_ALT(1, 1);
+ int shakes = (argc > 0) ? argv[0].toSint16() : 1;
+ int directions = (argc > 1) ? argv[1].toSint16() : 1;
gfx_pixmap_t *screen = gfxop_grab_pixmap(s->gfx_state, gfx_rect(0, 0, 320, 200));
int i;
@@ -3121,7 +3121,7 @@ reg_t kShakeScreen(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kDisplay(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int argpt;
reg_t textp = argv[0];
- int index = UKPV_OR_ALT(1, 0);
+ int index = (argc > 1) ? argv[1].toUint16() : 0;
int temp;
bool save_under = false;
gfx_color_t transparent = { PaletteEntry(), 0, -1, -1, 0 };
diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp
index 1cdf84c3d0..e4c314c605 100644
--- a/engines/sci/engine/kmath.cpp
+++ b/engines/sci/engine/kmath.cpp
@@ -101,9 +101,11 @@ reg_t kGetAngle(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
reg_t kGetDistance(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- int xrel = (int)(((float) argv[1].toSint16() - SKPV_OR_ALT(3, 0)) / cos(SKPV_OR_ALT(5, 0) * PI / 180.0)); // This works because cos(0)==1
- int yrel = argv[0].toSint16() - SKPV_OR_ALT(2, 0);
-
+ int xdiff = (argc > 3) ? argv[3].toSint16() : 0;
+ int ydiff = (argc > 2) ? argv[2].toSint16() : 0;
+ int angle = (argc > 5) ? argv[5].toSint16() : 0;
+ int xrel = (int)(((float) argv[1].toSint16() - xdiff) / cos(angle * PI / 180.0)); // This works because cos(0)==1
+ int yrel = argv[0].toSint16() - ydiff;
return make_reg(0, (int16)sqrt((float) xrel*xrel + yrel*yrel));
}
@@ -147,7 +149,7 @@ reg_t kSinDiv(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kTimesTan(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int param = argv[0].toSint16();
- int scale = SKPV_OR_ALT(1, 1);
+ int scale = (argc > 1) ? argv[1].toSint16() : 1;
param -= 90;
if ((param % 90) == 0) {
@@ -159,7 +161,7 @@ reg_t kTimesTan(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kTimesCot(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int param = argv[0].toSint16();
- int scale = SKPV_OR_ALT(1, 1);
+ int scale = (argc > 1) ? argv[1].toSint16() : 1;
if ((param % 90) == 0) {
warning("Attempted tan(pi/2)");
diff --git a/engines/sci/engine/kmenu.cpp b/engines/sci/engine/kmenu.cpp
index 50553341c6..c65d201b90 100644
--- a/engines/sci/engine/kmenu.cpp
+++ b/engines/sci/engine/kmenu.cpp
@@ -66,8 +66,8 @@ reg_t kGetMenu(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kDrawStatus(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t text = argv[0];
- int fgcolor = SKPV_OR_ALT(1, s->status_bar_foreground);
- int bgcolor = SKPV_OR_ALT(2, s->status_bar_background);
+ int fgcolor = (argc > 1) ? argv[1].toSint16() : s->status_bar_foreground;
+ int bgcolor = (argc > 2) ? argv[2].toSint16() : s->status_bar_background;
s->titlebar_port->_color.visual = get_pic_color(s, fgcolor);
s->titlebar_port->_color.mask = GFX_MASK_VISUAL;
@@ -125,7 +125,7 @@ static int _menu_go_down(Menubar *menubar, int menu_nr, int item_nr) {
reg_t kMenuSelect(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t event = argv[0];
- /*int pause_sound = UKPV_OR_ALT(1, 1);*/ /* FIXME: Do this eventually */
+ /*int pause_sound = (argc > 1) ? argv[1].toUint16() : 1;*/ /* FIXME: Do this eventually */
bool claimed = false;
int type = GET_SEL32V(event, type);
int message = GET_SEL32V(event, message);
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index 68b72ec26c..7954dc5783 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -127,7 +127,7 @@ reg_t kGetTime(EngineState *s, int funct_nr, int argc, reg_t *argv) {
return make_reg(0, retval);
}
- int mode = argc > 0 ? UKPV_OR_ALT(0, 0) : 0;
+ int mode = (argc > 0) ? argv[0].toUint16() : 0;
switch (mode) {
case _K_NEW_GETTIME_TICKS :
diff --git a/engines/sci/engine/kmovement.cpp b/engines/sci/engine/kmovement.cpp
index 361228bedb..20a7be3aea 100644
--- a/engines/sci/engine/kmovement.cpp
+++ b/engines/sci/engine/kmovement.cpp
@@ -223,8 +223,9 @@ reg_t kInitBresen(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int deltax = GET_SEL32SV(mover, x) - GET_SEL32SV(client, x);
int deltay = GET_SEL32SV(mover, y) - GET_SEL32SV(client, y);
+ int step_factor = (argc < 1) ? argv[1].toUint16() : 1;
- initialize_bresen(s, argc, argv, mover, KP_ALT(1, make_reg(0, 1)).toUint16(), deltax, deltay);
+ initialize_bresen(s, argc, argv, mover, step_factor, deltax, deltay);
return s->r_acc;
}
diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp
index a1f6b07d64..c254875230 100644
--- a/engines/sci/engine/kpathing.cpp
+++ b/engines/sci/engine/kpathing.cpp
@@ -1672,7 +1672,7 @@ reg_t kAvoidPath(EngineState *s, int funct_nr, int argc, reg_t *argv) {
Common::Point end = Common::Point(argv[2].toSint16(), argv[3].toSint16());
reg_t poly_list = argv[4];
//int poly_list_size = argv[5].toUint16();
- int opt = UKPV_OR_ALT(6, 1);
+ int opt = (argc > 6) ? argv[6].toUint16() : 1;
reg_t output;
PathfindingState *p;
diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp
index 108f9e79ae..2479696630 100644
--- a/engines/sci/engine/kscripts.cpp
+++ b/engines/sci/engine/kscripts.cpp
@@ -253,7 +253,7 @@ reg_t kDisposeClone(EngineState *s, int funct_nr, int argc, reg_t *argv) {
// Returns script dispatch address index in the supplied script
reg_t kScriptID(EngineState *s, int funct_nr, int argc, reg_t *argv) {
int script = argv[0].toUint16();
- int index = KP_ALT(1, NULL_REG).toUint16();
+ int index = (argc > 1) ? argv[1].toUint16() : 0;
SegmentId scriptid = script_get_segment(s, script, SCRIPT_GET_LOAD);
Script *scr;
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index 9abead3f8c..970be1b683 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -202,7 +202,7 @@ void process_sound_events(EngineState *s) { /* Get all sound events, apply their
reg_t kDoSound_SCI0(EngineState *s, int funct_nr, int argc, reg_t *argv) {
- reg_t obj = KP_ALT(1, NULL_REG);
+ reg_t obj = (argc > 1) ? argv[1] : NULL_REG;
uint16 command = argv[0].toUint16();
song_handle_t handle = FROBNICATE_HANDLE(obj);
int number = obj.segment ?
@@ -335,7 +335,7 @@ reg_t kDoSound_SCI0(EngineState *s, int funct_nr, int argc, reg_t *argv) {
case _K_SCI0_SOUND_VOLUME: {
/* range from 0x0 to 0xf */
/* parameter optional. If present, set.*/
- int vol = SKPV_OR_ALT(1, -1);
+ int vol = (argc > 1) ? argv[1].toSint16() : -1;
if (vol != -1)
s->_sound.sfx_set_volume(vol << 0xf);
@@ -382,7 +382,7 @@ reg_t kDoSound_SCI0(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
uint16 command = argv[0].toUint16();
- reg_t obj = KP_ALT(1, NULL_REG);
+ reg_t obj = (argc > 1) ? argv[1] : NULL_REG;
song_handle_t handle = FROBNICATE_HANDLE(obj);
int number = obj.segment ?
GET_SEL32V(obj, number) :
@@ -456,7 +456,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
switch (command) {
case _K_SCI01_SOUND_MASTER_VOLME : {
- int vol = SKPV_OR_ALT(1, -1);
+ int vol = (argc > 1) ? argv[1].toSint16() : -1;
if (vol != -1)
s->_sound.sfx_set_volume(vol << 0xf);
@@ -672,7 +672,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
uint16 command = argv[0].toUint16();
- reg_t obj = KP_ALT(1, NULL_REG);
+ reg_t obj = (argc > 1) ? argv[1] : NULL_REG;
song_handle_t handle = FROBNICATE_HANDLE(obj);
int number = obj.segment ?
GET_SEL32V(obj, number) :