X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=c3c14af2e682f984e3034b7a011c12c363f24e59;hb=e3a53d28634c52a0b1de6d0609de911e5d01c344;hp=8f2fdf7d61696fa9e6623c6ecaedbe8f3129d78c;hpb=c4d9b5e489f38f7e6f42039cce9bca0ecafc0992;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 8f2fdf7d..c3c14af2 100644 --- a/src/init.c +++ b/src/init.c @@ -329,6 +329,14 @@ void SetBitmaps_EM(Bitmap **em_bitmap) } #endif +#if 1 +/* !!! FIX THIS (CHANGE TO USING NORMAL ELEMENT GRAPHIC DEFINITIONS) !!! */ +void SetBitmaps_SP(Bitmap **sp_bitmap) +{ + *sp_bitmap = graphic_info[IMG_SP_OBJECTS].bitmap; +} +#endif + static int getFontBitmapID(int font_nr) { int special = -1; @@ -344,6 +352,15 @@ static int getFontBitmapID(int font_nr) special = GFX_SPECIAL_ARG_DOOR; #endif +#if 0 + if (special != -1) + { + printf("%s%s\n", + font_info[font_nr].token_name, + special_suffix_info[special].suffix); + } +#endif + if (special != -1) return font_info[font_nr].special_bitmap_id[special]; else @@ -3144,10 +3161,16 @@ void InitElementPropertiesStatic() EL_SOKOBAN_FIELD_EMPTY, EL_EXIT_OPEN, EL_EM_EXIT_OPEN, +#if 1 + EL_EM_EXIT_OPENING, +#endif EL_SP_EXIT_OPEN, EL_SP_EXIT_OPENING, EL_STEEL_EXIT_OPEN, EL_EM_STEEL_EXIT_OPEN, +#if 1 + EL_EM_STEEL_EXIT_OPENING, +#endif EL_GATE_1, EL_GATE_2, EL_GATE_3, @@ -4849,6 +4872,14 @@ void InitElementPropertiesEngine(int engine_version) -1 }; + static int ep_em_explodes_by_fire[] = + { + EL_EM_DYNAMITE, + EL_EM_DYNAMITE_ACTIVE, + EL_MOLE, + -1 + }; + /* special EM style gems behaviour */ for (i = 0; ep_em_slippery_wall[i] != -1; i++) SET_PROPERTY(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL, @@ -4858,6 +4889,11 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(EL_EXPANDABLE_WALL_GROWING, EP_EM_SLIPPERY_WALL, (level.em_slippery_gems && engine_version > VERSION_IDENT(2,0,1,0))); + + /* special EM style explosion behaviour regarding chain reactions */ + for (i = 0; ep_em_explodes_by_fire[i] != -1; i++) + SET_PROPERTY(ep_em_explodes_by_fire[i], EP_EXPLODES_BY_FIRE, + level.em_explodes_by_fire); } /* this is needed because some graphics depend on element properties */ @@ -4884,6 +4920,18 @@ void InitElementPropertiesAfterLoading(int engine_version) } } +void InitElementPropertiesGfxElement() +{ + int i; + + for (i = 0; i < MAX_NUM_ELEMENTS; i++) + { + struct ElementInfo *ei = &element_info[i]; + + ei->gfx_element = (ei->use_gfx_element ? ei->gfx_element_initial : i); + } +} + static void InitGlobal() { int graphic; @@ -5084,7 +5132,7 @@ void Execute_Command(char *command) exit(0); } - else if (strncmp(command, "dump level ", 11) == 0) + else if (strPrefix(command, "dump level ")) { char *filename = &command[11]; @@ -5096,7 +5144,7 @@ void Execute_Command(char *command) exit(0); } - else if (strncmp(command, "dump tape ", 10) == 0) + else if (strPrefix(command, "dump tape ")) { char *filename = &command[10]; @@ -5108,7 +5156,7 @@ void Execute_Command(char *command) exit(0); } - else if (strncmp(command, "autoplay ", 9) == 0) + else if (strPrefix(command, "autoplay ")) { char *str_ptr = getStringCopy(&command[9]); /* read command parameters */ @@ -5144,13 +5192,15 @@ void Execute_Command(char *command) str_ptr++; } } - else if (strncmp(command, "convert ", 8) == 0) + else if (strPrefix(command, "convert ") || + strPrefix(command, "convert_special_1 ")) { char *str_copy = getStringCopy(&command[8]); char *str_ptr = strchr(str_copy, ' '); global.convert_leveldir = str_copy; global.convert_level_nr = -1; + global.convert_mode_special_1 = strPrefix(command, "convert_special_1 "); if (str_ptr != NULL) /* level number follows */ { @@ -5158,7 +5208,7 @@ void Execute_Command(char *command) global.convert_level_nr = atoi(str_ptr); /* get level_nr value */ } } - else if (strncmp(command, "create images ", 14) == 0) + else if (strPrefix(command, "create images ")) { #if defined(TARGET_SDL) global.create_images_dir = getStringCopy(&command[14]); @@ -5460,6 +5510,7 @@ void InitGfx() bitmap_db_field); InitGfxDoor1Info(DX, DY, DXSIZE, DYSIZE); InitGfxDoor2Info(VX, VY, VXSIZE, VYSIZE); + InitGfxWindowInfo(WIN_XSIZE, WIN_YSIZE); InitGfxScrollbufferInfo(FXSIZE, FYSIZE); InitGfxCustomArtworkInfo(); @@ -6150,6 +6201,7 @@ void OpenAll() InitElementPropertiesStatic(); InitElementPropertiesEngine(GAME_VERSION_ACTUAL); + InitElementPropertiesGfxElement(); print_timestamp_time("[post-video]"); @@ -6181,6 +6233,10 @@ void OpenAll() em_open_all(); #endif +#if 1 + sp_open_all(); +#endif + if (global.autoplay_leveldir) { AutoPlayTape(); @@ -6228,6 +6284,10 @@ void CloseAllAndExit(int exit_value) em_close_all(); #endif +#if 1 + sp_close_all(); +#endif + FreeAllImages(); #if defined(TARGET_SDL)