X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=521328f605ebde34d6f8730fc897602423cde02a;hb=49221e59bff18cdfbef8c877b588280266ae5037;hp=d4e42abbafe356c94354a505e4c547aecba8a343;hpb=8eee8a56a5aae567522998ccddf929e38aed6872;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index d4e42abb..521328f6 100644 --- a/src/tools.c +++ b/src/tools.c @@ -13,21 +13,21 @@ #include -#ifdef __FreeBSD__ +#if defined(PLATFORM_FREEBSD) #include #endif +#include "libgame/libgame.h" + #include "tools.h" #include "game.h" #include "events.h" -#include "sound.h" -#include "misc.h" -#include "buttons.h" #include "joystick.h" #include "cartoons.h" #include "network.h" +#include "tape.h" -#ifdef MSDOS +#if defined(PLATFORM_MSDOS) extern boolean wait_for_vsync; #endif @@ -99,49 +99,36 @@ void BackToFront() if (!redraw_mask) return; - - - if (1 && game_status == PLAYING) + if (global.fps_slowdown && game_status == PLAYING) { - static boolean last_frame_skipped = 0; - int fps_slowdown_factor = 2; - boolean skip_even_when_not_scrolling = 1; + static boolean last_frame_skipped = FALSE; + boolean skip_even_when_not_scrolling = TRUE; boolean just_scrolling = (ScreenMovDir != 0); - boolean p = 0; + boolean verbose = FALSE; - /* - printf("ScreenMovDir = %d\n", ScreenMovDir); - */ - - /* - printf("ScreenGfxPos = %d\n", ScreenGfxPos); - */ - - if (fps_slowdown_factor > 1 && - (FrameCounter % fps_slowdown_factor) && + if (global.fps_slowdown_factor > 1 && + (FrameCounter % global.fps_slowdown_factor) && (just_scrolling || skip_even_when_not_scrolling)) { redraw_mask &= ~REDRAW_MAIN; - if (p) - printf("FRAME SKIPPED\n"); + last_frame_skipped = TRUE; - last_frame_skipped = 1; + if (verbose) + printf("FRAME SKIPPED\n"); } else { if (last_frame_skipped) redraw_mask |= REDRAW_FIELD; - last_frame_skipped = 0; + last_frame_skipped = FALSE; - if (p) + if (verbose) printf("frame not skipped\n"); } } - - /* synchronize X11 graphics at this point; if we would synchronize the display immediately after the buffer switching (after the XFlush), this could mean that we have to wait for the graphics to complete, @@ -254,9 +241,14 @@ void BackToFront() if (redraw_mask & REDRAW_FPS) /* display frames per second */ { char text[100]; + char info1[100]; - sprintf(text, "%.1f fps", global.frames_per_second); - DrawTextExt(window, gc, SX, SY, text, FS_SMALL, FC_YELLOW); + sprintf(info1, " (only every %d. frame)", global.fps_slowdown_factor); + if (!global.fps_slowdown) + info1[0] = '\0'; + + sprintf(text, "%.1f fps%s", global.frames_per_second, info1); + DrawTextExt(window, SX, SY, text, FS_SMALL, FC_YELLOW); } FlushDisplay(); @@ -360,6 +352,8 @@ void ClearWindow() redraw_mask |= REDRAW_FIELD; } + +#if 0 int getFontWidth(int font_size, int font_type) { return (font_size == FS_BIG ? FONT1_XSIZE : @@ -385,7 +379,7 @@ void DrawInitText(char *text, int ypos, int color) if (window && pix[PIX_SMALLFONT]) { ClearRectangle(window, 0, ypos, WIN_XSIZE, FONT2_YSIZE); - DrawTextExt(window, gc, (WIN_XSIZE - strlen(text) * FONT2_XSIZE)/2, + DrawTextExt(window, (WIN_XSIZE - strlen(text) * FONT2_XSIZE)/2, ypos, text, FS_SMALL, color); FlushDisplay(); } @@ -497,6 +491,8 @@ void DrawTextExt(DrawBuffer d, GC gc, int x, int y, x += font_width; } } +#endif + void DrawAllPlayers() { @@ -882,17 +878,17 @@ void DrawGraphic(int x, int y, int graphic) } #endif - DrawGraphicExt(drawto_field, gc, FX + x*TILEX, FY + y*TILEY, graphic); + DrawGraphicExt(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic); MarkTileDirty(x,y); } -void DrawGraphicExt(DrawBuffer d, GC gc, int x, int y, int graphic) +void DrawGraphicExt(DrawBuffer bitmap, int x, int y, int graphic) { int bitmap_nr; int src_x, src_y; getGraphicSource(graphic, &bitmap_nr, &src_x, &src_y); - BlitBitmap(pix[bitmap_nr], d, src_x, src_y, TILEX, TILEY, x, y); + BlitBitmap(pix[bitmap_nr], bitmap, src_x, src_y, TILEX, TILEY, x, y); } void DrawGraphicThruMask(int x, int y, int graphic) @@ -922,25 +918,25 @@ void DrawGraphicThruMaskExt(DrawBuffer d, int dest_x, int dest_y, int graphic) return; getGraphicSource(graphic, &bitmap_nr, &src_x, &src_y); - src_bitmap = pix_masked[bitmap_nr]; - drawing_gc = clip_gc[bitmap_nr]; + src_bitmap = pix[bitmap_nr]; + drawing_gc = pix[bitmap_nr]->stored_clip_gc; if (tile_clipmask[tile] != None) { - SetClipMask(tile_clip_gc, tile_clipmask[tile]); - SetClipOrigin(tile_clip_gc, dest_x, dest_y); + SetClipMask(src_bitmap, tile_clip_gc, tile_clipmask[tile]); + SetClipOrigin(src_bitmap, tile_clip_gc, dest_x, dest_y); BlitBitmapMasked(src_bitmap, d, src_x, src_y, TILEX, TILEY, dest_x, dest_y); } else { #if DEBUG -#ifndef USE_SDL_LIBRARY +#ifndef TARGET_SDL printf("DrawGraphicThruMask(): tile '%d' needs clipping!\n", tile); #endif #endif - SetClipOrigin(drawing_gc, dest_x-src_x, dest_y-src_y); + SetClipOrigin(src_bitmap, drawing_gc, dest_x-src_x, dest_y-src_y); BlitBitmapMasked(src_bitmap, d, src_x, src_y, TILEX, TILEY, dest_x, dest_y); } @@ -948,7 +944,7 @@ void DrawGraphicThruMaskExt(DrawBuffer d, int dest_x, int dest_y, int graphic) void DrawMiniGraphic(int x, int y, int graphic) { - DrawMiniGraphicExt(drawto,gc, SX + x*MINI_TILEX, SY + y*MINI_TILEY, graphic); + DrawMiniGraphicExt(drawto, SX + x*MINI_TILEX, SY + y*MINI_TILEY, graphic); MarkTileDirty(x/2, y/2); } @@ -999,7 +995,7 @@ void getMiniGraphicSource(int graphic, Bitmap *bitmap, int *x, int *y) } } -void DrawMiniGraphicExt(DrawBuffer d, GC gc, int x, int y, int graphic) +void DrawMiniGraphicExt(DrawBuffer d, int x, int y, int graphic) { Bitmap bitmap; int src_x, src_y; @@ -1016,6 +1012,7 @@ void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic, int src_x, src_y, dest_x, dest_y; int tile = graphic; int bitmap_nr; + Bitmap src_bitmap; GC drawing_gc; if (graphic < 0) @@ -1089,7 +1086,8 @@ void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic, } getGraphicSource(graphic, &bitmap_nr, &src_x, &src_y); - drawing_gc = clip_gc[bitmap_nr]; + src_bitmap = pix[bitmap_nr]; + drawing_gc = pix[bitmap_nr]->stored_clip_gc; src_x += cx; src_y += cy; @@ -1110,21 +1108,21 @@ void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic, { if (tile_clipmask[tile] != None) { - SetClipMask(tile_clip_gc, tile_clipmask[tile]); - SetClipOrigin(tile_clip_gc, dest_x, dest_y); - BlitBitmapMasked(pix_masked[bitmap_nr], drawto_field, + SetClipMask(src_bitmap, tile_clip_gc, tile_clipmask[tile]); + SetClipOrigin(src_bitmap, tile_clip_gc, dest_x, dest_y); + BlitBitmapMasked(src_bitmap, drawto_field, src_x, src_y, TILEX, TILEY, dest_x, dest_y); } else { #if DEBUG -#ifndef USE_SDL_LIBRARY +#ifndef TARGET_SDL printf("DrawGraphicShifted(): tile '%d' needs clipping!\n", tile); #endif #endif - SetClipOrigin(drawing_gc, dest_x - src_x, dest_y - src_y); - BlitBitmapMasked(pix_masked[bitmap_nr], drawto_field, + SetClipOrigin(src_bitmap, drawing_gc, dest_x - src_x, dest_y - src_y); + BlitBitmapMasked(src_bitmap, drawto_field, src_x, src_y, width, height, dest_x, dest_y); } } @@ -1835,7 +1833,7 @@ boolean Request(char *text, unsigned int req_state) int mx, my, ty, result = -1; unsigned int old_door_state; -#if !defined(MSDOS) && !defined(WIN32) +#if defined(PLATFORM_UNIX) /* pause network game while waiting for request to answer */ if (options.network && game_status == PLAYING && @@ -1880,8 +1878,7 @@ boolean Request(char *text, unsigned int req_state) } sprintf(txt, text); txt[tl] = 0; - DrawTextExt(drawto, gc, - DX + 51 - (tl * 14)/2, DY + 8 + ty * 16, + DrawTextExt(drawto, DX + 51 - (tl * 14)/2, DY + 8 + ty * 16, txt, FS_SMALL, FC_YELLOW); text += tl + (tc == 32 ? 1 : 0); } @@ -1999,11 +1996,11 @@ boolean Request(char *text, unsigned int req_state) case EVENT_KEYPRESS: switch(GetEventKey((KeyEvent *)&event, TRUE)) { - case KEY_Return: + case KSYM_Return: result = 1; break; - case KEY_Escape: + case KSYM_Escape: result = 0; break; @@ -2059,7 +2056,7 @@ boolean Request(char *text, unsigned int req_state) RemapAllGadgets(); -#if !defined(MSDOS) && !defined(WIN32) +#if defined(PLATFORM_UNIX) /* continue network game after request */ if (options.network && game_status == PLAYING && @@ -2142,6 +2139,9 @@ unsigned int MoveDoor(unsigned int door_state) for(x=start; x<=DXSIZE; x+=stepsize) { + Bitmap bitmap = pix[PIX_DOOR]; + GC gc = bitmap->stored_clip_gc; + WaitUntilDelayReached(&door_delay, door_delay_value); if (door_state & DOOR_ACTION_1) @@ -2155,33 +2155,32 @@ unsigned int MoveDoor(unsigned int door_state) ClearRectangle(drawto, DX, DY + DYSIZE - i/2, DXSIZE,i/2); - SetClipOrigin(clip_gc[PIX_DOOR], DX - i, (DY + j) - DOOR_GFX_PAGEY1); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1); + BlitBitmapMasked(bitmap, drawto, DXSIZE, DOOR_GFX_PAGEY1, i, 77, DX + DXSIZE - i, DY + j); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, DXSIZE, DOOR_GFX_PAGEY1 + 140, i, 63, DX + DXSIZE - i, DY + 140 + j); - SetClipOrigin(clip_gc[PIX_DOOR], - DX - DXSIZE + i, DY - (DOOR_GFX_PAGEY1 + j)); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + SetClipOrigin(bitmap, gc, DX - DXSIZE + i, DY - (DOOR_GFX_PAGEY1 + j)); + BlitBitmapMasked(bitmap, drawto, DXSIZE - i, DOOR_GFX_PAGEY1 + j, i, 77 - j, DX, DY); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, DXSIZE-i, DOOR_GFX_PAGEY1 + 140, i, 63, DX, DY + 140 - j); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, DXSIZE - i, DOOR_GFX_PAGEY1 + 77, i, 63, DX, DY + 77 - j); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, DXSIZE - i, DOOR_GFX_PAGEY1 + 203, i, 77, DX, DY + 203 - j); - SetClipOrigin(clip_gc[PIX_DOOR], DX - i, (DY + j) - DOOR_GFX_PAGEY1); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1); + BlitBitmapMasked(bitmap, drawto, DXSIZE, DOOR_GFX_PAGEY1 + 77, i, 63, DX + DXSIZE - i, DY + 77 + j); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, DXSIZE, DOOR_GFX_PAGEY1 + 203, i, 77 - j, DX + DXSIZE - i, DY + 203 + j); @@ -2199,21 +2198,21 @@ unsigned int MoveDoor(unsigned int door_state) ClearRectangle(drawto, VX, VY + VYSIZE-i/2, VXSIZE, i/2); - SetClipOrigin(clip_gc[PIX_DOOR], VX - i, (VY + j) - DOOR_GFX_PAGEY2); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2); + BlitBitmapMasked(bitmap, drawto, VXSIZE, DOOR_GFX_PAGEY2, i, VYSIZE / 2, VX + VXSIZE-i, VY+j); - SetClipOrigin(clip_gc[PIX_DOOR], + SetClipOrigin(bitmap, gc, VX - VXSIZE + i, VY - (DOOR_GFX_PAGEY2 + j)); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, VXSIZE - i, DOOR_GFX_PAGEY2 + j, i, VYSIZE / 2 - j, VX, VY); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + BlitBitmapMasked(bitmap, drawto, VXSIZE - i, DOOR_GFX_PAGEY2 + VYSIZE / 2, i, VYSIZE / 2, VX, VY + VYSIZE / 2 - j); - SetClipOrigin(clip_gc[PIX_DOOR], VX - i, (VY + j) - DOOR_GFX_PAGEY2); - BlitBitmapMasked(pix_masked[PIX_DOOR], drawto, + SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2); + BlitBitmapMasked(bitmap, drawto, VXSIZE, DOOR_GFX_PAGEY2 + VYSIZE / 2, i, VYSIZE / 2 - j, VX + VXSIZE - i, VY + VYSIZE / 2 + j); @@ -2257,13 +2256,14 @@ void UndrawSpecialEditorDoor() redraw_mask |= REDRAW_ALL; } -#ifndef USE_SDL_LIBRARY -int ReadPixel(DrawBuffer d, int x, int y) +#ifndef TARGET_SDL +int ReadPixel(DrawBuffer bitmap, int x, int y) { XImage *pixel_image; unsigned long pixel_value; - pixel_image = XGetImage(display, d, x, y, 1, 1, AllPlanes, ZPixmap); + pixel_image = XGetImage(display, bitmap->drawable, + x, y, 1, 1, AllPlanes, ZPixmap); pixel_value = XGetPixel(pixel_image, 0, 0); XDestroyImage(pixel_image); @@ -2373,10 +2373,12 @@ static struct } }; +#if 0 static void DoNotDisplayInfoText(void *ptr) { return; } +#endif void CreateToolButtons() { @@ -2424,8 +2426,12 @@ void CreateToolButtons() GDI_DECORATION_SIZE, MINI_TILEX, MINI_TILEY, GDI_DECORATION_SHIFTING, 1, 1, GDI_EVENT_MASK, event_mask, - GDI_CALLBACK_ACTION, HandleToolButtons, + +#if 0 GDI_CALLBACK_INFO, DoNotDisplayInfoText, +#endif + + GDI_CALLBACK_ACTION, HandleToolButtons, GDI_END); if (gi == NULL)