X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=aeb40a51fcc369b0e06378145c6891669790cc84;hb=c6d59064aa782b8ad71eddac2797fdc50e4858f9;hp=4874b346fa25eb6e6d93202114740d033fe86e8b;hpb=949580a3bafe5c8abd1fac99202411b65900b883;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 4874b346..aeb40a51 100644 --- a/src/game.c +++ b/src/game.c @@ -72,19 +72,19 @@ #if USE_DELAYED_GFX_REDRAW #define TEST_DrawLevelField(x, y) \ GfxRedraw[x][y] |= GFX_REDRAW_TILE -#define TEST_DrawLevelFieldCrumbledSand(x, y) \ +#define TEST_DrawLevelFieldCrumbled(x, y) \ GfxRedraw[x][y] |= GFX_REDRAW_TILE_CRUMBLED -#define TEST_DrawLevelFieldCrumbledSandNeighbours(x, y) \ +#define TEST_DrawLevelFieldCrumbledNeighbours(x, y) \ GfxRedraw[x][y] |= GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS #define TEST_DrawTwinkleOnField(x, y) \ GfxRedraw[x][y] |= GFX_REDRAW_TILE_TWINKLED #else #define TEST_DrawLevelField(x, y) \ DrawLevelField(x, y) -#define TEST_DrawLevelFieldCrumbledSand(x, y) \ - DrawLevelFieldCrumbledSand(x, y) -#define TEST_DrawLevelFieldCrumbledSandNeighbours(x, y) \ - DrawLevelFieldCrumbledSandNeighbours(x, y) +#define TEST_DrawLevelFieldCrumbled(x, y) \ + DrawLevelFieldCrumbled(x, y) +#define TEST_DrawLevelFieldCrumbledNeighbours(x, y) \ + DrawLevelFieldCrumbledNeighbours(x, y) #define TEST_DrawTwinkleOnField(x, y) \ DrawTwinkleOnField(x, y) #endif @@ -194,86 +194,87 @@ #define GAME_PANEL_TIME_HH 32 #define GAME_PANEL_TIME_MM 33 #define GAME_PANEL_TIME_SS 34 -#define GAME_PANEL_SHIELD_NORMAL 35 -#define GAME_PANEL_SHIELD_NORMAL_TIME 36 -#define GAME_PANEL_SHIELD_DEADLY 37 -#define GAME_PANEL_SHIELD_DEADLY_TIME 38 -#define GAME_PANEL_EXIT 39 -#define GAME_PANEL_EMC_MAGIC_BALL 40 -#define GAME_PANEL_EMC_MAGIC_BALL_SWITCH 41 -#define GAME_PANEL_LIGHT_SWITCH 42 -#define GAME_PANEL_LIGHT_SWITCH_TIME 43 -#define GAME_PANEL_TIMEGATE_SWITCH 44 -#define GAME_PANEL_TIMEGATE_SWITCH_TIME 45 -#define GAME_PANEL_SWITCHGATE_SWITCH 46 -#define GAME_PANEL_EMC_LENSES 47 -#define GAME_PANEL_EMC_LENSES_TIME 48 -#define GAME_PANEL_EMC_MAGNIFIER 49 -#define GAME_PANEL_EMC_MAGNIFIER_TIME 50 -#define GAME_PANEL_BALLOON_SWITCH 51 -#define GAME_PANEL_DYNABOMB_NUMBER 52 -#define GAME_PANEL_DYNABOMB_SIZE 53 -#define GAME_PANEL_DYNABOMB_POWER 54 -#define GAME_PANEL_PENGUINS 55 -#define GAME_PANEL_SOKOBAN_OBJECTS 56 -#define GAME_PANEL_SOKOBAN_FIELDS 57 -#define GAME_PANEL_ROBOT_WHEEL 58 -#define GAME_PANEL_CONVEYOR_BELT_1 59 -#define GAME_PANEL_CONVEYOR_BELT_2 60 -#define GAME_PANEL_CONVEYOR_BELT_3 61 -#define GAME_PANEL_CONVEYOR_BELT_4 62 -#define GAME_PANEL_CONVEYOR_BELT_1_SWITCH 63 -#define GAME_PANEL_CONVEYOR_BELT_2_SWITCH 64 -#define GAME_PANEL_CONVEYOR_BELT_3_SWITCH 65 -#define GAME_PANEL_CONVEYOR_BELT_4_SWITCH 66 -#define GAME_PANEL_MAGIC_WALL 67 -#define GAME_PANEL_MAGIC_WALL_TIME 68 -#define GAME_PANEL_GRAVITY_STATE 69 -#define GAME_PANEL_GRAPHIC_1 70 -#define GAME_PANEL_GRAPHIC_2 71 -#define GAME_PANEL_GRAPHIC_3 72 -#define GAME_PANEL_GRAPHIC_4 73 -#define GAME_PANEL_GRAPHIC_5 74 -#define GAME_PANEL_GRAPHIC_6 75 -#define GAME_PANEL_GRAPHIC_7 76 -#define GAME_PANEL_GRAPHIC_8 77 -#define GAME_PANEL_ELEMENT_1 78 -#define GAME_PANEL_ELEMENT_2 79 -#define GAME_PANEL_ELEMENT_3 80 -#define GAME_PANEL_ELEMENT_4 81 -#define GAME_PANEL_ELEMENT_5 82 -#define GAME_PANEL_ELEMENT_6 83 -#define GAME_PANEL_ELEMENT_7 84 -#define GAME_PANEL_ELEMENT_8 85 -#define GAME_PANEL_ELEMENT_COUNT_1 86 -#define GAME_PANEL_ELEMENT_COUNT_2 87 -#define GAME_PANEL_ELEMENT_COUNT_3 88 -#define GAME_PANEL_ELEMENT_COUNT_4 89 -#define GAME_PANEL_ELEMENT_COUNT_5 90 -#define GAME_PANEL_ELEMENT_COUNT_6 91 -#define GAME_PANEL_ELEMENT_COUNT_7 92 -#define GAME_PANEL_ELEMENT_COUNT_8 93 -#define GAME_PANEL_CE_SCORE_1 94 -#define GAME_PANEL_CE_SCORE_2 95 -#define GAME_PANEL_CE_SCORE_3 96 -#define GAME_PANEL_CE_SCORE_4 97 -#define GAME_PANEL_CE_SCORE_5 98 -#define GAME_PANEL_CE_SCORE_6 99 -#define GAME_PANEL_CE_SCORE_7 100 -#define GAME_PANEL_CE_SCORE_8 101 -#define GAME_PANEL_CE_SCORE_1_ELEMENT 102 -#define GAME_PANEL_CE_SCORE_2_ELEMENT 103 -#define GAME_PANEL_CE_SCORE_3_ELEMENT 104 -#define GAME_PANEL_CE_SCORE_4_ELEMENT 105 -#define GAME_PANEL_CE_SCORE_5_ELEMENT 106 -#define GAME_PANEL_CE_SCORE_6_ELEMENT 107 -#define GAME_PANEL_CE_SCORE_7_ELEMENT 108 -#define GAME_PANEL_CE_SCORE_8_ELEMENT 109 -#define GAME_PANEL_PLAYER_NAME 110 -#define GAME_PANEL_LEVEL_NAME 111 -#define GAME_PANEL_LEVEL_AUTHOR 112 - -#define NUM_GAME_PANEL_CONTROLS 113 +#define GAME_PANEL_FRAME 35 +#define GAME_PANEL_SHIELD_NORMAL 36 +#define GAME_PANEL_SHIELD_NORMAL_TIME 37 +#define GAME_PANEL_SHIELD_DEADLY 38 +#define GAME_PANEL_SHIELD_DEADLY_TIME 39 +#define GAME_PANEL_EXIT 40 +#define GAME_PANEL_EMC_MAGIC_BALL 41 +#define GAME_PANEL_EMC_MAGIC_BALL_SWITCH 42 +#define GAME_PANEL_LIGHT_SWITCH 43 +#define GAME_PANEL_LIGHT_SWITCH_TIME 44 +#define GAME_PANEL_TIMEGATE_SWITCH 45 +#define GAME_PANEL_TIMEGATE_SWITCH_TIME 46 +#define GAME_PANEL_SWITCHGATE_SWITCH 47 +#define GAME_PANEL_EMC_LENSES 48 +#define GAME_PANEL_EMC_LENSES_TIME 49 +#define GAME_PANEL_EMC_MAGNIFIER 50 +#define GAME_PANEL_EMC_MAGNIFIER_TIME 51 +#define GAME_PANEL_BALLOON_SWITCH 52 +#define GAME_PANEL_DYNABOMB_NUMBER 53 +#define GAME_PANEL_DYNABOMB_SIZE 54 +#define GAME_PANEL_DYNABOMB_POWER 55 +#define GAME_PANEL_PENGUINS 56 +#define GAME_PANEL_SOKOBAN_OBJECTS 57 +#define GAME_PANEL_SOKOBAN_FIELDS 58 +#define GAME_PANEL_ROBOT_WHEEL 59 +#define GAME_PANEL_CONVEYOR_BELT_1 60 +#define GAME_PANEL_CONVEYOR_BELT_2 61 +#define GAME_PANEL_CONVEYOR_BELT_3 62 +#define GAME_PANEL_CONVEYOR_BELT_4 63 +#define GAME_PANEL_CONVEYOR_BELT_1_SWITCH 64 +#define GAME_PANEL_CONVEYOR_BELT_2_SWITCH 65 +#define GAME_PANEL_CONVEYOR_BELT_3_SWITCH 66 +#define GAME_PANEL_CONVEYOR_BELT_4_SWITCH 67 +#define GAME_PANEL_MAGIC_WALL 68 +#define GAME_PANEL_MAGIC_WALL_TIME 69 +#define GAME_PANEL_GRAVITY_STATE 70 +#define GAME_PANEL_GRAPHIC_1 71 +#define GAME_PANEL_GRAPHIC_2 72 +#define GAME_PANEL_GRAPHIC_3 73 +#define GAME_PANEL_GRAPHIC_4 74 +#define GAME_PANEL_GRAPHIC_5 75 +#define GAME_PANEL_GRAPHIC_6 76 +#define GAME_PANEL_GRAPHIC_7 77 +#define GAME_PANEL_GRAPHIC_8 78 +#define GAME_PANEL_ELEMENT_1 79 +#define GAME_PANEL_ELEMENT_2 80 +#define GAME_PANEL_ELEMENT_3 81 +#define GAME_PANEL_ELEMENT_4 82 +#define GAME_PANEL_ELEMENT_5 83 +#define GAME_PANEL_ELEMENT_6 84 +#define GAME_PANEL_ELEMENT_7 85 +#define GAME_PANEL_ELEMENT_8 86 +#define GAME_PANEL_ELEMENT_COUNT_1 87 +#define GAME_PANEL_ELEMENT_COUNT_2 88 +#define GAME_PANEL_ELEMENT_COUNT_3 89 +#define GAME_PANEL_ELEMENT_COUNT_4 90 +#define GAME_PANEL_ELEMENT_COUNT_5 91 +#define GAME_PANEL_ELEMENT_COUNT_6 92 +#define GAME_PANEL_ELEMENT_COUNT_7 93 +#define GAME_PANEL_ELEMENT_COUNT_8 94 +#define GAME_PANEL_CE_SCORE_1 95 +#define GAME_PANEL_CE_SCORE_2 96 +#define GAME_PANEL_CE_SCORE_3 97 +#define GAME_PANEL_CE_SCORE_4 98 +#define GAME_PANEL_CE_SCORE_5 99 +#define GAME_PANEL_CE_SCORE_6 100 +#define GAME_PANEL_CE_SCORE_7 101 +#define GAME_PANEL_CE_SCORE_8 102 +#define GAME_PANEL_CE_SCORE_1_ELEMENT 103 +#define GAME_PANEL_CE_SCORE_2_ELEMENT 104 +#define GAME_PANEL_CE_SCORE_3_ELEMENT 105 +#define GAME_PANEL_CE_SCORE_4_ELEMENT 106 +#define GAME_PANEL_CE_SCORE_5_ELEMENT 107 +#define GAME_PANEL_CE_SCORE_6_ELEMENT 108 +#define GAME_PANEL_CE_SCORE_7_ELEMENT 109 +#define GAME_PANEL_CE_SCORE_8_ELEMENT 110 +#define GAME_PANEL_PLAYER_NAME 111 +#define GAME_PANEL_LEVEL_NAME 112 +#define GAME_PANEL_LEVEL_AUTHOR 113 + +#define NUM_GAME_PANEL_CONTROLS 114 struct GamePanelOrderInfo { @@ -473,6 +474,11 @@ static struct GamePanelControlInfo game_panel_controls[] = &game.panel.time_ss, TYPE_INTEGER, }, + { + GAME_PANEL_FRAME, + &game.panel.frame, + TYPE_INTEGER, + }, { GAME_PANEL_SHIELD_NORMAL, &game.panel.shield_normal, @@ -2347,6 +2353,8 @@ void UpdateGameControlValues() game_panel_controls[GAME_PANEL_TIME_MM].value = (time / 60) % 60; game_panel_controls[GAME_PANEL_TIME_SS].value = time % 60; + game_panel_controls[GAME_PANEL_FRAME].value = FrameCounter; + game_panel_controls[GAME_PANEL_SHIELD_NORMAL].value = (local_player->shield_normal_time_left > 0 ? EL_SHIELD_NORMAL_ACTIVE : EL_EMPTY); @@ -3712,6 +3720,15 @@ void InitGame() game_status = GAME_MODE_PLAYING; +#if 1 + /* needed if different viewport properties defined for playing */ + ChangeViewportPropertiesIfNeeded(); +#endif + +#if 1 + DrawCompleteVideoDisplay(); +#endif + InitGameEngine(); InitGameControlValues(); @@ -6150,7 +6167,7 @@ void Explode(int ex, int ey, int phase, int mode) TestIfElementTouchesCustomElement(x, y); if (GFX_CRUMBLED(element)) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); if (IS_PLAYER(x, y) && !PLAYERINFO(x, y)->present) StorePlayer[x][y] = 0; @@ -6164,7 +6181,7 @@ void Explode(int ex, int ey, int phase, int mode) int frame = getGraphicAnimationFrame(graphic, GfxFrame[x][y]); if (phase == delay) - TEST_DrawLevelFieldCrumbledSand(x, y); + TEST_DrawLevelFieldCrumbled(x, y); if (IS_WALKABLE_OVER(Back[x][y]) && Back[x][y] != EL_EMPTY) { @@ -6622,7 +6639,7 @@ static void RedrawAllLightSwitchesAndInvisibleElements() /* uncrumble neighbour fields, if needed */ if (element == EL_INVISIBLE_SAND) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } else if (element == EL_INVISIBLE_STEELWALL_ACTIVE || element == EL_INVISIBLE_WALL_ACTIVE || @@ -6635,7 +6652,7 @@ static void RedrawAllLightSwitchesAndInvisibleElements() /* re-crumble neighbour fields, if needed */ if (element == EL_INVISIBLE_SAND) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } } } @@ -6671,7 +6688,7 @@ static void RedrawAllInvisibleElementsForLenses() /* uncrumble neighbour fields, if needed */ if (element == EL_INVISIBLE_SAND) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } else if (element == EL_INVISIBLE_STEELWALL_ACTIVE || element == EL_INVISIBLE_WALL_ACTIVE || @@ -6684,7 +6701,7 @@ static void RedrawAllInvisibleElementsForLenses() /* re-crumble neighbour fields, if needed */ if (element == EL_INVISIBLE_SAND) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } } } @@ -8501,7 +8518,7 @@ void StartMoving(int x, int y) if (IN_SCR_FIELD(sx, sy)) { - TEST_DrawLevelFieldCrumbledSand(xx, yy); + TEST_DrawLevelFieldCrumbled(xx, yy); DrawGraphic(sx, sy, flame_graphic, frame); } } @@ -9004,7 +9021,7 @@ void ContinueMoving(int x, int y) { Feld[x][y] = EL_SAND; - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } else if (element == EL_QUICKSAND_FILLING) { @@ -9171,7 +9188,7 @@ void ContinueMoving(int x, int y) InitField(x, y, FALSE); if (GFX_CRUMBLED(Feld[x][y])) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); if (ELEM_IS_PLAYER(move_leave_element)) RelocatePlayer(x, y, move_leave_element); @@ -10365,7 +10382,7 @@ static void ChangeActiveTrap(int x, int y) /* if new animation frame was drawn, correct crumbled sand border */ if (IS_NEW_FRAME(GfxFrame[x][y], graphic)) - TEST_DrawLevelFieldCrumbledSand(x, y); + TEST_DrawLevelFieldCrumbled(x, y); } static int getSpecialActionElement(int element, int number, int base_element) @@ -11101,7 +11118,7 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) TEST_DrawLevelField(x, y); if (GFX_CRUMBLED(new_element)) - TEST_DrawLevelFieldCrumbledSandNeighbours(x, y); + TEST_DrawLevelFieldCrumbledNeighbours(x, y); } #if 1 @@ -13170,10 +13187,10 @@ void GameActions_RND() DrawLevelField(x, y); if (GfxRedraw[x][y] & GFX_REDRAW_TILE_CRUMBLED) - DrawLevelFieldCrumbledSand(x, y); + DrawLevelFieldCrumbled(x, y); if (GfxRedraw[x][y] & GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS) - DrawLevelFieldCrumbledSandNeighbours(x, y); + DrawLevelFieldCrumbledNeighbours(x, y); if (GfxRedraw[x][y] & GFX_REDRAW_TILE_TWINKLED) DrawTwinkleOnField(x, y);