/** * Renders the output of the logos handler's current game state. * * The drawing routines are all blocking, meaning one "frame" is enough * to fade all logos in and out. */ void logos_render(BITMAP *buffer) { // We're going to draw text on top of the image, // so add the text palette to the image. add_flim_palette_colors(LOGOS_DAT[ASLOGO_PALETTE].dat); // Display the main logo with text drawn on top. set_palette(black_palette); blit(LOGOS_DAT[ASLOGO_IMG].dat, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); draw_text(screen, 160, 154, TXT_WHITE, -1, -1, TXT_REGULAR, TXT_CENTER, "(C) 2016, Avalanche Studios"); draw_text(screen, 160, 154 + FLIM_HEIGHT + 2, TXT_WHITE, -1, -1, TXT_REGULAR, TXT_CENTER, "www.avalanchestudios.net"); if (DEBUG) { draw_text(screen, 160, 154 + FLIM_HEIGHT + 18, TXT_GRAY, -1, -1, TXT_SMALL, TXT_CENTER, (char *)get_short_version()); } fade_from(black_palette, LOGOS_DAT[ASLOGO_PALETTE].dat, FADE_SPEED); // Wait for any key, then draw the second logo. readkey(); fade_out(FADE_SPEED); set_palette(black_palette); blit(LOGOS_DAT[TEST_IMG].dat, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); fade_from(black_palette, LOGOS_DAT[TEST_PALETTE].dat, FADE_SPEED); // Wait for any key, then finish. This handler immediately exits // after running the logos_render() function once, so this code // is guaranteed to only run once. readkey(); fade_out(FADE_SPEED); }
void options_menu() { show_mouse(screen); DIALOG options_dialog[] = { /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ {d_bitmap_proc, 0, 0,SCREEN_W,SCREEN_H,0,255, 0, 0, 0, 0, title_back}, {d_gamespeed_proc, 20, 10, 0, 0, 0, 0, 0,D_SELECTED, 0, 0, const_cast<char *>("gamespeed")}, {d_slider_proc, 300, 20, 30, 440, 0, 255, 0, 0, 255, get_config_int("MINER","BPS", 32) - 32, NULL, (void *)speedslider_callback}, {d_mapsize_proc, 20, 60, 0, 0, 0, 0, 0, 0, 0, 0, const_cast<char *>("mapsize")}, {d_slider_proc, 300, 20, 30, 440, 0, 255, 0,D_HIDDEN, 80, get_config_int("MINER","MAP_SIZE",20) - 20, NULL, (void *)mapsizeslider_callback}, {d_sound_proc, 20, 110, 0, 0, 0, 0, 0, 0, 0, 0, const_cast<char *>("sound")}, {d_slider_proc, 300, 40, 30, 300, 0, 255, 0,D_HIDDEN, 6, (int)log2(get_config_int("MINER","NR_OF_VOICES",0) + 1), NULL, (void *)soundslider_callback}, {d_text_proc, 300, 10, 200, 30, 0, 255, 0,D_HIDDEN, 0, 0, const_cast<char *>("Nr of simultaneous sounds")}, {d_number_proc, 330, 20, 0, 0, 0, 0, 0, 0, 3, get_config_int("MINER","BPS", 32), NULL}, {d_number_proc, 330, 20, 0, 0, 0, 0, 0,D_HIDDEN, 3, get_config_int("MINER","MAP_SIZE",20) , NULL}, {d_number_proc, 330, 40, 0, 0, 0, 0, 0,D_HIDDEN, 2, get_config_int("MINER","NR_OF_VOICES",1), NULL}, {d_back_proc, 20, 160, 0, 0, 0, 0, 0, 0, 0, 0, const_cast<char *>("exit menu")}, {NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL} }; the_options_dialog = options_dialog; // ugly, but I found it easier to initialise the dialog // within the function, where all BITMAPS's are loaded etc. PALETTE options_palette; for (int i=0;i < 256;i++) { options_palette[i].r = game_palette[i].g; options_palette[i].g = game_palette[i].b; options_palette[i].b = game_palette[i].r; } set_dialog_color(options_dialog, bestfit_color(options_palette,0,0,0), bestfit_color(options_palette,63,63,63)); DIALOG_PLAYER *p = init_dialog(options_dialog, 1); broadcast_dialog_message(MSG_DRAW, 0); // update_dialog(p); if (fade_speed) { fade_from(desktop_palette,options_palette,fade_speed); } else { set_palette(options_palette); } while(update_dialog(p)); shutdown_dialog(p); set_config_int("MINER","BPS", options_dialog[SPEED_SLIDER].d2 + 32); set_config_int("MINER","MAP_SIZE", options_dialog[MAPSIZE_SLIDER].d2 + 20); set_config_int("MINER","NR_OF_VOICES", (1<<options_dialog[SOUND_SLIDER].d2)); show_mouse(NULL); reinit(); return; }
void play_intro(void) { #define COL(index,red,green,blue) \ if ((index>=min) && (index<=max)) { \ pal[index].r = (red); \ pal[index].g = (green); \ pal[index].b = (blue); \ } #define FADE(speed) \ fade_from(source, pal, speed); \ get_palette(source) #define NORMAL() \ min = 0; \ max = PAL_SIZE-1 BITMAP *bg = (BITMAP *)datafile[MYLOGO_BMP].dat; PALETTE source, pal; int n, n2; int min, max; /* play the introduction theme */ qtetris_music(MUSIC_INTRO, FALSE); n = 0; NORMAL(); set_palette(black_palette); get_palette(source); get_palette(pal); /* DAC *********************************/ clear(virtual); blit(bg, virtual, 0, 0, QTETRIS_SCREEN_W/2 - bg->w/2, QTETRIS_SCREEN_H/2 - bg->h/2, bg->w, bg->h); qtetris_blit(virtual); FADE(1); /* David A. Capello */ /* fg */ min = 1; max = 28; for (n2=0, n=min; n<=max+2; n2=n, n+=2) { COL(n2, 0, 0, 0); COL(n, 32, 32, 63); COL(n+1, 63, 63, 63); FADE(32); } /* bg */ min = 32; max = 45; for (n=max; n>=min-4; n--) { NORMAL(); for (n2=1; n2<=28; n2+=2) { COL(n2+1, 63-(-63*(n-45)/(45-32+4)), 63-(-63*(n-45)/(45-32+4)), 63-(-63*(n-45)/(45-32+4))); COL(n2, -63*(n-45)/(45-32+4), 0, 0); } min = 32; max = 45; COL(n+4, 63, 63, 63); COL(n+2, 63, 0, 0); COL(n, 63, 63, 0); FADE(64); } /* Present */ NORMAL(); COL(253, 63, 63, 63); COL(254, 32, 32, 32); COL(255, 16, 16, 16); FADE(4); /* fin de la primer etapa **************/ fade_out(2); /* QUEEN LOGO **************************/ fade_out(2); clear(virtual); blit(datafile[QUEENLOG_BMP].dat, virtual, 0, 0, QTETRIS_SCREEN_W/2-((BITMAP *)datafile[QUEENLOG_BMP].dat)->w/2, QTETRIS_SCREEN_H/2-((BITMAP *)datafile[QUEENLOG_BMP].dat)->h/2, ((BITMAP *)datafile[QUEENLOG_BMP].dat)->w, ((BITMAP *)datafile[QUEENLOG_BMP].dat)->h); qtetris_blit(virtual); fade_in(datafile[PALETTE_BMP].dat, 1); get_palette(pal); get_palette(source); FADE(2); fade_out(2); /* TETRIS ******************************/ set_palette(black_palette); get_palette(source); get_palette(pal); NORMAL(); for (n=0; n<PAL_SIZE; n++) { COL(n, 63, 63, 63); } FADE(2); /* mainscreen */ clear(virtual); drawing_mode(DRAW_MODE_COPY_PATTERN, datafile[TETRISBG_BMP].dat, 0, 0); rectfill(virtual, 0, 0, QTETRIS_SCREEN_W, QTETRIS_SCREEN_H, -1); color_map = shadow_map; drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); draw_trans_sprite(virtual, datafile[TETRIS_BMP].dat, QTETRIS_SCREEN_W/2 - ((BITMAP *)datafile[TETRIS_BMP].dat)->w/2 + 6, QTETRIS_SCREEN_H/2 - ((BITMAP *)datafile[TETRIS_BMP].dat)->h/2 + 12); solid_mode(); draw_sprite(virtual, datafile[TETRIS_BMP].dat, QTETRIS_SCREEN_W/2 - ((BITMAP *)datafile[TETRIS_BMP].dat)->w/2, QTETRIS_SCREEN_H/2 - ((BITMAP *)datafile[TETRIS_BMP].dat)->h/2); qtetris_blit(virtual); for (n=15; n<112; n++) { COL(n, 0, 0, 0); } FADE(2); FADE(2); fade_from(pal, datafile[PALETTE_BMP].dat, 2); }