X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=311777303723e2031c92b5b7eb46c2d268992561;hb=76912e277a65fd8b4ec7e15cad94e0e682ce4528;hp=8cabb12de8c3ec028aaf681cc3196b4b00142225;hpb=dbba72fb511aee11057e6db5d0e9a4d53c9a0ddc;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 8cabb12d..31177730 100644 --- a/src/game.c +++ b/src/game.c @@ -3629,6 +3629,10 @@ void InitGame(void) // force restarting global animations displayed during game play RestartGlobalAnimsByStatus(GAME_MODE_PSEUDO_RESTARTING); + // this is required for "transforming" fade modes like cross-fading + // (else global animations will be stopped, but not restarted here) + SetAnimStatusBeforeFading(GAME_MODE_PSEUDO_RESTARTING); + SetGameStatus(GAME_MODE_PLAYING); } @@ -10716,14 +10720,7 @@ static boolean ChangeElement(int x, int y, int element, int page) ChangeCount[x][y]++; // count number of changes in the same frame if (ei->has_anim_event) - { - int fx = getFieldbufferOffsetX_RND(ScreenMovDir, ScreenGfxPos); - int fy = getFieldbufferOffsetY_RND(ScreenMovDir, ScreenGfxPos); - int sx = FX + SCREENX(x) * TILEX_VAR; - int sy = FY + SCREENY(y) * TILEY_VAR; - - HandleGlobalAnimEventByElementChange(element, page, sx - fx, sy - fy); - } + HandleGlobalAnimEventByElementChange(element, page, x, y); if (change->explode) { @@ -13468,8 +13465,9 @@ void TestIfPlayerTouchesCustomElement(int x, int y) incorrectly give EL_PLAYER_1 for "player->element_nr") */ int player_element = PLAYERINFO(x, y)->initial_element; + // as element "X" is the player here, check opposite (center) side CheckElementChangeBySide(xx, yy, border_element, player_element, - CE_TOUCHING_X, border_side); + CE_TOUCHING_X, center_side); } } else if (IS_PLAYER(xx, yy)) // player found at border element @@ -13495,8 +13493,9 @@ void TestIfPlayerTouchesCustomElement(int x, int y) incorrectly give EL_PLAYER_1 for "player->element_nr") */ int player_element = PLAYERINFO(xx, yy)->initial_element; + // as element "X" is the player here, check opposite (border) side CheckElementChangeBySide(x, y, center_element, player_element, - CE_TOUCHING_X, center_side); + CE_TOUCHING_X, border_side); } break; @@ -13603,7 +13602,7 @@ void TestIfElementTouchesCustomElement(int x, int y) CheckElementChangeBySide(xx, yy, border_element, center_element, CE_TOUCHING_X, center_side); - // (center element cannot be player, so we dont have to check this here) + // (center element cannot be player, so we don't have to check this here) } for (i = 0; i < NUM_DIRECTIONS; i++) @@ -13630,6 +13629,7 @@ void TestIfElementTouchesCustomElement(int x, int y) incorrectly give EL_PLAYER_1 for "player->element_nr") */ int player_element = PLAYERINFO(xx, yy)->initial_element; + // as element "X" is the player here, check opposite (border) side CheckElementChangeBySide(x, y, center_element, player_element, CE_TOUCHING_X, border_side); }