X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Finit.c;h=bbf595143e6254954283f20c18d235791af1b768;hp=307350325c759bfecd14640cc8027f120e3ca1f6;hb=abe44529b439ad39b4d8dbf19cbd67c9b9844279;hpb=e5367ee42312c8835125438511d8479aa2daa094 diff --git a/src/init.c b/src/init.c index 30735032..bbf59514 100644 --- a/src/init.c +++ b/src/init.c @@ -1,15 +1,13 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* init.c * -***********************************************************/ +// ============================================================================ +// Rocks'n'Diamonds - McDuffin Strikes Back! +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// init.c +// ============================================================================ #include "libgame/libgame.h" @@ -38,9 +36,6 @@ #define CONFIG_TOKEN_FONT_INITIAL "font.initial" #define CONFIG_TOKEN_GLOBAL_BUSY "global.busy" -#define DEBUG_PRINT_INIT_TIMESTAMPS TRUE -#define DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH 0 - static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS]; static struct GraphicInfo anim_initial; @@ -89,72 +84,6 @@ static int copy_properties[][5] = }; -static void print_timestamp_ext(char *message, char *mode) -{ -#if DEBUG -#if DEBUG_PRINT_INIT_TIMESTAMPS - static char *debug_message = NULL; - static char *last_message = NULL; - static int counter_nr = 0; - int max_depth = DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH; - - checked_free(debug_message); - debug_message = getStringCat3(mode, " ", message); - - if (strEqual(mode, "INIT")) - { - debug_print_timestamp(counter_nr, NULL); - - if (counter_nr + 1 < max_depth) - debug_print_timestamp(counter_nr, debug_message); - - counter_nr++; - - debug_print_timestamp(counter_nr, NULL); - } - else if (strEqual(mode, "DONE")) - { - counter_nr--; - - if (counter_nr + 1 < max_depth || - (counter_nr == 0 && max_depth == 1)) - { - last_message = message; - - if (counter_nr == 0 && max_depth == 1) - { - checked_free(debug_message); - debug_message = getStringCat3("TIME", " ", message); - } - - debug_print_timestamp(counter_nr, debug_message); - } - } - else if (!strEqual(mode, "TIME") || - !strEqual(message, last_message)) - { - if (counter_nr < max_depth) - debug_print_timestamp(counter_nr, debug_message); - } -#endif -#endif -} - -static void print_timestamp_init(char *message) -{ - print_timestamp_ext(message, "INIT"); -} - -static void print_timestamp_time(char *message) -{ - print_timestamp_ext(message, "TIME"); -} - -static void print_timestamp_done(char *message) -{ - print_timestamp_ext(message, "DONE"); -} - void DrawInitAnim() { struct GraphicInfo *graphic_info_last = graphic_info; @@ -265,11 +194,14 @@ inline void InitElementSmallImagesScaledUp(int graphic) printf("::: '%s' -> '%s'\n", fi->token, fi->filename); #endif - CreateImageWithSmallImages(graphic, graphic_info[graphic].scale_up_factor); + CreateImageWithSmallImages(graphic, graphic_info[graphic].scale_up_factor, + graphic_info[graphic].tile_size); } void InitElementSmallImages() { + print_timestamp_init("InitElementSmallImages"); + static int special_graphics[] = { IMG_EDITOR_ELEMENT_BORDER, @@ -282,21 +214,30 @@ void InitElementSmallImages() int num_property_mappings = getImageListPropertyMappingSize(); int i; + print_timestamp_time("getImageListPropertyMapping/Size"); + + print_timestamp_init("InitElementSmallImagesScaledUp (1)"); /* initialize normal images from static configuration */ for (i = 0; element_to_graphic[i].element > -1; i++) InitElementSmallImagesScaledUp(element_to_graphic[i].graphic); + print_timestamp_done("InitElementSmallImagesScaledUp (1)"); /* initialize special images from static configuration */ for (i = 0; element_to_special_graphic[i].element > -1; i++) InitElementSmallImagesScaledUp(element_to_special_graphic[i].graphic); + print_timestamp_time("InitElementSmallImagesScaledUp (2)"); /* initialize images from dynamic configuration (may be elements or other) */ for (i = 0; i < num_property_mappings; i++) InitElementSmallImagesScaledUp(property_mapping[i].artwork_index); + print_timestamp_time("InitElementSmallImagesScaledUp (3)"); /* initialize special images from above list (non-element images) */ for (i = 0; special_graphics[i] > -1; i++) InitElementSmallImagesScaledUp(special_graphics[i]); + print_timestamp_time("InitElementSmallImagesScaledUp (4)"); + + print_timestamp_done("InitElementSmallImages"); } void InitScaledImages() @@ -1196,7 +1137,6 @@ static int get_graphic_parameter_value(char *value_raw, char *suffix, int type) if (strEqual(value_raw, ARG_UNDEFINED)) return ARG_UNDEFINED_VALUE; -#if 1 if (type == TYPE_ELEMENT) { char *value = getHashEntry(element_token_hash, value_raw); @@ -1210,36 +1150,6 @@ static int get_graphic_parameter_value(char *value_raw, char *suffix, int type) return (value != NULL ? atoi(value) : IMG_UNDEFINED); } -#else - - int i; - int x = 0; - - /* !!! THIS IS BUGGY !!! NOT SURE IF YOU GET ELEMENT ID OR GRAPHIC ID !!! */ - /* !!! (possible reason why ".clone_from" with elements doesn't work) !!! */ - - /* !!! OPTIMIZE THIS BY USING HASH !!! */ - for (i = 0; i < MAX_NUM_ELEMENTS; i++) - if (strEqual(element_info[i].token_name, value_raw)) - return i; - - /* !!! OPTIMIZE THIS BY USING HASH !!! */ - for (i = 0; image_config[i].token != NULL; i++) - { - int len_config_value = strlen(image_config[i].value); - - if (!strEqual(&image_config[i].value[len_config_value - 4], ".pcx") && - !strEqual(&image_config[i].value[len_config_value - 4], ".wav") && - !strEqual(image_config[i].value, UNDEFINED_FILENAME)) - continue; - - if (strEqual(image_config[i].token, value_raw)) - return x; - - x++; - } -#endif - return -1; } @@ -1282,6 +1192,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->diggable_like = -1; /* do not use clone element */ g->border_size = TILEX / 8; /* "CRUMBLED" border size */ g->scale_up_factor = 1; /* default: no scaling up */ + g->tile_size = TILESIZE; /* default: standard tile size */ g->clone_from = -1; /* do not use clone graphic */ g->anim_delay_fixed = 0; g->anim_delay_random = 0; @@ -1307,6 +1218,14 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->scale_up_factor = 1; /* no scaling */ #endif +#if 1 + /* optional tile size for using non-standard image size */ + if (parameter[GFX_ARG_TILE_SIZE] != ARG_UNDEFINED_VALUE) + g->tile_size = parameter[GFX_ARG_TILE_SIZE]; + if (g->tile_size < TILESIZE) + g->tile_size = TILESIZE; /* standard tile size */ +#endif + #if 1 if (g->use_image_size) { @@ -1853,14 +1772,6 @@ static void InitGraphicInfo() int num_images = getImageListSize(); int i; -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - static boolean clipmasks_initialized = FALSE; - Pixmap src_pixmap; - XGCValues clip_gc_values; - unsigned int clip_gc_valuemask; - GC copy_clipmask_gc = None; -#endif - /* use image size as default values for width and height for these images */ static int full_size_graphics[] = { @@ -1871,6 +1782,7 @@ static void InitGraphicInfo() IMG_BACKGROUND_ENVELOPE_2, IMG_BACKGROUND_ENVELOPE_3, IMG_BACKGROUND_ENVELOPE_4, + IMG_BACKGROUND_REQUEST, IMG_BACKGROUND, IMG_BACKGROUND_TITLE_INITIAL, @@ -1885,11 +1797,15 @@ static void InitGraphicInfo() IMG_BACKGROUND_INFO_MUSIC, IMG_BACKGROUND_INFO_CREDITS, IMG_BACKGROUND_INFO_PROGRAM, + IMG_BACKGROUND_INFO_VERSION, IMG_BACKGROUND_INFO_LEVELSET, IMG_BACKGROUND_SETUP, + IMG_BACKGROUND_PLAYING, IMG_BACKGROUND_DOOR, IMG_BACKGROUND_TAPE, IMG_BACKGROUND_PANEL, + IMG_BACKGROUND_PALETTE, + IMG_BACKGROUND_TOOLBOX, IMG_TITLESCREEN_INITIAL_1, IMG_TITLESCREEN_INITIAL_2, @@ -1902,6 +1818,17 @@ static void InitGraphicInfo() IMG_TITLESCREEN_4, IMG_TITLESCREEN_5, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_2, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_3, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_4, + IMG_BACKGROUND_TITLEMESSAGE_INITIAL_5, + IMG_BACKGROUND_TITLEMESSAGE_1, + IMG_BACKGROUND_TITLEMESSAGE_2, + IMG_BACKGROUND_TITLEMESSAGE_3, + IMG_BACKGROUND_TITLEMESSAGE_4, + IMG_BACKGROUND_TITLEMESSAGE_5, + -1 }; @@ -1919,22 +1846,6 @@ static void InitGraphicInfo() graphic_info[full_size_graphics[i]].use_image_size = TRUE; #endif -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - if (clipmasks_initialized) - { - for (i = 0; i < num_images; i++) - { - if (graphic_info[i].clip_mask) - XFreePixmap(display, graphic_info[i].clip_mask); - if (graphic_info[i].clip_gc) - XFreeGC(display, graphic_info[i].clip_gc); - - graphic_info[i].clip_mask = None; - graphic_info[i].clip_gc = None; - } - } -#endif - /* first set all graphic paramaters ... */ for (i = 0; i < num_images; i++) set_graphic_parameters(i); @@ -2027,41 +1938,7 @@ static void InitGraphicInfo() graphic_info[i] = graphic_info[fallback_graphic]; } - -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - /* currently we only need a tile clip mask from the first frame */ - getFixedGraphicSource(i, first_frame, &src_bitmap, &src_x, &src_y); - - if (copy_clipmask_gc == None) - { - clip_gc_values.graphics_exposures = False; - clip_gc_valuemask = GCGraphicsExposures; - copy_clipmask_gc = XCreateGC(display, src_bitmap->clip_mask, - clip_gc_valuemask, &clip_gc_values); - } - - graphic_info[i].clip_mask = - XCreatePixmap(display, window->drawable, TILEX, TILEY, 1); - - src_pixmap = src_bitmap->clip_mask; - XCopyArea(display, src_pixmap, graphic_info[i].clip_mask, - copy_clipmask_gc, src_x, src_y, TILEX, TILEY, 0, 0); - - clip_gc_values.graphics_exposures = False; - clip_gc_values.clip_mask = graphic_info[i].clip_mask; - clip_gc_valuemask = GCGraphicsExposures | GCClipMask; - - graphic_info[i].clip_gc = - XCreateGC(display, window->drawable, clip_gc_valuemask, &clip_gc_values); -#endif } - -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - if (copy_clipmask_gc) - XFreeGC(display, copy_clipmask_gc); - - clipmasks_initialized = TRUE; -#endif } static void InitGraphicCompatibilityInfo() @@ -2102,6 +1979,54 @@ static void InitGraphicCompatibilityInfo() } } +#if 1 + InitGraphicCompatibilityInfo_Doors(); +#endif + +#if 0 + struct + { + int graphic; + int *width, *height; + boolean right_wing; + } + doors[] = + { + { IMG_DOOR_1_WING_LEFT, &door_1.width, &door_1.height, FALSE }, + { IMG_DOOR_1_WING_RIGHT, &door_1.width, &door_1.height, TRUE }, + { IMG_DOOR_2_WING_LEFT, &door_2.width, &door_2.height, FALSE }, + { IMG_DOOR_2_WING_RIGHT, &door_2.width, &door_2.height, TRUE }, + + { 0, NULL, NULL, FALSE } + }; + + for (i = 0; doors[i].graphic != 0; i++) + { + int graphic = doors[i].graphic; + int *width = doors[i].width; + int *height = doors[i].height; + boolean right_wing = doors[i].right_wing; + + struct FileInfo *fi = getImageListEntryFromImageID(graphic); + struct GraphicInfo *g = &graphic_info[graphic]; + + if (!fi->redefined) + { + if (*width != -1) + { + // correct start position for right wing of "standard" door graphic + if (right_wing) + g->src_x += g->width - *width; + + g->width = *width; + } + + if (*height != -1) + g->height = *height; + } + } +#endif + #if 0 for (i = 0; i < num_images; i++) { @@ -2496,6 +2421,10 @@ static void ReinitializeGraphics() { print_timestamp_init("ReinitializeGraphics"); +#if NEW_GAME_TILESIZE + InitGfxTileSizeInfo(game.tile_size, TILESIZE); +#endif + InitGraphicInfo(); /* graphic properties mapping */ print_timestamp_time("InitGraphicInfo"); InitElementGraphicInfo(); /* element game graphic mapping */ @@ -2525,6 +2454,8 @@ static void ReinitializeGraphics() print_timestamp_time("InitGadgets"); InitToons(); print_timestamp_time("InitToons"); + InitDoors(); + print_timestamp_time("InitDoors"); print_timestamp_done("ReinitializeGraphics"); } @@ -5059,7 +4990,8 @@ static void InitGlobal() /* create hash from graphic token list */ graphic_token_hash = newSetupFileHash(); for (graphic = 0, i = 0; image_config[i].token != NULL; i++) - if (strSuffix(image_config[i].value, ".pcx") || + if (strSuffix(image_config[i].value, ".png") || + strSuffix(image_config[i].value, ".pcx") || strSuffix(image_config[i].value, ".wav") || strEqual(image_config[i].value, UNDEFINED_FILENAME)) setHashEntry(graphic_token_hash, @@ -5126,7 +5058,7 @@ static void InitGlobal() global.fading_type = TYPE_ENTER_MENU; #endif - global.use_envelope_request = FALSE; /* !!! MOVE TO ARTWORK CONFIG !!! */ + global.use_envelope_request = FALSE; } void Execute_Command(char *command) @@ -5300,20 +5232,64 @@ void Execute_Command(char *command) } else if (strPrefix(command, "create images ")) { -#if defined(TARGET_SDL) global.create_images_dir = getStringCopy(&command[14]); if (access(global.create_images_dir, W_OK) != 0) Error(ERR_EXIT, "image target directory '%s' not found or not writable", global.create_images_dir); -#else - Error(ERR_EXIT, "command only available for SDL target"); -#endif } #if DEBUG -#if defined(TARGET_SDL) -#if !defined(TARGET_SDL2) +#if defined(TARGET_SDL2) + else if (strEqual(command, "SDL_ListModes")) + { + SDL_Init(SDL_INIT_VIDEO); + + int num_displays = SDL_GetNumVideoDisplays(); + + // check if there are any displays available + if (num_displays < 0) + { + printf("No displays available: %s\n", SDL_GetError()); + + exit(-1); + } + + for (i = 0; i < num_displays; i++) + { + int num_modes = SDL_GetNumDisplayModes(i); + int j; + + printf("Available display modes for display %d:\n", i); + + // check if there are any display modes available for this display + if (num_modes < 0) + { + printf("No display modes available for display %d: %s\n", + i, SDL_GetError()); + + exit(-1); + } + + for (j = 0; j < num_modes; j++) + { + SDL_DisplayMode mode; + + if (SDL_GetDisplayMode(i, j, &mode) < 0) + { + printf("Cannot get display mode %d for display %d: %s\n", + j, i, SDL_GetError()); + + exit(-1); + } + + printf("- %d x %d\n", mode.w, mode.h); + } + } + + exit(0); + } +#elif defined(TARGET_SDL) else if (strEqual(command, "SDL_ListModes")) { SDL_Rect **modes; @@ -5339,16 +5315,15 @@ void Execute_Command(char *command) } else { - printf("Available Modes:\n"); + printf("Available display modes:\n"); - for(i = 0; modes[i]; i++) - printf(" %d x %d\n", modes[i]->w, modes[i]->h); + for (i = 0; modes[i]; i++) + printf("- %d x %d\n", modes[i]->w, modes[i]->h); } exit(0); } #endif -#endif #endif else @@ -5545,11 +5520,16 @@ static void InitMixer() void InitGfxBuffers() { + /* create additional image buffers for double-buffering and cross-fading */ ReCreateBitmap(&bitmap_db_store, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_cross, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_field, FXSIZE, FYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_panel, DXSIZE, DYSIZE, DEFAULT_DEPTH); +#if 0 ReCreateBitmap(&bitmap_db_door, 3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH); +#endif + ReCreateBitmap(&bitmap_db_door_1, 3 * DXSIZE, DYSIZE, DEFAULT_DEPTH); + ReCreateBitmap(&bitmap_db_door_2, 3 * VXSIZE, VYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_toons, FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); /* initialize screen properties */ @@ -5558,6 +5538,7 @@ void InitGfxBuffers() bitmap_db_field); InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE); InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE); + InitGfxDoor3Info(EX, EY, EXSIZE, EYSIZE); InitGfxWindowInfo(WIN_XSIZE, WIN_YSIZE); InitGfxScrollbufferInfo(FXSIZE, FYSIZE); InitGfxClipRegion(FALSE, -1, -1, -1, -1); @@ -5612,27 +5593,7 @@ void InitGfx() if (filename_font_initial == NULL) /* should not happen */ Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL); -#if 1 InitGfxBuffers(); -#else - /* create additional image buffers for double-buffering and cross-fading */ - bitmap_db_store = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); - bitmap_db_cross = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); - bitmap_db_field = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH); - bitmap_db_panel = CreateBitmap(DXSIZE, DYSIZE, DEFAULT_DEPTH); - bitmap_db_door = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH); - bitmap_db_toons = CreateBitmap(FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); - - /* initialize screen properties */ - InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE, - REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE, - bitmap_db_field); - InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE); - InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE); - InitGfxWindowInfo(WIN_XSIZE, WIN_YSIZE); - InitGfxScrollbufferInfo(FXSIZE, FYSIZE); -#endif - InitGfxCustomArtworkInfo(); bitmap_font_initial = LoadCustomImage(filename_font_initial); @@ -5644,100 +5605,16 @@ void InitGfx() font_height = getFontHeight(FC_RED); - - - - - - - - -#if 0 - Delay(1000); - -#if 0 - Bitmap new_bitmap; - printf("::: MARK 1.1\n"); - new_bitmap.surface = SDL_LoadBMP("TEST.bmp"); - printf("::: MARK 1.2\n"); -#endif - - char *filename = getCustomImageFilename("RocksFontSmall.pcx"); - - printf("::: FILENAME == '%s'\n", filename); - -#if 1 - Bitmap *new_bitmap = LoadImage(filename); -#else -#if 1 - Bitmap *new_bitmap = CreateBitmapStruct(); - SDL_Surface *sdl_image_tmp; - sdl_image_tmp = IMG_Load(filename); - new_bitmap->surface = SDL_DisplayFormat(sdl_image_tmp); - -#else - SDL_Surface *sdl_image_tmp = IMG_Load(filename); - SDL_Surface *sdl_image = SDL_DisplayFormat(sdl_image_tmp); -#endif -#endif - - // SDL_Surface *image = SDL_LoadBMP("TEST.bmp"); - // SDL_LoadBMP("TEST.bmp"); - - // bitmap_font_initial->surface = SDL_LoadBMP("TEST.bmp"); - -#if 0 - printf("::: MARK 1 [%08x, %08xd]\n", - (unsigned int)bitmap_font_initial->surface, - (unsigned int)backbuffer->surface); -#endif - - // SDL_BlitSurface(image, NULL, backbuffer->surface, NULL); - // SDL_BlitSurface(new_bitmap.surface, NULL,backbuffer->surface, NULL); - SDL_BlitSurface(new_bitmap->surface, NULL,backbuffer->surface, NULL); - // SDL_BlitSurface(sdl_image, NULL,backbuffer->surface, NULL); - // SDL_BlitSurface(bitmap_font_initial->surface, NULL,backbuffer->surface, NULL); - -#if 0 - printf("::: MARK 1 [%08x, %08xd, %08xd]\n", - (unsigned int)bitmap_font_initial->surface, - (unsigned int)backbuffer->surface, - (unsigned int)image); -#endif - - extern SDL_Window *sdl_window; - SDL_UpdateWindowSurface(sdl_window); - -#if 1 #if 0 - SDL_BlitSurface(bitmap_font_initial->surface, NULL,backbuffer->surface, NULL); -#endif - // SDL_UpdateWindowSurface(sdl_window); - - Delay(1000); - exit(0); -#endif -#endif - - - - - - - - - - - -#if 1 - DrawInitText(getWindowTitleString(), 20, FC_YELLOW); + DrawInitTextAlways(getWindowTitleString(), 20, FC_YELLOW); #else - DrawInitText(getProgramInitString(), 20, FC_YELLOW); + DrawInitTextAlways(getProgramInitString(), 20, FC_YELLOW); #endif - DrawInitText(PROGRAM_COPYRIGHT_STRING, 50, FC_RED); - DrawInitText(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, FC_RED); + DrawInitTextAlways(PROGRAM_COPYRIGHT_STRING, 50, FC_RED); + DrawInitTextAlways(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, + FC_RED); - DrawInitText("Loading graphics", 120, FC_GREEN); + DrawInitTextAlways("Loading graphics", 120, FC_GREEN); #if 1 #if 1 @@ -6353,6 +6230,8 @@ void ReloadCustomArtwork(int force_reload) #endif print_timestamp_done("ReloadCustomArtwork"); + + LimitScreenUpdates(FALSE); } void KeyboardAutoRepeatOffUnlessAutoplay() @@ -6363,6 +6242,10 @@ void KeyboardAutoRepeatOffUnlessAutoplay() void DisplayExitMessage(char *format, va_list ap) { + // check if draw buffer and fonts for exit message are already available + if (drawto == NULL || font_initial[NUM_INITIAL_FONTS - 1].bitmap == NULL) + return; + int font_1 = FC_RED; int font_2 = FC_YELLOW; int font_3 = FC_BLUE; @@ -6552,6 +6435,24 @@ void OpenAll() DrawMainMenu(); InitNetworkServer(); + +#if 0 + Error(ERR_DEBUG, "::: SDL_GetBasePath() == '%s'", + SDL_GetBasePath()); + Error(ERR_DEBUG, "::: SDL_GetPrefPath() == '%s'", + SDL_GetPrefPath("artsoft", "rocksndiamonds")); +#if defined(PLATFORM_ANDROID) + Error(ERR_DEBUG, "::: SDL_AndroidGetInternalStoragePath() == '%s'", + SDL_AndroidGetInternalStoragePath()); + Error(ERR_DEBUG, "::: SDL_AndroidGetExternalStoragePath() == '%s'", + SDL_AndroidGetExternalStoragePath()); + Error(ERR_DEBUG, "::: SDL_AndroidGetExternalStorageState() == '%s'", + (SDL_AndroidGetExternalStorageState() == + SDL_ANDROID_EXTERNAL_STORAGE_READ ? "read" : + SDL_AndroidGetExternalStorageState() == + SDL_ANDROID_EXTERNAL_STORAGE_WRITE ? "write" : "not available")); +#endif +#endif } void CloseAllAndExit(int exit_value)