Replaced KP_ALT, SKPV_OR_ALT and UKPV_OR_ALT
svn-id: r41340
This commit is contained in:
parent
36cdd09223
commit
3b687a7a04
9 changed files with 50 additions and 52 deletions
|
@ -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)
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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)");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 :
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) :
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue