X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=f55818968233c212c9537b76b37b8ec2c1998acf;hb=e05dda5c8cc6687dcbc59e182a81aed627e262d0;hp=a25394b6f09f7e7b5615eed538d3e1dcebae42df;hpb=6d7ebf6db8a9a57f2e3e398da1d2f7d8d084523f;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index a25394b6..f5581896 100644 --- a/src/init.c +++ b/src/init.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * +* (c) 1995-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -295,7 +295,7 @@ void InitFontGraphicInfo() if (graphic_info[graphic].anim_frames < MIN_NUM_CHARS_PER_FONT) { graphic_info[graphic].anim_frames = DEFAULT_NUM_CHARS_PER_FONT; - graphic_info[graphic].anim_frames_per_line= DEFAULT_NUM_CHARS_PER_LINE; + graphic_info[graphic].anim_frames_per_line = DEFAULT_NUM_CHARS_PER_LINE; } /* copy font relevant information from graphics information */ @@ -1018,6 +1018,9 @@ static void set_graphic_parameters(int graphic) else graphic_info[graphic].anim_frames = 1; + if (graphic_info[graphic].anim_frames == 0) /* frames must be at least 1 */ + graphic_info[graphic].anim_frames = 1; + graphic_info[graphic].anim_frames_per_line = (parameter[GFX_ARG_FRAMES_PER_LINE] != ARG_UNDEFINED_VALUE ? parameter[GFX_ARG_FRAMES_PER_LINE] : anim_frames_per_line); @@ -1814,7 +1817,6 @@ boolean getBitfieldProperty(int *bitfield, int property_bit_nr, int element) return FALSE; } -#if 1 static void resolve_group_element(int group_element, int recursion_depth) { static int group_nr; @@ -1861,7 +1863,6 @@ static void resolve_group_element(int group_element, int recursion_depth) } } } -#endif void InitElementPropertiesStatic() { @@ -2904,6 +2905,7 @@ void InitElementPropertiesStatic() EL_EXPANDABLE_WALL_VERTICAL, EL_EXPANDABLE_WALL_ANY, EL_EXPANDABLE_WALL_GROWING, + EL_BD_EXPANDABLE_WALL, EL_BD_WALL, EL_SP_CHIP_SINGLE, EL_SP_CHIP_LEFT, @@ -2953,6 +2955,7 @@ void InitElementPropertiesStatic() EL_EXPANDABLE_WALL_HORIZONTAL, EL_EXPANDABLE_WALL_VERTICAL, EL_EXPANDABLE_WALL_ANY, + EL_BD_EXPANDABLE_WALL, EL_BD_WALL, EL_WALL_SLIPPERY, EL_EXIT_CLOSED, @@ -3532,8 +3535,8 @@ void InitElementPropertiesStatic() EL_INTERNAL_CASCADE_CHARS_ACTIVE, EL_INTERNAL_CASCADE_CE_ACTIVE, EL_INTERNAL_CASCADE_GE_ACTIVE, + EL_INTERNAL_CASCADE_REF_ACTIVE, EL_INTERNAL_CASCADE_USER_ACTIVE, - EL_INTERNAL_CASCADE_GENERIC_ACTIVE, EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE, -1 @@ -3552,13 +3555,26 @@ void InitElementPropertiesStatic() EL_INTERNAL_CASCADE_CHARS, EL_INTERNAL_CASCADE_CE, EL_INTERNAL_CASCADE_GE, + EL_INTERNAL_CASCADE_REF, EL_INTERNAL_CASCADE_USER, - EL_INTERNAL_CASCADE_GENERIC, EL_INTERNAL_CASCADE_DYNAMIC, -1 }; + static int ep_obsolete[] = + { + EL_PLAYER_OBSOLETE, + EL_KEY_OBSOLETE, + EL_EM_KEY_1_FILE_OBSOLETE, + EL_EM_KEY_2_FILE_OBSOLETE, + EL_EM_KEY_3_FILE_OBSOLETE, + EL_EM_KEY_4_FILE_OBSOLETE, + EL_ENVELOPE_OBSOLETE, + + -1 + }; + static struct { int *elements; @@ -3629,6 +3645,8 @@ void InitElementPropertiesStatic() { ep_editor_cascade_active, EP_EDITOR_CASCADE_ACTIVE }, { ep_editor_cascade_inactive, EP_EDITOR_CASCADE_INACTIVE }, + { ep_obsolete, EP_OBSOLETE }, + { NULL, -1 } }; @@ -3692,7 +3710,6 @@ void InitElementPropertiesEngine(int engine_version) property (which means that conditional property changes must be set to a reliable default value before) */ -#if 1 /* ---------- recursively resolve group elements ------------------------- */ for (i = 0; i < MAX_NUM_ELEMENTS; i++) @@ -3701,7 +3718,6 @@ void InitElementPropertiesEngine(int engine_version) for (i = 0; i < NUM_GROUP_ELEMENTS; i++) resolve_group_element(EL_GROUP_START + i, 0); -#endif /* set all special, combined or engine dependent element properties */ for (i = 0; i < MAX_NUM_ELEMENTS; i++) @@ -3904,28 +3920,14 @@ void InitElementPropertiesEngine(int engine_version) engine_version > VERSION_IDENT(2,0,1,0))); } - /* set default push delay values (corrected since version 3.0.7-1) */ - if (engine_version < VERSION_IDENT(3,0,7,1)) - { - game.default_push_delay_fixed = 2; - game.default_push_delay_random = 8; - } - else - { - game.default_push_delay_fixed = 8; - game.default_push_delay_random = 8; - } - - /* set uninitialized push delay values of custom elements in older levels */ - for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++) - { - int element = EL_CUSTOM_START + i; + /* this is needed because some graphics depend on element properties */ + if (game_status == GAME_MODE_PLAYING) + InitElementGraphicInfo(); +} - if (element_info[element].push_delay_fixed == -1) - element_info[element].push_delay_fixed = game.default_push_delay_fixed; - if (element_info[element].push_delay_random == -1) - element_info[element].push_delay_random = game.default_push_delay_random; - } +void InitElementPropertiesAfterLoading(int engine_version) +{ + int i; /* set some other uninitialized values of custom elements in older levels */ if (engine_version < VERSION_IDENT(3,1,0,0)) @@ -3940,19 +3942,6 @@ void InitElementPropertiesEngine(int engine_version) element_info[element].ignition_delay = 8; } } - -#if 0 - /* set element properties that were handled incorrectly in older levels */ - if (engine_version < VERSION_IDENT(3,1,0,0)) - { - SET_PROPERTY(EL_SP_SNIKSNAK, EP_DONT_COLLIDE_WITH, FALSE); - SET_PROPERTY(EL_SP_ELECTRON, EP_DONT_COLLIDE_WITH, FALSE); - } -#endif - - /* this is needed because some graphics depend on element properties */ - if (game_status == GAME_MODE_PLAYING) - InitElementGraphicInfo(); } static void InitGlobal() @@ -4147,6 +4136,45 @@ void Execute_Command(char *command) global.convert_level_nr = atoi(str_ptr); /* get level_nr value */ } } + +#if DEBUG +#if defined(TARGET_SDL) + else if (strEqual(command, "SDL_ListModes")) + { + SDL_Rect **modes; + int i; + + SDL_Init(SDL_INIT_VIDEO); + + /* get available fullscreen/hardware modes */ + modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE); + + /* check if there are any modes available */ + if (modes == NULL) + { + printf("No modes available!\n"); + + exit(-1); + } + + /* check if our resolution is restricted */ + if (modes == (SDL_Rect **)-1) + { + printf("All resolutions available.\n"); + } + else + { + printf("Available Modes:\n"); + + for(i = 0; modes[i]; i++) + printf(" %d x %d\n", modes[i]->w, modes[i]->h); + } + + exit(0); + } +#endif +#endif + else { Error(ERR_EXIT_HELP, "unrecognized command '%s'", command); @@ -4342,6 +4370,7 @@ void InitGfx() { char *filename_font_initial = NULL; Bitmap *bitmap_font_initial = NULL; + int font_height; int i, j; /* determine settings for initial font (for displaying startup messages) */ @@ -4382,8 +4411,9 @@ void InitGfx() Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL); /* create additional image buffers for double-buffering and cross-fading */ - bitmap_db_title = 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); /* initialize screen properties */ @@ -4401,8 +4431,11 @@ void InitGfx() InitFontGraphicInfo(); + font_height = getFontHeight(FC_RED); + DrawInitText(getProgramInitString(), 20, FC_YELLOW); DrawInitText(PROGRAM_COPYRIGHT_STRING, 50, FC_RED); + DrawInitText(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, FC_RED); DrawInitText("Loading graphics:", 120, FC_GREEN); } @@ -4681,11 +4714,7 @@ void ReloadCustomArtwork(int force_reload) if (redraw_screen) { -#if 1 RedrawBackground(); -#else - InitGfxBackground(); -#endif /* force redraw of (open or closed) door graphics */ SetDoorState(DOOR_OPEN_ALL); @@ -4757,6 +4786,10 @@ void OpenAll() InitGfxBackground(); +#if 1 + em_open_all(); +#endif + if (global.autoplay_leveldir) { AutoPlayTape(); @@ -4770,10 +4803,6 @@ void OpenAll() game_status = GAME_MODE_MAIN; -#if 1 - em_open_all(); -#endif - DrawMainMenu(); InitNetworkServer(); @@ -4800,5 +4829,8 @@ void CloseAllAndExit(int exit_value) CloseVideoDisplay(); ClosePlatformDependentStuff(); + if (exit_value != 0) + NotifyUserAboutErrorFile(); + exit(exit_value); }