X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=f074cd944f70cd21405d7b6f003383d564c97bfc;hb=97baecdfcf386d972f6f8e6eec9ddfd3021ed7ed;hp=526154eac4c7f1e009c61a8f9e975e01add27b2b;hpb=7d07216e7f18ff03a650f53e0bfb372b07782ca2;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 526154ea..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) @@ -1864,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, @@ -2037,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(); @@ -2432,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); @@ -5041,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) @@ -6222,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();