X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftools.c;h=84b651c9895e014d1900bbbecfb9be46a0197fe5;hp=f987d323a2f550c0b778f3eda9e4fd1ec268daa9;hb=e5c5bf5c4a76a04f9bf64e92227bf2ef969fd25c;hpb=2fe0fbc2a34fd4b50081f1829931dea3ca2c4c1c diff --git a/src/tools.c b/src/tools.c index f987d323..84b651c9 100644 --- a/src/tools.c +++ b/src/tools.c @@ -23,16 +23,17 @@ #include "buttons.h" #include "joystick.h" #include "cartoons.h" +#include "network.h" #include #ifdef MSDOS -extern BOOL wait_for_vsync; +extern boolean wait_for_vsync; #endif void SetDrawtoField(int mode) { - if (mode == DRAW_BUFFERED && soft_scrolling_on) + if (mode == DRAW_BUFFERED && setup.soft_scrolling_on) { FX = TILEX; FY = TILEY; @@ -65,7 +66,7 @@ void BackToFront() int x,y; Drawable buffer = (drawto_field != window ? drawto_field : backbuffer); - if (direct_draw_on && game_status == PLAYING) + if (setup.direct_draw_on && game_status == PLAYING) redraw_mask &= ~REDRAW_MAIN; if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD) @@ -106,7 +107,7 @@ void BackToFront() { int fx = FX, fy = FY; - if (soft_scrolling_on) + if (setup.soft_scrolling_on) { fx += (ScreenMovDir & (MV_LEFT|MV_RIGHT) ? ScreenGfxPos : 0); fy += (ScreenMovDir & (MV_UP|MV_DOWN) ? ScreenGfxPos : 0); @@ -188,7 +189,7 @@ void FadeToFront() /* long fading_delay = 300; - if (fading_on && (redraw_mask & REDRAW_FIELD)) + if (setup.fading_on && (redraw_mask & REDRAW_FIELD)) { */ @@ -256,7 +257,7 @@ void ClearWindow() XFillRectangle(display,backbuffer,gc, REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE); - if (soft_scrolling_on && game_status==PLAYING) + if (setup.soft_scrolling_on && game_status==PLAYING) { XFillRectangle(display,fieldbuffer,gc, 0,0, FXSIZE,FYSIZE); @@ -265,7 +266,7 @@ void ClearWindow() else SetDrawtoField(DRAW_BACKBUFFER); - if (direct_draw_on && game_status==PLAYING) + if (setup.direct_draw_on && game_status==PLAYING) { XFillRectangle(display,window,gc, REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE); @@ -409,7 +410,7 @@ void DrawPlayer(struct PlayerInfo *player) if (!IN_SCR_FIELD(sx,sy)) return; - if (direct_draw_on) + if (setup.direct_draw_on) SetDrawtoField(DRAW_BUFFERED); /* draw things behind the player, if needed */ @@ -441,7 +442,7 @@ void DrawPlayer(struct PlayerInfo *player) syy = player->GfxPos; } - if (!soft_scrolling_on && ScreenMovPos) + if (!setup.soft_scrolling_on && ScreenMovPos) sxx = syy = 0; DrawGraphicShiftedThruMask(sx,sy, sxx,syy, graphic, NO_CUTTING); @@ -502,7 +503,7 @@ void DrawPlayer(struct PlayerInfo *player) GFX_EXPLOSION + ((phase-1)/delay-1)); } - if (direct_draw_on) + if (setup.direct_draw_on) { int dest_x = SX + SCREENX(MIN(jx,last_jx))*TILEX; int dest_y = SY + SCREENY(MIN(jy,last_jy))*TILEY; @@ -613,7 +614,7 @@ void DrawGraphicThruMask(int x, int y, int graphic) #if DEBUG if (!IN_SCR_FIELD(x,y)) { - printf("DrawGraphicThruMask(): x = %d, y = %d\n",x,y); + printf("DrawGraphicThruMask(): x = %d,y = %d, graphic = %d\n",x,y,graphic); printf("DrawGraphicThruMask(): This should never happen!\n"); return; } @@ -912,7 +913,7 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element, } else if (element==EL_MAUER_LEBT) { - BOOL links_massiv = FALSE, rechts_massiv = FALSE; + boolean links_massiv = FALSE, rechts_massiv = FALSE; if (!IN_LEV_FIELD(ux-1,uy) || IS_MAUER(Feld[ux-1][uy])) links_massiv = TRUE; @@ -1103,7 +1104,7 @@ void DrawScreenField(int x, int y) if (IS_MOVING(ux,uy)) { int horiz_move = (MovDir[ux][uy]==MV_LEFT || MovDir[ux][uy]==MV_RIGHT); - BOOL cut_mode = NO_CUTTING; + boolean cut_mode = NO_CUTTING; if (Store[ux][uy]==EL_MORAST_LEER || Store[ux][uy]==EL_SIEB_LEER || @@ -1133,7 +1134,7 @@ void DrawScreenField(int x, int y) int oldx,oldy; int sx, sy; int horiz_move; - BOOL cut_mode = NO_CUTTING; + boolean cut_mode = NO_CUTTING; Blocked2Moving(ux,uy,&oldx,&oldy); sx = SCREENX(oldx); @@ -1233,7 +1234,7 @@ void DrawLevel() for(y=BY1; y<=BY2; y++) DrawScreenField(x,y); - if (soft_scrolling_on) + if (setup.soft_scrolling_on) XCopyArea(display,fieldbuffer,backbuffer,gc, FX,FY, SXSIZE,SYSIZE, SX,SY); @@ -1302,11 +1303,17 @@ int REQ_in_range(int x, int y) return(0); } -BOOL Request(char *text, unsigned int req_state) +boolean Request(char *text, unsigned int req_state) { int mx,my, ty, result = -1; unsigned int old_door_state; + /* pause network game while waiting for request to answer */ + if (options.network && + game_status == PLAYING && + req_state & REQUEST_WAIT_FOR) + SendToServer_PausePlaying(); + old_door_state = GetDoorState(); CloseDoor(DOOR_CLOSE_1); @@ -1347,52 +1354,26 @@ BOOL Request(char *text, unsigned int req_state) } if (req_state & REQ_ASK) - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4,OK_BUTTON_GFX_YPOS, - DXSIZE,OK_BUTTON_YSIZE, - DOOR_GFX_PAGEX1,OK_BUTTON_YPOS); + { + DrawYesNoButton(BUTTON_OK, DB_INIT); + DrawYesNoButton(BUTTON_NO, DB_INIT); + } else if (req_state & REQ_CONFIRM) - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4,CONFIRM_BUTTON_GFX_YPOS, - DXSIZE,CONFIRM_BUTTON_YSIZE, - DOOR_GFX_PAGEX1,CONFIRM_BUTTON_YPOS); + { + DrawConfirmButton(BUTTON_CONFIRM, DB_INIT); + } else if (req_state & REQ_PLAYER) { DrawPlayerButton(BUTTON_PLAYER_1, DB_INIT); DrawPlayerButton(BUTTON_PLAYER_2, DB_INIT); DrawPlayerButton(BUTTON_PLAYER_3, DB_INIT); DrawPlayerButton(BUTTON_PLAYER_4, DB_INIT); - - /* - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4 + PLAYER_BUTTON_GFX_XPOS, PLAYER_BUTTON_GFX_YPOS, - PLAYER_BUTTON_XSIZE,PLAYER_BUTTON_YSIZE, - DOOR_GFX_PAGEX1 + PLAYER_BUTTON_1_XPOS, PLAYER_BUTTON_1_YPOS); - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4 + PLAYER_BUTTON_GFX_XPOS, PLAYER_BUTTON_GFX_YPOS, - PLAYER_BUTTON_XSIZE,PLAYER_BUTTON_YSIZE, - DOOR_GFX_PAGEX1 + PLAYER_BUTTON_1_XPOS, PLAYER_BUTTON_1_YPOS); - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4 + PLAYER_BUTTON_GFX_XPOS, PLAYER_BUTTON_GFX_YPOS, - PLAYER_BUTTON_XSIZE,PLAYER_BUTTON_YSIZE, - DOOR_GFX_PAGEX1 + PLAYER_BUTTON_2_XPOS, PLAYER_BUTTON_2_YPOS); - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4 + PLAYER_BUTTON_GFX_XPOS, PLAYER_BUTTON_GFX_YPOS, - PLAYER_BUTTON_XSIZE,PLAYER_BUTTON_YSIZE, - DOOR_GFX_PAGEX1 + PLAYER_BUTTON_3_XPOS, PLAYER_BUTTON_3_YPOS); - XCopyArea(display,pix[PIX_DOOR],pix[PIX_DB_DOOR],gc, - DOOR_GFX_PAGEX4 + PLAYER_BUTTON_GFX_XPOS, PLAYER_BUTTON_GFX_YPOS, - PLAYER_BUTTON_XSIZE,PLAYER_BUTTON_YSIZE, - DOOR_GFX_PAGEX1 + PLAYER_BUTTON_4_XPOS, PLAYER_BUTTON_4_YPOS); - */ } OpenDoor(DOOR_OPEN_1); ClearEventQueue(); - if (!(req_state & REQ_ASK) && - !(req_state & REQ_CONFIRM) && - !(req_state & REQ_PLAYER)) + if (!(req_state & REQUEST_WAIT_FOR)) return(FALSE); if (game_status != MAINMENU) @@ -1531,6 +1512,12 @@ BOOL Request(char *text, unsigned int req_state) } } + /* continue network game after request */ + if (options.network && + game_status == PLAYING && + req_state & REQUEST_WAIT_FOR) + SendToServer_ContinuePlaying(); + return(result); } @@ -1590,7 +1577,7 @@ unsigned int MoveDoor(unsigned int door_state) else if (door2==DOOR_CLOSE_2 && door_state & DOOR_CLOSE_2) door_state &= ~DOOR_CLOSE_2; - if (quick_doors) + if (setup.quick_doors) { stepsize = 20; door_delay_value = 0;