X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=972e5a24eab5b0e4ea6551fadf86276a4cc627fd;hb=f1f974498c1691431a5755d917f674c7cf56eb53;hp=bd235f94435c6eac8ed3f23086235b05ac84c8f2;hpb=bc6e19a34de8c4c290dc3c6bee70ac805525070b;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index bd235f94..972e5a24 100644 --- a/src/tools.c +++ b/src/tools.c @@ -17,7 +17,7 @@ #include "init.h" #include "game.h" #include "events.h" -#include "cartoons.h" +#include "anim.h" #include "network.h" #include "tape.h" #include "screens.h" @@ -66,83 +66,83 @@ static struct DoorPartControlInfo door_part_controls[] = { { DOOR_1, - IMG_DOOR_1_GFX_PART_1, + IMG_GFX_DOOR_1_PART_1, &door_1.part_1 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_2, + IMG_GFX_DOOR_1_PART_2, &door_1.part_2 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_3, + IMG_GFX_DOOR_1_PART_3, &door_1.part_3 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_4, + IMG_GFX_DOOR_1_PART_4, &door_1.part_4 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_5, + IMG_GFX_DOOR_1_PART_5, &door_1.part_5 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_6, + IMG_GFX_DOOR_1_PART_6, &door_1.part_6 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_7, + IMG_GFX_DOOR_1_PART_7, &door_1.part_7 }, { DOOR_1, - IMG_DOOR_1_GFX_PART_8, + IMG_GFX_DOOR_1_PART_8, &door_1.part_8 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_1, + IMG_GFX_DOOR_2_PART_1, &door_2.part_1 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_2, + IMG_GFX_DOOR_2_PART_2, &door_2.part_2 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_3, + IMG_GFX_DOOR_2_PART_3, &door_2.part_3 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_4, + IMG_GFX_DOOR_2_PART_4, &door_2.part_4 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_5, + IMG_GFX_DOOR_2_PART_5, &door_2.part_5 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_6, + IMG_GFX_DOOR_2_PART_6, &door_2.part_6 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_7, + IMG_GFX_DOOR_2_PART_7, &door_2.part_7 }, { DOOR_2, - IMG_DOOR_2_GFX_PART_8, + IMG_GFX_DOOR_2_PART_8, &door_2.part_8 }, @@ -174,9 +174,6 @@ static int el_act2crm(int, int); static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS]; static int request_gadget_id = -1; -static unsigned int sync_frame_delay = 0; -static unsigned int sync_frame_delay_value = GAME_FRAME_DELAY; - static char *print_if_not_empty(int element) { static char *s = NULL; @@ -590,6 +587,17 @@ void BackToFront() #endif } +void BackToFront_WithFrameDelay(unsigned int frame_delay_value) +{ + unsigned int frame_delay_value_old = GetVideoFrameDelay(); + + SetVideoFrameDelay(frame_delay_value); + + BackToFront(); + + SetVideoFrameDelay(frame_delay_value_old); +} + static void FadeCrossSaveBackbuffer() { BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); @@ -2592,7 +2600,6 @@ void AnimateEnvelopeRequest(int anim_mode, int action) redraw_mask |= REDRAW_FIELD; - DoAnimation(); BackToFront(); SkipUntilDelayReached(&anim_delay, anim_delay_value, &i, last_frame); @@ -2639,9 +2646,6 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action) } DrawEnvelopeRequest(text); - - if (game_status != GAME_MODE_MAIN) - InitAnimation(); } game.envelope_active = TRUE; /* needed for RedrawPlayfield() events */ @@ -2669,20 +2673,12 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action) game.envelope_active = FALSE; if (action == ACTION_CLOSING) - { - if (game_status != GAME_MODE_MAIN) - StopAnimation(); - BlitBitmap(bitmap_db_store, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); - } // SetDrawBackgroundMask(last_draw_background_mask); redraw_mask |= REDRAW_FIELD; - if (game_status == GAME_MODE_MAIN) - DoAnimation(); - BackToFront(); if (action == ACTION_CLOSING && @@ -3545,9 +3541,7 @@ void WaitForEventToContinue() still_wait = FALSE; } - DoAnimation(); - - WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value); + BackToFront(); } } @@ -3715,14 +3709,8 @@ static int RequestHandleEvents(unsigned int req_state) BlitBitmap(drawto, bitmap_db_cross, sx, sy, width, height, sx, sy); } } - else - { - DoAnimation(); - } BackToFront(); - - WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value); } return result; @@ -3866,17 +3854,11 @@ static boolean RequestDoor(char *text, unsigned int req_state) return FALSE; } - if (game_status != GAME_MODE_MAIN) - InitAnimation(); - SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1); // ---------- handle request buttons ---------- result = RequestHandleEvents(req_state); - if (game_status != GAME_MODE_MAIN) - StopAnimation(); - UnmapToolButtons(); if (!(req_state & REQ_STAY_OPEN)) @@ -3971,9 +3953,6 @@ static boolean RequestEnvelope(char *text, unsigned int req_state) // ---------- handle request buttons ---------- result = RequestHandleEvents(req_state); - if (game_status != GAME_MODE_MAIN) - StopAnimation(); - UnmapToolButtons(); ShowEnvelopeRequest(text, req_state, ACTION_CLOSING); @@ -4037,8 +4016,8 @@ void InitGraphicCompatibilityInfo_Doors() } doors[] = { - { DOOR_1, IMG_DOOR_1_GFX_PART_1, IMG_DOOR_1_GFX_PART_8, &door_1 }, - { DOOR_2, IMG_DOOR_2_GFX_PART_1, IMG_DOOR_2_GFX_PART_8, &door_2 }, + { DOOR_1, IMG_GFX_DOOR_1_PART_1, IMG_GFX_DOOR_1_PART_8, &door_1 }, + { DOOR_2, IMG_GFX_DOOR_2_PART_1, IMG_GFX_DOOR_2_PART_8, &door_2 }, { -1, -1, -1, NULL } }; @@ -4567,9 +4546,6 @@ unsigned int MoveDoor(unsigned int door_state) { BackToFront(); - if (game_status == GAME_MODE_MAIN) - DoAnimation(); - SkipUntilDelayReached(&door_delay, door_delay_value, &k, last_frame); current_move_delay += max_step_delay; @@ -4684,31 +4660,31 @@ static struct } toolbutton_info[NUM_TOOL_BUTTONS] = { { - IMG_REQUEST_BUTTON_GFX_YES, &request.button.yes, + IMG_GFX_REQUEST_BUTTON_YES, &request.button.yes, TOOL_CTRL_ID_YES, "yes" }, { - IMG_REQUEST_BUTTON_GFX_NO, &request.button.no, + IMG_GFX_REQUEST_BUTTON_NO, &request.button.no, TOOL_CTRL_ID_NO, "no" }, { - IMG_REQUEST_BUTTON_GFX_CONFIRM, &request.button.confirm, + IMG_GFX_REQUEST_BUTTON_CONFIRM, &request.button.confirm, TOOL_CTRL_ID_CONFIRM, "confirm" }, { - IMG_REQUEST_BUTTON_GFX_PLAYER_1, &request.button.player_1, + IMG_GFX_REQUEST_BUTTON_PLAYER_1, &request.button.player_1, TOOL_CTRL_ID_PLAYER_1, "player 1" }, { - IMG_REQUEST_BUTTON_GFX_PLAYER_2, &request.button.player_2, + IMG_GFX_REQUEST_BUTTON_PLAYER_2, &request.button.player_2, TOOL_CTRL_ID_PLAYER_2, "player 2" }, { - IMG_REQUEST_BUTTON_GFX_PLAYER_3, &request.button.player_3, + IMG_GFX_REQUEST_BUTTON_PLAYER_3, &request.button.player_3, TOOL_CTRL_ID_PLAYER_3, "player 3" }, { - IMG_REQUEST_BUTTON_GFX_PLAYER_4, &request.button.player_4, + IMG_GFX_REQUEST_BUTTON_PLAYER_4, &request.button.player_4, TOOL_CTRL_ID_PLAYER_4, "player 4" } }; @@ -8277,7 +8253,17 @@ void JoinRectangles(int *x, int *y, int *width, int *height, void SetAnimStatus(int anim_status_new) { + if (anim_status_new == GAME_MODE_MAIN) + anim_status_new = GAME_MODE_PSEUDO_MAINONLY; + global.anim_status_next = anim_status_new; + + // directly set screen modes that are entered without fading + if ((global.anim_status == GAME_MODE_PSEUDO_MAINONLY && + global.anim_status_next == GAME_MODE_PSEUDO_TYPENAME) || + (global.anim_status == GAME_MODE_PSEUDO_TYPENAME && + global.anim_status_next == GAME_MODE_PSEUDO_MAINONLY)) + global.anim_status = global.anim_status_next; } void SetGameStatus(int game_status_new) @@ -8353,7 +8339,7 @@ void ChangeViewportPropertiesIfNeeded() int new_scr_fieldy_buffers = new_sysize / new_tilesize_var; boolean init_gfx_buffers = FALSE; boolean init_video_buffer = FALSE; - boolean init_gadgets_and_toons = FALSE; + boolean init_gadgets_and_anims = FALSE; boolean init_em_graphics = FALSE; if (new_win_xsize != WIN_XSIZE || @@ -8364,7 +8350,7 @@ void ChangeViewportPropertiesIfNeeded() init_video_buffer = TRUE; init_gfx_buffers = TRUE; - init_gadgets_and_toons = TRUE; + init_gadgets_and_anims = TRUE; // printf("::: video: init_video_buffer, init_gfx_buffers\n"); } @@ -8479,10 +8465,10 @@ void ChangeViewportPropertiesIfNeeded() TILESIZE_VAR = new_tilesize_var; init_gfx_buffers = TRUE; - init_gadgets_and_toons = TRUE; + init_gadgets_and_anims = TRUE; // printf("::: viewports: init_gfx_buffers\n"); - // printf("::: viewports: init_gadgets_and_toons\n"); + // printf("::: viewports: init_gadgets_and_anims\n"); } if (init_gfx_buffers) @@ -8509,12 +8495,11 @@ void ChangeViewportPropertiesIfNeeded() InitImageTextures(); } - if (init_gadgets_and_toons) + if (init_gadgets_and_anims) { - // printf("::: init_gadgets_and_toons\n"); + // printf("::: init_gadgets_and_anims\n"); InitGadgets(); - InitToons(); InitGlobalAnimations(); }