X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=f074cd944f70cd21405d7b6f003383d564c97bfc;hb=97baecdfcf386d972f6f8e6eec9ddfd3021ed7ed;hp=89b4bc6a879ed15041830c7501d5c9da26d15feb;hpb=59ee473b86e7cbc1d9b09a3c22b0bbd3a410f16f;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 89b4bc6a..f074cd94 100644 --- a/src/init.c +++ b/src/init.c @@ -1334,6 +1334,29 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, if (parameter[GFX_ARG_HEIGHT] != ARG_UNDEFINED_VALUE) g->height = parameter[GFX_ARG_HEIGHT]; + if (src_bitmap) + { + if (g->width <= 0) + { + Error(ERR_INFO_LINE, "-"); + Error(ERR_WARN, "invalid value %d for '%s.width' (fallback done to %d)", + g->width, getTokenFromImageID(graphic), TILEX); + Error(ERR_INFO_LINE, "-"); + + g->width = TILEX; /* will be checked to be inside bitmap later */ + } + + if (g->height <= 0) + { + Error(ERR_INFO_LINE, "-"); + Error(ERR_WARN, "invalid value %d for '%s.height' (fallback done to %d)", + g->height, getTokenFromImageID(graphic), TILEY); + Error(ERR_INFO_LINE, "-"); + + g->height = TILEY; /* will be checked to be inside bitmap later */ + } + } + #if 0 /* optional zoom factor for scaling up the image to a larger size */ if (parameter[GFX_ARG_SCALE_UP_FACTOR] != ARG_UNDEFINED_VALUE) @@ -1501,6 +1524,12 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->class = parameter[GFX_ARG_CLASS]; if (parameter[GFX_ARG_STYLE] != ARG_UNDEFINED_VALUE) g->style = parameter[GFX_ARG_STYLE]; + + /* this is only used for drawing menu buttons and text */ + g->active_xoffset = parameter[GFX_ARG_ACTIVE_XOFFSET]; + g->active_yoffset = parameter[GFX_ARG_ACTIVE_YOFFSET]; + g->pressed_xoffset = parameter[GFX_ARG_PRESSED_XOFFSET]; + g->pressed_yoffset = parameter[GFX_ARG_PRESSED_YOFFSET]; } static void set_graphic_parameters(int graphic) @@ -1858,6 +1887,8 @@ static void InitGraphicInfo() IMG_BACKGROUND_INFO_LEVELSET, IMG_BACKGROUND_SETUP, IMG_BACKGROUND_DOOR, + IMG_BACKGROUND_TAPE, + IMG_BACKGROUND_PANEL, IMG_TITLESCREEN_INITIAL_1, IMG_TITLESCREEN_INITIAL_2, @@ -2031,6 +2062,60 @@ static void InitGraphicInfo() #endif } +static void InitGraphicCompatibilityInfo() +{ + struct FileInfo *fi_global_door = + getImageListEntryFromImageID(IMG_GLOBAL_DOOR); + int num_images = getImageListSize(); + int i; + + /* the following compatibility handling is needed for the following case: + versions up to 3.3.0.0 used one large bitmap "global.door" for various + graphics mainly used for door and panel graphics, like editor, tape and + in-game buttons with hard-coded bitmap positions and button sizes; as + these graphics now have individual definitions, redefining "global.door" + to change all these graphics at once like before does not work anymore + (because all those individual definitions still have their default values); + to solve this, remap all those individual definitions that are not + redefined to the new bitmap of "global.door" if it was redefined */ + + /* special compatibility handling if image "global.door" was redefined */ + if (fi_global_door->redefined) + { + for (i = 0; i < num_images; i++) + { + struct FileInfo *fi = getImageListEntryFromImageID(i); + + /* process only those images that still use the default settings */ + if (!fi->redefined) + { + /* process all images which default to same image as "global.door" */ + if (strEqual(fi->default_filename, fi_global_door->default_filename)) + { + // printf("::: special treatment needed for token '%s'\n", fi->token); + + graphic_info[i].bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap; + } + } + } + } + +#if 0 + for (i = 0; i < num_images; i++) + { + struct FileInfo *fi = getImageListEntryFromImageID(i); + + if (i == IMG_GLOBAL_DOOR) + { + printf("::: %s, %s, %d\n", + fi->default_filename, + fi->filename, + fi->redefined); + } + } +#endif +} + static void InitElementSoundInfo() { struct PropertyMapping *property_mapping = getSoundListPropertyMapping(); @@ -2426,6 +2511,9 @@ static void ReinitializeGraphics() InitGraphicInfo_EM(); /* graphic mapping for EM engine */ print_timestamp_time("InitGraphicInfo_EM"); + InitGraphicCompatibilityInfo(); + print_timestamp_time("InitGraphicCompatibilityInfo"); + SetMainBackgroundImage(IMG_BACKGROUND); print_timestamp_time("SetMainBackgroundImage"); SetDoorBackgroundImage(IMG_BACKGROUND_DOOR); @@ -5035,6 +5123,8 @@ static void InitGlobal() global.fading_status = GAME_MODE_MAIN; global.fading_type = TYPE_ENTER_MENU; #endif + + global.use_envelope_request = FALSE; /* !!! MOVE TO ARTWORK CONFIG !!! */ } void Execute_Command(char *command) @@ -5451,6 +5541,7 @@ static void InitMixer() void InitGfxBuffers() { + 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); @@ -5465,6 +5556,9 @@ void InitGfxBuffers() InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE); InitGfxWindowInfo(WIN_XSIZE, WIN_YSIZE); InitGfxScrollbufferInfo(FXSIZE, FYSIZE); + InitGfxClipRegion(FALSE, -1, -1, -1, -1); + + InitGfxBuffers_SP(); } void InitGfx() @@ -5517,6 +5611,7 @@ void InitGfx() 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); @@ -6211,11 +6306,18 @@ void OpenAll() InitSetup(); + print_timestamp_time("[init setup/config stuff (1)]"); + InitGameInfo(); + print_timestamp_time("[init setup/config stuff (2)]"); InitPlayerInfo(); + print_timestamp_time("[init setup/config stuff (3)]"); InitArtworkInfo(); /* needed before loading gfx, sound & music */ + print_timestamp_time("[init setup/config stuff (4)]"); InitArtworkConfig(); /* needed before forking sound child process */ + print_timestamp_time("[init setup/config stuff (5)]"); InitMixer(); + print_timestamp_time("[init setup/config stuff (6)]"); #if 0 InitCounter();