X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=e451d99ef862f9cd2d09d081c1ce136e0f8483db;hb=refs%2Fheads%2Fmaster-next-major-release;hp=cbd5841d0cb1cd000a02edfcf52b47e9364f272a;hpb=7c72197c745ed62e803f50b6e2d1b55d08479917;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index cbd5841d..e451d99e 100644 --- a/src/init.c +++ b/src/init.c @@ -244,6 +244,10 @@ static void InitElementSmallImagesScaledUp(int graphic) { struct GraphicInfo *g = &graphic_info[graphic]; + // if graphic was cloned, scale cloned graphic + if (graphic_info[graphic].clone_from != -1) + graphic = graphic_info[graphic].clone_from; + // create small and game tile sized bitmaps (and scale up, if needed) CreateImageWithSmallImages(graphic, g->scale_up_factor, g->tile_size); } @@ -307,6 +311,10 @@ static void InitScaledImagesScaledUp(int graphic) { struct GraphicInfo *g = &graphic_info[graphic]; + // if graphic was cloned, scale cloned graphic + if (graphic_info[graphic].clone_from != -1) + graphic = graphic_info[graphic].clone_from; + ScaleImage(graphic, g->scale_up_factor); } @@ -1147,6 +1155,8 @@ static void InitElementGraphicInfo(void) // look for special default action graphic (classic game specific) if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].graphic[act] != -1) default_action_graphic = element_info[EL_BD_DEFAULT].graphic[act]; + if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].graphic[act] != -1) + default_action_graphic = element_info[EL_BDX_DEFAULT].graphic[act]; if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].graphic[act] != -1) default_action_graphic = element_info[EL_SP_DEFAULT].graphic[act]; if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].graphic[act] != -1) @@ -1156,6 +1166,8 @@ static void InitElementGraphicInfo(void) if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].crumbled[act] != -1) default_action_crumbled = element_info[EL_BD_DEFAULT].crumbled[act]; + if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].crumbled[act] != -1) + default_action_crumbled = element_info[EL_BDX_DEFAULT].crumbled[act]; if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].crumbled[act] != -1) default_action_crumbled = element_info[EL_SP_DEFAULT].crumbled[act]; if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].crumbled[act] != -1) @@ -1271,6 +1283,19 @@ static void InitElementSpecialGraphicInfo(void) action = -1; } + // for BD effect editor graphics, replace element with effect element, if exists + if (action != -1 && special == GFX_SPECIAL_ARG_EDITOR) + { + int element_bd = map_element_RND_to_BD_effect(element, action); + int element_ef = map_element_BD_to_RND_cave(element_bd); + + if (element_ef != EL_UNKNOWN) + { + element = element_ef; + action = -1; + } + } + if (element >= MAX_NUM_ELEMENTS) continue; @@ -1550,7 +1575,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, // optionally, the second movement tile can be specified as start tile if (parameter[GFX_ARG_2ND_SWAP_TILES] != ARG_UNDEFINED_VALUE) - g->swap_double_tiles= parameter[GFX_ARG_2ND_SWAP_TILES]; + g->swap_double_tiles = parameter[GFX_ARG_2ND_SWAP_TILES]; // automatically determine correct number of frames, if not defined if (parameter[GFX_ARG_FRAMES] != ARG_UNDEFINED_VALUE) @@ -2145,6 +2170,8 @@ static void InitElementSoundInfo(void) // look for special default action sound (classic game specific) if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].sound[act] != -1) default_action_sound = element_info[EL_BD_DEFAULT].sound[act]; + if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].sound[act] != -1) + default_action_sound = element_info[EL_BDX_DEFAULT].sound[act]; if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].sound[act] != -1) default_action_sound = element_info[EL_SP_DEFAULT].sound[act]; if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].sound[act] != -1) @@ -2446,6 +2473,8 @@ static void ReinitializeGraphics(void) InitImageTextures(); // create textures for certain images print_timestamp_time("InitImageTextures"); + InitGraphicInfo_BD(); // graphic mapping for BD engine + print_timestamp_time("InitGraphicInfo_BD"); InitGraphicInfo_EM(); // graphic mapping for EM engine print_timestamp_time("InitGraphicInfo_EM"); @@ -4276,6 +4305,17 @@ void InitElementPropertiesStatic(void) EL_AMOEBA_DRY, EL_AMOEBA_FULL, EL_BD_AMOEBA, + EL_BDX_AMOEBA_1, + EL_BDX_AMOEBA_2, + EL_BDX_SLIME, + EL_BDX_ACID, + EL_BDX_BITER, + EL_BDX_BITER_RIGHT, + EL_BDX_BITER_UP, + EL_BDX_BITER_LEFT, + EL_BDX_BITER_DOWN, + EL_BDX_BLADDER, + EL_BDX_NUT, EL_EMC_MAGIC_BALL, EL_EMC_ANDROID, EL_MM_GRAY_BALL, @@ -4571,7 +4611,8 @@ void InitElementPropertiesStatic(void) static int ep_editor_cascade_active[] = { EL_INTERNAL_CASCADE_BD_ACTIVE, - EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE, + EL_INTERNAL_CASCADE_BDX_ACTIVE, + EL_INTERNAL_CASCADE_BDX_EFFECTS_ACTIVE, EL_INTERNAL_CASCADE_EM_ACTIVE, EL_INTERNAL_CASCADE_EMC_ACTIVE, EL_INTERNAL_CASCADE_RND_ACTIVE, @@ -4596,7 +4637,8 @@ void InitElementPropertiesStatic(void) static int ep_editor_cascade_inactive[] = { EL_INTERNAL_CASCADE_BD, - EL_INTERNAL_CASCADE_BD_NATIVE, + EL_INTERNAL_CASCADE_BDX, + EL_INTERNAL_CASCADE_BDX_EFFECTS, EL_INTERNAL_CASCADE_EM, EL_INTERNAL_CASCADE_EMC, EL_INTERNAL_CASCADE_RND, @@ -5154,6 +5196,7 @@ static void InitGlobal(void) global.autoplay_leveldir = NULL; global.patchtapes_leveldir = NULL; global.convert_leveldir = NULL; + global.dumplevelset_leveldir = NULL; global.dumplevel_leveldir = NULL; global.dumptape_leveldir = NULL; global.create_sketch_images_dir = NULL; @@ -5265,6 +5308,23 @@ static void Execute_Command(char *command) exit(0); } + else if (strPrefix(command, "dump levelset ")) + { + char *filename = &command[14]; + + if (fileExists(filename) && isLevelsetFilename_BD(filename)) + { + DumpLevelsetFromFilename_BD(filename); + + exit(0); + } + + char *leveldir = getStringCopy(filename); // read command parameters + + global.dumplevelset_leveldir = leveldir; + + program.headless = TRUE; + } else if (strPrefix(command, "dump level ")) { char *filename = &command[11]; @@ -5727,6 +5787,7 @@ void InitGfxBuffers(void) // required if door size definitions have changed InitGraphicCompatibilityInfo_Doors(); + InitGfxBuffers_BD(); InitGfxBuffers_EM(); InitGfxBuffers_SP(); InitGfxBuffers_MM(); @@ -6242,9 +6303,9 @@ static void InitOverrideArtwork(void) gfx.override_level_music = FALSE; // now check if this level set has definitions for custom elements - if (setup.override_level_graphics == AUTO || - setup.override_level_sounds == AUTO || - setup.override_level_music == AUTO) + if (setup.override_level_graphics == STATE_AUTO || + setup.override_level_sounds == STATE_AUTO || + setup.override_level_music == STATE_AUTO) redefined_ce_found = (CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_GRAPHICS) | CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_SOUNDS) | @@ -6257,14 +6318,14 @@ static void InitOverrideArtwork(void) if (redefined_ce_found) { - // this level set has CE definitions: change "AUTO" to "FALSE" + // this level set has CE definitions: change "MODE_AUTO" to "FALSE" gfx.override_level_graphics = (setup.override_level_graphics == TRUE); gfx.override_level_sounds = (setup.override_level_sounds == TRUE); gfx.override_level_music = (setup.override_level_music == TRUE); } else { - // this level set has no CE definitions: change "AUTO" to "TRUE" + // this level set has no CE definitions: change "MODE_AUTO" to "TRUE" gfx.override_level_graphics = (setup.override_level_graphics != FALSE); gfx.override_level_sounds = (setup.override_level_sounds != FALSE); gfx.override_level_music = (setup.override_level_music != FALSE); @@ -6628,6 +6689,7 @@ void OpenAll(void) InitGfxBackground(); + bd_open_all(); em_open_all(); sp_open_all(); mm_open_all(); @@ -6647,6 +6709,11 @@ void OpenAll(void) ConvertLevels(); return; } + else if (global.dumplevelset_leveldir) + { + DumpLevelset(); + return; + } else if (global.dumplevel_leveldir) { DumpLevels(); @@ -6685,6 +6752,9 @@ void OpenAll(void) DrawMainMenu(); + if (options.drop_file != NULL) + PushDropEvent(options.drop_file); + #if 0 Debug("internal:path", "SDL_GetBasePath() == '%s'", SDL_GetBasePath()); @@ -6746,6 +6816,7 @@ void CloseAllAndExit(int exit_value) FreeAllMusic(); CloseAudio(); // called after freeing sounds (needed for SDL) + bd_close_all(); em_close_all(); sp_close_all();