Index: alex4-1.1/src/edit.c =================================================================== --- alex4-1.1.orig/src/edit.c 2008-01-23 00:01:05.000000000 +0100 +++ alex4-1.1/src/edit.c 2008-01-23 00:48:53.000000000 +0100 @@ -69,8 +69,8 @@ } // show stuff - textprintf(bmp, data[THE_FONT].dat, 1, 1, 0, "TILE: %d,%d", tx, ty); - textprintf(bmp, data[THE_FONT].dat, 1, 11, 0, "SIZE: %d,%d", map->width, map->height); + textprintf_ex(bmp, data[THE_FONT].dat, 1, 1, 0, -1, "TILE: %d,%d", tx, ty); + textprintf_ex(bmp, data[THE_FONT].dat, 1, 11, 0, -1, "SIZE: %d,%d", map->width, map->height); // show start pos x = (ABS(map->start_x) << 4) - map->offset_x; @@ -80,7 +80,7 @@ // draw status bar rectfill(bmp, 0, 110, 159, 119, 1); - textprintf(bmp, data[THE_FONT].dat, 1, 111, 4, "EDITING: %s", get_filename(edit_path_and_file)); + textprintf_ex(bmp, data[THE_FONT].dat, 1, 111, 4, -1, "EDITING: %s", get_filename(edit_path_and_file)); } else if (edit_mode == EDIT_MODE_SELECT) { // draw tile palette // calculate offset depending on mouse pointer @@ -104,16 +104,16 @@ else if (edit_mode == EDIT_MODE_STATS) { // draw map properties int ty = 16; clear_to_color(bmp, 3); - textprintf(bmp, data[THE_FONT].dat, 1, 1, 1, "%s (props)", get_filename(edit_path_and_file)); + textprintf_ex(bmp, data[THE_FONT].dat, 1, 1, 1, -1, "%s (props)", get_filename(edit_path_and_file)); line(bmp, 0, 10, 159, 10, 1); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "Win by:"); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " ")); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " ")); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " ")); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "4) Boss level: (%s)", (map->boss_level ? "X" : " ")); - textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "5) Name: %s", map->name); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "Win by:"); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " ")); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " ")); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " ")); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "4) Boss level: (%s)", (map->boss_level ? "X" : " ")); + textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "5) Name: %s", map->name); - textprintf(bmp, data[THE_FONT].dat, 1, 110, 1, "F1: back to editor"); + textprintf_ex(bmp, data[THE_FONT].dat, 1, 110, 1, -1, "F1: back to editor"); } if (edit_mode != EDIT_MODE_STATS) { Index: alex4-1.1/src/hisc.c =================================================================== --- alex4-1.1.orig/src/hisc.c 2008-01-23 00:48:53.000000000 +0100 +++ alex4-1.1/src/hisc.c 2008-01-23 00:48:53.000000000 +0100 @@ -153,9 +153,9 @@ // draws a single hisc post void draw_hisc_post(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level) { - textprintf(bmp, fnt, x, y, color, "%s", table->name); - if (show_level) textprintf_right(bmp, fnt, x+80, y, color, "%2d", table->level); - textprintf_right(bmp, fnt, x+140, y, color, "%d", table->score); + textprintf_ex(bmp, fnt, x, y, color, -1, "%s", table->name); + if (show_level) textprintf_right_ex(bmp, fnt, x+80, y, color, -1, "%2d", table->level); + textprintf_right_ex(bmp, fnt, x+140, y, color, -1, "%d", table->score); } // draws the entire table Index: alex4-1.1/src/main.c =================================================================== --- alex4-1.1.orig/src/main.c 2008-01-23 00:48:53.000000000 +0100 +++ alex4-1.1/src/main.c 2008-01-23 00:48:53.000000000 +0100 @@ -322,7 +322,7 @@ cycle_count = 0; if (got_sound && duh_player != NULL) al_poll_duh(duh_player); i ++; - while(!cycle_count) yield_timeslice(); + while(!cycle_count) rest(0); } } @@ -496,15 +496,15 @@ rectfill(bmp, 0, y, 159, y+9, 1); draw_sprite_h_flip(bmp, data[HERO_NORM].dat, 0, y+1); - textprintf(bmp, data[THE_FONT].dat, 9, y+1, 4, " :%d", player.lives); + textprintf_ex(bmp, data[THE_FONT].dat, 9, y+1, 4, -1, " :%d", player.lives); for(i = 0; i < player.health; i ++) draw_sprite(bmp, data[HEART2].dat, 40 + 10 * i, y-3); draw_sprite(bmp, data[EGG].dat, 80, y-5); - textprintf(bmp, data[THE_FONT].dat, 85, y+1, 4, " :%d", player.ammo); + textprintf_ex(bmp, data[THE_FONT].dat, 85, y+1, 4, -1, " :%d", player.ammo); - textprintf_right(bmp, data[THE_FONT].dat, 158, y+1, 4, "%d", player.score); + textprintf_right_ex(bmp, data[THE_FONT].dat, 158, y+1, 4, -1, "%d", player.score); } @@ -626,7 +626,6 @@ // various allegro things log2file(" initializing allegro"); - text_mode(-1); garble_string(init_string, 53); #ifdef __unix__ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.ini", @@ -635,7 +634,6 @@ #else set_config_file("alex4.ini"); #endif - set_window_close_button(FALSE); // install timers log2file(" installing timers"); @@ -701,7 +699,7 @@ // show initial loading screen clear(swap_screen); - textout_centre(swap_screen, font, "loading...", 320, 200, 1); + textout_centre_ex(swap_screen, font, "loading...", 320, 200, 1, -1); blit_to_screen(swap_screen); #ifndef __unix__ @@ -788,8 +786,8 @@ clear_to_color(swap_screen, 3); bmp = data[FLD_LOGO].dat; - draw_character(swap_screen, bmp, 80 - bmp->w / 2 + 0, 50 + 1, 1); - draw_character(swap_screen, bmp, 80 - bmp->w / 2, 50, 4); + draw_character_ex(swap_screen, bmp, 80 - bmp->w / 2 + 0, 50 + 1, 1, -1); + draw_character_ex(swap_screen, bmp, 80 - bmp->w / 2, 50, 4, -1); blit_to_screen(swap_screen); @@ -1100,11 +1098,11 @@ // draws text with an outline void textout_outline(BITMAP *bmp, const char *txt, int x, int y) { - textout(bmp, data[THE_FONT].dat, txt, x+1, y, 1); - textout(bmp, data[THE_FONT].dat, txt, x-1, y, 1); - textout(bmp, data[THE_FONT].dat, txt, x, y+1, 1); - textout(bmp, data[THE_FONT].dat, txt, x, y-1, 1); - textout(bmp, data[THE_FONT].dat, txt, x, y, 4); + textout_ex(bmp, data[THE_FONT].dat, txt, x+1, y, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, txt, x-1, y, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, txt, x, y+1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, txt, x, y-1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, txt, x, y, 4, -1); } @@ -1153,7 +1151,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw stuff draw_frame(swap_screen, 1); @@ -1195,7 +1193,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw stuff draw_frame(swap_screen, 1); @@ -1257,7 +1255,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw stuff draw_custom_ending(swap_screen); @@ -1373,7 +1371,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw stuff blit(swap2, swap_screen, 0, 0, 0, 0, 160, 120); @@ -1447,12 +1445,12 @@ sprintf(buf, "%s %d %s", (level > min ? "<" : " "), level, (level < max ? ">" : " ")); clear_bitmap(stuff); - textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2); - textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2, 0, 1); + textout_centre_ex(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2, -1); + textout_centre_ex(stuff, data[THE_FONT].dat, buf, stuff->w/2, 0, 1, -1); stretch_sprite(bmp, stuff, 80 - 4*stuff->w/2, 30, 4*stuff->w, 4*stuff->h); - textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1); - textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4); + textout_centre_ex(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1, -1); + textout_centre_ex(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4, -1); if (options.one_hundred) { if (game_count & 32 || game_count & 16) draw_sprite(bmp, data[SHIP100].dat, xpos, 2); @@ -2343,7 +2341,7 @@ if (is_fire(&ctrl) || is_jump(&ctrl)) done = 1; if (keypressed()) done = 1; if (key[KEY_ESC]) done = -1; - yield_timeslice(); + rest(0); } if (done == -1) { @@ -2493,7 +2491,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw frame_count ++; @@ -2524,20 +2522,20 @@ y = 60; x = 50; - textout(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1); - textout(bmp, data[THE_FONT].dat, start_string, x, y, 4); + textout_ex(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, start_string, x, y, 4, -1); y += step; - textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1); - textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x, y, 4); + textout_ex(bmp, data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, "HIGH SCORES", x, y, 4, -1); y += step; - textout(bmp, data[THE_FONT].dat, "EDITOR", x+1, y+1, 1); - textout(bmp, data[THE_FONT].dat, "EDITOR", x, y, 4); + textout_ex(bmp, data[THE_FONT].dat, "EDITOR", x+1, y+1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, "EDITOR", x, y, 4, -1); y += step; - textout(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1); - textout(bmp, data[THE_FONT].dat, "QUIT", x, y, 4); + textout_ex(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1, -1); + textout_ex(bmp, data[THE_FONT].dat, "QUIT", x, y, 4, -1); draw_sprite(bmp, data[POINTER].dat, x - 25 + fixtoi(3 * fcos(itofix(tick << 2))), 44 + menu_choice * step); } @@ -2589,7 +2587,7 @@ string[i] = letters[current_letter]; string[i + 1] = '\0'; blit(block, bmp, 0, 0, pos_x - 1, pos_y - 1, block->w, block->h); - textout(bmp, f, string, pos_x, pos_y, colour); + textout_ex(bmp, f, string, pos_x, pos_y, colour, -1); blit_to_screen(bmp); if (pad != NULL) { @@ -2775,7 +2773,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // draw frame_count ++; Index: alex4-1.1/src/map.c =================================================================== --- alex4-1.1.orig/src/map.c 2008-01-23 00:48:53.000000000 +0100 +++ alex4-1.1/src/map.c 2008-01-23 00:49:56.000000000 +0100 @@ -280,7 +280,7 @@ if (sm == NULL) return; - set_clip(bmp, dx, dy, dx+w-1, dy+h-1); + set_clip_rect(bmp, dx, dy, dx+w-1, dy+h-1); for(y=0;y<7;y++) { for(x=0;x<11;x++) { @@ -330,13 +330,13 @@ if (edit) { if (sm->dat[pos].type == MAP_DEAD) { - textout(bmp, font, "D", dx + x*16 + ax, dy + y*16 + ay, 0); + textout_ex(bmp, font, "D", dx + x*16 + ax, dy + y*16 + ay, 0, -1); } if (sm->dat[pos].type == MAP_EXIT) { - textout(bmp, font, "XT", dx + x*16 + ax, dy + y*16 + ay, 255); + textout_ex(bmp, font, "XT", dx + x*16 + ax, dy + y*16 + ay, 255, -1); } if (sm->dat[pos].type == MAP_BRK) { - textout(bmp, font, "GL", dx + x*16 + ax, dy + y*16 + ay, 255); + textout_ex(bmp, font, "GL", dx + x*16 + ax, dy + y*16 + ay, 255, -1); } if (sm->dat[pos].type == MAP_ENEMY1) { draw_sprite(bmp, sm->data[ENEMY1_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay); @@ -367,7 +367,7 @@ } } - set_clip(bmp, 0, 0, SCREEN_W - 1, SCREEN_H - 1); + set_clip_rect(bmp, 0, 0, SCREEN_W - 1, SCREEN_H - 1); } Index: alex4-1.1/src/script.c =================================================================== --- alex4-1.1.orig/src/script.c 2008-01-23 00:01:05.000000000 +0100 +++ alex4-1.1/src/script.c 2008-01-23 00:48:53.000000000 +0100 @@ -89,7 +89,7 @@ // draw text for(i = 0; i < lines; i ++) { - textout(bmp, d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1); + textout_ex(bmp, d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1, -1); } } @@ -103,7 +103,7 @@ poll_music(); count ++; while(!cycle_count); - yield_timeslice(); + rest(0); } if (key[KEY_ESC]) script_done = -1; } @@ -521,7 +521,7 @@ } // let other processes play - yield_timeslice(); + rest(0); // blit buffer to swap buffer blit(buffer, swap_buffer, 0, 0, 0, 0, 160, 120); Index: alex4-1.1/src/scroller.c =================================================================== --- alex4-1.1.orig/src/scroller.c 2008-01-23 00:01:05.000000000 +0100 +++ alex4-1.1/src/scroller.c 2008-01-23 00:50:53.000000000 +0100 @@ -65,22 +65,22 @@ if (sc->horizontal) { if (sc->offset < -sc->length) return; if (sc->offset > sc->width) return; - set_clip(bmp, x, y, x + sc->width, y + sc->height); - textout(bmp, sc->fnt, sc->text, x + sc->offset + 1, y + 1, 1); - textout(bmp, sc->fnt, sc->text, x + sc->offset, y, 3); - set_clip(bmp, 0, 0, bmp->w-1, bmp->h-1); + set_clip_rect(bmp, x, y, x + sc->width, y + sc->height); + textout_ex(bmp, sc->fnt, sc->text, x + sc->offset + 1, y + 1, 1, -1); + textout_ex(bmp, sc->fnt, sc->text, x + sc->offset, y, 3, -1); + set_clip_rect(bmp, 0, 0, bmp->w-1, bmp->h-1); } else { int i; if (sc->offset < -sc->rows * sc->font_height) return; if (sc->offset > sc->height) return; - set_clip(bmp, x, y, x + sc->width, y + sc->height); + set_clip_rect(bmp, x, y, x + sc->width, y + sc->height); for(i=0;irows;i++) { if (i * sc->font_height + sc->offset <= sc->height) if ((i+1) * sc->font_height + sc->offset >= 0) - textout_centre(bmp, sc->fnt, sc->lines[i], x+(sc->width>>1) , i * sc->font_height + y + sc->offset, -1); + textout_centre_ex(bmp, sc->fnt, sc->lines[i], x+(sc->width>>1) , i * sc->font_height + y + sc->offset, -1, -1); } - set_clip(bmp, 0, 0, bmp->w-1, bmp->h-1); + set_clip_rect(bmp, 0, 0, bmp->w-1, bmp->h-1); } } Index: alex4-1.1/src/shooter.c =================================================================== --- alex4-1.1.orig/src/shooter.c 2008-01-23 00:48:53.000000000 +0100 +++ alex4-1.1/src/shooter.c 2008-01-23 00:48:53.000000000 +0100 @@ -341,7 +341,7 @@ if (!o->hit || o->type == SO_PLAYER_BULLET) draw_sprite(bmp, s_data[o->image].dat, (int)o->x, (int)o->y); else - draw_character(bmp, s_data[o->image].dat, (int)o->x, (int)o->y, 4); + draw_character_ex(bmp, s_data[o->image].dat, (int)o->x, (int)o->y, 4, -1); } else { int c = (o->energy + 8) >> 3; @@ -379,8 +379,8 @@ padding_str[i] = '0'; padding_str[i] = '\0'; strcat(padding_str, score_str); - textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 3, "%s", padding_str); - if (s_var.score) textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 4, "%s", score_str); + textprintf_right_ex(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 3, -1, "%s", padding_str); + if (s_var.score) textprintf_right_ex(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 4, -1, "%s", score_str); } @@ -1268,7 +1268,7 @@ // let other processes play - yield_timeslice(); + rest(0); // draw frame_count ++;