From: "Paul Bibbings" Newsgroups: comp.os.msdos.djgpp Subject: Allegro - masked_blit(); Date: Thu, 20 Jan 2000 16:42:39 -0000 Organization: Tesco ISP Lines: 150 Message-ID: <867egt$dpf$1@barcode.tesco.net> NNTP-Posting-Host: 212.140.69.220 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2014.211 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Please could someone give me a few pointers in the use of this function. I'm new to Allegro and I'm not getting very far with the available docs. What I'm trying to do is simple enough, but I'm stuck with how to set transparent pixels. My program simply draws a chessboard to the screen, then accesses a single bitmap showing the chess pieces (black on a white background). The question is, what do I need to do so that the masked_blit() interprets the background as transparent, hence allowing the board to be seen behind the pieces. I've tried everything I can think of. Allegro.txt under masked_blit() that transparent pixels are marked by a zero in 256 color modes, or bright pink for truecolor data. Hi do I set the background color of the bitmap so that the program will interpret it as zero and skip the background pixels? (I've tried changing the background color to bright pink out of desperation, but since the function set_palette() uses the palette derived from the bitmap, then ALL the colours are changed from what I set them. Allegro.txt also says something about the GRX_HW_VRAM_BLIT_MASKED flag being set, but doesn't say how this is done. Any help will be appreciated. Please save the walls from the dent of my head!!!! //////////////////////////////////////////////////////////////////////////// ////////// #include #include "allegro.h" #define pieces "c:\\cprojs\\chess\\pieces.bmp" /*function prototypes*/ void draw_board(void); void load_pieces(BITMAP *); int main() { BITMAP *piece; PALETTE pal; piece = load_bmp(pieces, pal); if(!piece) { printf("can't find %s\n", pieces); return 1; } allegro_init(); install_keyboard(); install_mouse(); install_timer(); set_gfx_mode(GFX_AUTODETECT, 800, 600, 0, 0); set_palette(pal); /*draw the empty chess_board to the screen*/ draw_board(); show_mouse(screen); readkey(); load_pieces(piece); destroy_bitmap(piece); readkey(); return 0; } void draw_board(void) /*function to draw empty chess board onto the screen*/ { int background = 2, white = 1, black = 9; int color; int count_x, count_y; int x, y; clear_to_color(screen, 6); rectfill(screen, 230, 120, 560, 450, background); x = 235; y = 125; color = white; for(count_y = 0; count_y < 8; count_y++) { for(count_x = 0; count_x < 8; count_x++) { rectfill(screen, x, y, x + 40, y + 40, color); x = x + 40; if(color == white) color = black; else color = white; } x = 235; y = y + 40; if(color == white) color = black; else color = white; } } void load_pieces(BITMAP *piece) /*function to load the pieces to the board in a starting position*/ { /*x controls the fonts. Options are 20, 86, 152, 218*/ int x = 86, y; int count_col; masked_blit(piece, screen, 26, x, 356, 406, 38, 38); // white_queen masked_blit(piece, screen, 282, x, 396, 406, 38, 38); // white_king masked_blit(piece, screen, 58, x, 356, 126, 38, 38); // black_queen masked_blit(piece, screen, 314, x, 396, 126, 38, 38); // black_king masked_blit(piece, screen, 90, x, 316, 406, 38, 38); // w_q_bishop masked_blit(piece, screen, 90, x, 436, 406, 38, 38); // w_k_bishop masked_blit(piece, screen, 122, x, 316, 126, 38, 38); // b_q_bishop masked_blit(piece, screen, 122, x, 436, 126, 38, 38); // b_k_bishop masked_blit(piece, screen, 154, x, 276, 406, 38, 38); // w_q_knight masked_blit(piece, screen, 154, x, 476, 406, 38, 38); // w_k_knight masked_blit(piece, screen, 186, x, 276, 126, 38, 38); // b_q_knight masked_blit(piece, screen, 186, x, 476, 126, 38, 38); // b_k_knight masked_blit(piece, screen, 218, x, 236, 406, 38, 38); // w_q_rook masked_blit(piece, screen, 218, x, 516, 406, 38, 38); // w_k_rook masked_blit(piece, screen, 250, x, 236, 126, 38, 38); // b_q_rook masked_blit(piece, screen, 250, x, 516, 126, 38, 38); // b_k_rook y = 236; for(count_col = 0; count_col < 8; count_col++) { /*set the white pawns in the starting position*/ masked_blit(piece, screen, 346, x, y, 366, 38, 38); /*set the black pawns in the starting position*/ masked_blit(piece, screen, 378, x, y, 166, 38, 38); y+=40; } }