X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=101855843b7c0f39165d2ace5b430bbddb7e395b;hb=ec2269c79c8535f2124dd8b0f0780e25d679be2b;hp=cf5441bf4772d8e5d5e71d7768b22a963e13d009;hpb=695b9e3d2e2ee94c93d2e804aa3c23dd34f68a25;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index cf5441bf..10185584 100644 --- a/src/game.c +++ b/src/game.c @@ -60,6 +60,8 @@ #define USE_FIX_IMPACT_COLLISION (USE_NEW_STUFF * 1) #define USE_FIX_CE_ACTION_WITH_PLAYER (USE_NEW_STUFF * 1) +#define USE_PLAYER_REANIMATION (USE_NEW_STUFF * 1) + #define USE_GFX_RESET_WHEN_NOT_MOVING (USE_NEW_STUFF * 1) #define USE_DELAYED_GFX_REDRAW (USE_NEW_STUFF * 0) @@ -1781,6 +1783,17 @@ static void InitPlayerField(int x, int y, int element, boolean init_game) player->jx = player->last_jx = x; player->jy = player->last_jy = y; } + +#if USE_PLAYER_REANIMATION + if (!init_game) + { + int player_nr = GET_PLAYER_NR(element); + struct PlayerInfo *player = &stored_player[player_nr]; + + if (player->active) + player->killed = FALSE; /* if player was just killed, reanimate him */ + } +#endif } static void InitField(int x, int y, boolean init_game) @@ -6436,6 +6449,8 @@ static void RedrawAllInvisibleElementsForMagnifier() element - EL_EM_GATE_1_GRAY + EL_EM_GATE_1_GRAY_ACTIVE : IS_EMC_GATE_GRAY(element) ? element - EL_EMC_GATE_5_GRAY + EL_EMC_GATE_5_GRAY_ACTIVE : + IS_DC_GATE_GRAY(element) ? + EL_DC_GATE_WHITE_GRAY_ACTIVE : element); TEST_DrawLevelField(x, y); } @@ -6448,6 +6463,8 @@ static void RedrawAllInvisibleElementsForMagnifier() element - EL_EM_GATE_1_GRAY_ACTIVE + EL_EM_GATE_1_GRAY : IS_EMC_GATE_GRAY_ACTIVE(element) ? element - EL_EMC_GATE_5_GRAY_ACTIVE + EL_EMC_GATE_5_GRAY : + IS_DC_GATE_GRAY_ACTIVE(element) ? + EL_DC_GATE_WHITE_GRAY : element); TEST_DrawLevelField(x, y); } @@ -12674,12 +12691,13 @@ static boolean AllPlayersInVisibleScreen() void ScrollLevel(int dx, int dy) { -#if 1 +#if 0 + /* (directly solved in BlitBitmap() now) */ static Bitmap *bitmap_db_field2 = NULL; int softscroll_offset = (setup.soft_scrolling ? TILEX : 0); int x, y; #else - int i, x, y; + int x, y; #endif #if 0 @@ -12689,7 +12707,8 @@ void ScrollLevel(int dx, int dy) return; #endif -#if 1 +#if 0 + /* (directly solved in BlitBitmap() now) */ if (bitmap_db_field2 == NULL) bitmap_db_field2 = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH); @@ -13598,6 +13617,8 @@ void TestIfElementTouchesCustomElement(int x, int y) /* check for change of border element */ 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) */ } for (i = 0; i < NUM_DIRECTIONS; i++) @@ -14131,7 +14152,13 @@ void KillPlayer(struct PlayerInfo *player) player->shield_deadly_time_left = 0; Bang(jx, jy); + +#if USE_PLAYER_REANIMATION + if (player->killed) /* player may have been reanimated */ + BuryPlayer(player); +#else BuryPlayer(player); +#endif } static void KillPlayerUnlessEnemyProtected(int x, int y)