X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Fsystem.c;h=225738cc361ece7da2e18f944cd4082ba529ce6f;hb=4afa1876ca64ce2b3084c64ea0c60ea42be92127;hp=a615b92fcefbe1c8f974fae1bcd8bdbe5b1f778e;hpb=1c9e305ffcb3dd5fd571817d1a50b276703b621c;p=rocksndiamonds.git diff --git a/src/libgame/system.c b/src/libgame/system.c index a615b92f..225738cc 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -1244,7 +1244,23 @@ void ReCreateGameTileSizeBitmap(Bitmap **bitmaps) { if (bitmaps[IMG_BITMAP_CUSTOM]) { - FreeBitmap(bitmaps[IMG_BITMAP_CUSTOM]); + // check if original sized bitmap points to custom sized bitmap + if (bitmaps[IMG_BITMAP_PTR_ORIGINAL] == bitmaps[IMG_BITMAP_CUSTOM]) + { + SDLFreeBitmapTextures(bitmaps[IMG_BITMAP_PTR_ORIGINAL]); + + // keep pointer of previous custom size bitmap + bitmaps[IMG_BITMAP_OTHER] = bitmaps[IMG_BITMAP_CUSTOM]; + + // set original bitmap pointer to scaled original bitmap of other size + bitmaps[IMG_BITMAP_PTR_ORIGINAL] = bitmaps[IMG_BITMAP_OTHER]; + + SDLCreateBitmapTextures(bitmaps[IMG_BITMAP_PTR_ORIGINAL]); + } + else + { + FreeBitmap(bitmaps[IMG_BITMAP_CUSTOM]); + } bitmaps[IMG_BITMAP_CUSTOM] = NULL; } @@ -1417,6 +1433,30 @@ static void CreateScaledBitmaps(Bitmap **bitmaps, int zoom_factor, else bitmaps[IMG_BITMAP_PTR_GAME] = bitmaps[IMG_BITMAP_STANDARD]; + // store the "final" (up-scaled) original bitmap, if not already stored + + int tmp_bitmap_final_nr = -1; + + for (i = 0; i < NUM_IMG_BITMAPS; i++) + if (bitmaps[i] == tmp_bitmap_final) + tmp_bitmap_final_nr = i; + + if (tmp_bitmap_final_nr == -1) // scaled original bitmap not stored + { + // store pointer of scaled original bitmap (not used for any other size) + bitmaps[IMG_BITMAP_OTHER] = tmp_bitmap_final; + + // set original bitmap pointer to scaled original bitmap of other size + bitmaps[IMG_BITMAP_PTR_ORIGINAL] = bitmaps[IMG_BITMAP_OTHER]; + } + else + { + // set original bitmap pointer to corresponding sized bitmap + bitmaps[IMG_BITMAP_PTR_ORIGINAL] = bitmaps[tmp_bitmap_final_nr]; + } + + // free the "old" (unscaled) original bitmap, if not already stored + boolean free_old_bitmap = TRUE; for (i = 0; i < NUM_IMG_BITMAPS; i++) @@ -1435,6 +1475,9 @@ static void CreateScaledBitmaps(Bitmap **bitmaps, int zoom_factor, else { bitmaps[IMG_BITMAP_32x32] = tmp_bitmap_1; + + // set original bitmap pointer to corresponding sized bitmap + bitmaps[IMG_BITMAP_PTR_ORIGINAL] = bitmaps[IMG_BITMAP_32x32]; } UPDATE_BUSY_STATE();