X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=38aec9ae656aab1e178dc3bd8fb376a431eb44ca;hb=87f531efe267aa3d6a27cc3a68c68c1a4df7b18b;hp=1f724a11a8088294c6c0781013a7202c5e60d909;hpb=b81f28710057e7d84528b65b92e9b4d1aaadab6c;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 1f724a11..38aec9ae 100644 --- a/src/init.c +++ b/src/init.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2001 Artsoft Entertainment * +* (c) 1995-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -105,8 +105,6 @@ void OpenAll(void) InitGfxBackground(); InitToons(); - InitGameEngine(); - DrawMainMenu(); InitNetworkServer(); @@ -180,8 +178,12 @@ static void InitMixer() static void InitSound() { - InitReloadSounds(artwork.snd_current->name); - InitReloadMusic(artwork.mus_current->name); + /* load custom sounds and music */ + InitReloadSounds(artwork.snd_current->identifier); + InitReloadMusic(artwork.mus_current->identifier); + + /* initialize sound effect lookup table for element actions */ + InitGameSound(); } static void InitTileClipmasks() @@ -409,22 +411,86 @@ void InitGfxBackground() void ReloadCustomArtwork() { - static char *leveldir_current_name = NULL; + static char *leveldir_current_identifier = NULL; static boolean last_override_level_graphics = FALSE; static boolean last_override_level_sounds = FALSE; static boolean last_override_level_music = FALSE; - if (leveldir_current_name != leveldir_current->name) + /* identifier for new artwork; default: artwork configured in setup */ + char *gfx_new_identifier = artwork.gfx_current->identifier; + char *snd_new_identifier = artwork.snd_current->identifier; + char *mus_new_identifier = artwork.mus_current->identifier; + +#if 0 + printf("graphics --> '%s' ('%s')\n", + artwork.gfx_current_identifier, artwork.gfx_current->filename); + printf("sounds --> '%s' ('%s')\n", + artwork.snd_current_identifier, artwork.snd_current->filename); + printf("music --> '%s' ('%s')\n", + artwork.mus_current_identifier, artwork.mus_current->filename); +#endif + + /* leveldir_current may be invalid (level group, parent link) */ + if (!validLevelSeries(leveldir_current)) + return; + +#if 0 + printf("--> '%s'\n", artwork.gfx_current_identifier); +#endif + + /* when a new level series was selected, check if there was a change + in custom artwork stored in level series directory */ + if (leveldir_current_identifier != leveldir_current->identifier) { - /* force reload of custom artwork after new level series was selected */ - artwork.graphics_set_current_name = NULL; - artwork.sounds_set_current_name = NULL; - artwork.music_set_current_name = NULL; + char *identifier_old = leveldir_current_identifier; + char *identifier_new = leveldir_current->identifier; + + if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_old) != + getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new)) + gfx_new_identifier = identifier_new; + if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_old) != + getTreeInfoFromIdentifier(artwork.snd_first, identifier_new)) + snd_new_identifier = identifier_new; + if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new) != + getTreeInfoFromIdentifier(artwork.mus_first, identifier_new)) + artwork.mus_current_identifier = NULL; + + leveldir_current_identifier = leveldir_current->identifier; + } - leveldir_current_name = leveldir_current->name; + /* custom level artwork configured in level series configuration file + always overrides custom level artwork stored in level series directory + and (level independant) custom artwork configured in setup menue + (the path entry is needed to send it to the sound child process) */ + if (leveldir_current->graphics_set != NULL) + { + if (leveldir_current->graphics_path) + free(leveldir_current->graphics_path); + leveldir_current->graphics_path = NULL; + leveldir_current->graphics_path = + getStringCopy(getLevelArtworkDir(artwork.gfx_first)); + gfx_new_identifier = leveldir_current->graphics_set; + } + if (leveldir_current->sounds_set != NULL) + { + if (leveldir_current->sounds_path) + free(leveldir_current->sounds_path); + leveldir_current->sounds_path = NULL; + leveldir_current->sounds_path = + getStringCopy(getLevelArtworkDir(artwork.snd_first)); + snd_new_identifier = leveldir_current->sounds_set; + } + if (leveldir_current->music_set != NULL) + { + if (leveldir_current->music_path) + free(leveldir_current->music_path); + leveldir_current->music_path = NULL; + leveldir_current->music_path = + getStringCopy(getLevelArtworkDir(artwork.mus_first)); + mus_new_identifier = leveldir_current->music_set; } - if (artwork.graphics_set_current_name != artwork.gfx_current->name || + if (strcmp(artwork.gfx_current_identifier, gfx_new_identifier) != 0 || last_override_level_graphics != setup.override_level_graphics) { int i; @@ -441,29 +507,35 @@ void ReloadCustomArtwork() InitTileClipmasks(); InitGfxBackground(); - SetDoorState(DOOR_OPEN_1 | DOOR_CLOSE_2); + /* force redraw of (open or closed) door graphics */ + SetDoorState(DOOR_OPEN_ALL); + CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY); - artwork.graphics_set_current_name = artwork.gfx_current->name; + artwork.gfx_current_identifier = gfx_new_identifier; last_override_level_graphics = setup.override_level_graphics; } - if (artwork.sounds_set_current_name != artwork.snd_current->name || + if (strcmp(artwork.snd_current_identifier, snd_new_identifier) != 0 || last_override_level_sounds != setup.override_level_sounds) { - InitReloadSounds(artwork.snd_current->name); + InitReloadSounds(snd_new_identifier); - artwork.sounds_set_current_name = artwork.snd_current->name; + artwork.snd_current_identifier = snd_new_identifier; last_override_level_sounds = setup.override_level_sounds; } - if (artwork.music_set_current_name != artwork.mus_current->name || + if (strcmp(artwork.mus_current_identifier, mus_new_identifier) != 0 || last_override_level_music != setup.override_level_music) { - InitReloadMusic(artwork.mus_current->name); + InitReloadMusic(mus_new_identifier); - artwork.music_set_current_name = artwork.mus_current->name; + artwork.mus_current_identifier = mus_new_identifier; last_override_level_music = setup.override_level_music; } + +#if 0 + printf("<-- '%s'\n", artwork.gfx_current_identifier); +#endif } void InitGadgets() @@ -530,9 +602,13 @@ void InitElementProperties() EL_EM_GATE_3X, EL_EM_GATE_4X, EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_OPENING, EL_SWITCHGATE_CLOSED, + EL_SWITCHGATE_CLOSING, EL_TIMEGATE_OPEN, + EL_TIMEGATE_OPENING, EL_TIMEGATE_CLOSED, + EL_TIMEGATE_CLOSING, EL_TUBE_CROSS, EL_TUBE_VERTICAL, EL_TUBE_HORIZONTAL, @@ -571,11 +647,15 @@ void InitElementProperties() EL_QUICKSAND_EMPTYING, EL_MAGIC_WALL_OFF, EL_MAGIC_WALL_EMPTY, + EL_MAGIC_WALL_EMPTYING, + EL_MAGIC_WALL_FILLING, EL_MAGIC_WALL_FULL, EL_MAGIC_WALL_DEAD, EL_MAGIC_WALL_BD_OFF, EL_MAGIC_WALL_BD_EMPTY, + EL_MAGIC_WALL_BD_EMPTYING, EL_MAGIC_WALL_BD_FULL, + EL_MAGIC_WALL_BD_FILLING, EL_MAGIC_WALL_BD_DEAD, EL_LIFE, EL_LIFE_ASYNC, @@ -601,6 +681,7 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_SP_TERMINAL, + EL_SP_TERMINAL_ACTIVE, EL_SP_EXIT, EL_INVISIBLE_STEEL, EL_BELT1_SWITCH_LEFT, @@ -649,6 +730,30 @@ void InitElementProperties() EL_CRYSTAL, EL_WALL_PEARL, EL_WALL_CRYSTAL, + EL_PFORTE1, + EL_PFORTE2, + EL_PFORTE3, + EL_PFORTE4, + EL_PFORTE1X, + EL_PFORTE2X, + EL_PFORTE3X, + EL_PFORTE4X, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_OPENING, + EL_SWITCHGATE_CLOSED, + EL_SWITCHGATE_CLOSING, + EL_TIMEGATE_OPEN, + EL_TIMEGATE_OPENING, + EL_TIMEGATE_CLOSED, + EL_TIMEGATE_CLOSING, EL_TUBE_CROSS, EL_TUBE_VERTICAL, EL_TUBE_HORIZONTAL, @@ -672,26 +777,6 @@ void InitElementProperties() EL_BADEWANNE3, EL_BADEWANNE4, EL_BADEWANNE5, - EL_PFORTE1, - EL_PFORTE2, - EL_PFORTE3, - EL_PFORTE4, - EL_PFORTE1X, - EL_PFORTE2X, - EL_PFORTE3X, - EL_PFORTE4X, - EL_EM_GATE_1, - EL_EM_GATE_2, - EL_EM_GATE_3, - EL_EM_GATE_4, - EL_EM_GATE_1X, - EL_EM_GATE_2X, - EL_EM_GATE_3X, - EL_EM_GATE_4X, - EL_SWITCHGATE_OPEN, - EL_SWITCHGATE_CLOSED, - EL_TIMEGATE_OPEN, - EL_TIMEGATE_CLOSED, EL_SP_HARD_GRAY, EL_SP_HARD_GREEN, EL_SP_HARD_BLUE, @@ -736,6 +821,30 @@ void InitElementProperties() EL_EMC_STEEL_WALL_3, EL_EMC_STEEL_WALL_4, EL_CRYSTAL, + EL_PFORTE1, + EL_PFORTE2, + EL_PFORTE3, + EL_PFORTE4, + EL_PFORTE1X, + EL_PFORTE2X, + EL_PFORTE3X, + EL_PFORTE4X, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_OPENING, + EL_SWITCHGATE_CLOSED, + EL_SWITCHGATE_CLOSING, + EL_TIMEGATE_OPEN, + EL_TIMEGATE_OPENING, + EL_TIMEGATE_CLOSED, + EL_TIMEGATE_CLOSING, EL_TUBE_CROSS, EL_TUBE_VERTICAL, EL_TUBE_HORIZONTAL, @@ -849,6 +958,7 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_SP_TERMINAL, + EL_SP_TERMINAL_ACTIVE, EL_SP_EXIT, EL_INVISIBLE_STEEL, EL_STEEL_SLANTED, @@ -1626,19 +1736,39 @@ void InitElementProperties() void Execute_Debug_Command(char *command) { - if (strcmp(command, "create soundinfo.conf") == 0) + if (strcmp(command, "create graphicsinfo.conf") == 0) + { + printf("# (Currently only \"name\" and \"sort_priority\" recognized.)\n"); + printf("\n"); + printf("%s\n", getFormattedSetupEntry("name", "Classic Graphics")); + printf("\n"); + printf("%s\n", getFormattedSetupEntry("sort_priority", "100")); + } + else if (strcmp(command, "create soundsinfo.conf") == 0) { int i; printf("# You can configure additional/alternative sound effects here\n"); printf("# (The sounds below are default and therefore commented out.)\n"); printf("\n"); + printf("%s\n", getFormattedSetupEntry("name", "Classic Sounds")); + printf("\n"); + printf("%s\n", getFormattedSetupEntry("sort_priority", "100")); + printf("\n"); for (i=0; i