X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=770d88c82c9818512a5ee2eb2f48795a9dd0831d;hb=00ca5a80f980e039d78ed670e88f88a85d222461;hp=eac5ad1f598e2e75411105c2f65216e6ba71fe72;hpb=617eef24736030f166d7bd67182d279d46590e49;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index eac5ad1f..770d88c8 100644 --- a/src/init.c +++ b/src/init.c @@ -21,7 +21,7 @@ #include "files.h" #include "network.h" #include "netserv.h" -#include "cartoons.h" +#include "anim.h" #include "config.h" #include "conf_e2g.c" /* include auto-generated data structure definitions */ @@ -654,6 +654,55 @@ void InitGlobalAnimSoundInfo() #endif } +void InitGlobalAnimMusicInfo() +{ + struct PropertyMapping *property_mapping = getMusicListPropertyMapping(); + int num_property_mappings = getMusicListPropertyMappingSize(); + int i, j, k; + + /* always start with reliable default values (no global animation music) */ + for (i = 0; i < NUM_GLOBAL_ANIM_TOKENS; i++) + for (j = 0; j < NUM_GLOBAL_ANIM_PARTS_ALL; j++) + for (k = 0; k < NUM_SPECIAL_GFX_ARGS; k++) + global_anim_info[i].music[j][k] = MUS_UNDEFINED; + + /* initialize global animation music definitions from dynamic configuration */ + for (i = 0; i < num_property_mappings; i++) + { + int anim_nr = property_mapping[i].base_index - NUM_MUSIC_PREFIXES; + int part_nr = property_mapping[i].ext1_index - ACTION_PART_1; + int special = property_mapping[i].ext2_index; + int music = property_mapping[i].artwork_index; + + // music uses control definition; map it to position of graphic (artwork) + anim_nr -= GLOBAL_ANIM_ID_CONTROL_FIRST; + + if (anim_nr < 0 || anim_nr >= NUM_GLOBAL_ANIM_TOKENS) + continue; + + /* set animation part to base part, if not specified */ + if (!IS_GLOBAL_ANIM_PART(part_nr)) + part_nr = GLOBAL_ANIM_ID_PART_BASE; + + /* set animation screen to default, if not specified */ + if (!IS_SPECIAL_GFX_ARG(special)) + special = GFX_SPECIAL_ARG_DEFAULT; + + global_anim_info[anim_nr].music[part_nr][special] = music; + } + +#if 0 + printf("::: InitGlobalAnimMusicInfo\n"); + + for (i = 0; i < NUM_GLOBAL_ANIMS; i++) + for (j = 0; j < NUM_GLOBAL_ANIM_PARTS_ALL; j++) + for (k = 0; k < NUM_SPECIAL_GFX_ARGS; k++) + if (global_anim_info[i].music[j][k] != MUS_UNDEFINED) + printf("::: - anim %d, part %d, mode %d => %d\n", + i, j, k, global_anim_info[i].music[j][k]); +#endif +} + void InitElementGraphicInfo() { struct PropertyMapping *property_mapping = getImageListPropertyMapping(); @@ -1991,8 +2040,8 @@ static void InitGameModeMusicInfo() for (i = 0; i < num_property_mappings; i++) { int prefix = property_mapping[i].base_index; - int gamemode = property_mapping[i].ext1_index; - int level = property_mapping[i].ext2_index; + int gamemode = property_mapping[i].ext2_index; + int level = property_mapping[i].ext3_index; int music = property_mapping[i].artwork_index; if (prefix < 0 || prefix >= NUM_MUSIC_PREFIXES) @@ -2121,8 +2170,6 @@ static void ReinitializeGraphics() InitGadgets(); print_timestamp_time("InitGadgets"); - InitToons(); - print_timestamp_time("InitToons"); InitDoors(); print_timestamp_time("InitDoors"); @@ -2143,6 +2190,7 @@ static void ReinitializeMusic() { InitMusicInfo(); /* music properties mapping */ InitGameModeMusicInfo(); /* game mode music mapping */ + InitGlobalAnimMusicInfo(); /* global animation music settings */ } static int get_special_property_bit(int element, int property_bit_nr) @@ -4991,7 +5039,8 @@ static void InitArtworkConfig() NUM_GLOBAL_ANIM_TOKENS + 1]; static char *sound_id_prefix[2 * MAX_NUM_ELEMENTS + NUM_GLOBAL_ANIM_TOKENS + 1]; - static char *music_id_prefix[NUM_MUSIC_PREFIXES + 1]; + static char *music_id_prefix[NUM_MUSIC_PREFIXES + + NUM_GLOBAL_ANIM_TOKENS + 1]; static char *action_id_suffix[NUM_ACTIONS + 1]; static char *direction_id_suffix[NUM_DIRECTIONS_FULL + 1]; static char *special_id_suffix[NUM_SPECIAL_GFX_ARGS + 1]; @@ -5067,7 +5116,10 @@ static void InitArtworkConfig() for (i = 0; i < NUM_MUSIC_PREFIXES; i++) music_id_prefix[i] = music_prefix_info[i].prefix; - music_id_prefix[NUM_MUSIC_PREFIXES] = NULL; + for (i = 0; i < NUM_GLOBAL_ANIM_TOKENS; i++) + music_id_prefix[NUM_MUSIC_PREFIXES + i] = + global_anim_info[i].token_name; + music_id_prefix[NUM_MUSIC_PREFIXES + NUM_GLOBAL_ANIM_TOKENS] = NULL; for (i = 0; i < NUM_ACTIONS; i++) action_id_suffix[i] = element_action_info[i].suffix; @@ -5092,8 +5144,8 @@ static void InitArtworkConfig() sound_id_prefix, action_id_suffix, dummy, special_id_suffix, ignore_sound_tokens); InitMusicList(music_config, NUM_MUSIC_FILES, music_config_suffix, - music_id_prefix, special_id_suffix, level_id_suffix, - dummy, ignore_music_tokens); + music_id_prefix, action_id_suffix, special_id_suffix, + level_id_suffix, ignore_music_tokens); } static void InitMixer() @@ -5112,19 +5164,18 @@ void InitGfxBuffers() if (WIN_XSIZE != win_xsize_last || WIN_YSIZE != win_ysize_last) { - /* may contain content for cross-fading -- only re-create if changed */ - ReCreateBitmap(&bitmap_db_store, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_cross, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); + /* used to temporarily store the backbuffer -- only re-create if changed */ + ReCreateBitmap(&bitmap_db_store_1, WIN_XSIZE, WIN_YSIZE); + ReCreateBitmap(&bitmap_db_store_2, WIN_XSIZE, WIN_YSIZE); win_xsize_last = WIN_XSIZE; win_ysize_last = WIN_YSIZE; } - ReCreateBitmap(&bitmap_db_field, FXSIZE, FYSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_panel, DXSIZE, DYSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_door_1, 3 * DXSIZE, DYSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_door_2, 3 * VXSIZE, VYSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_toons, FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); + ReCreateBitmap(&bitmap_db_field, FXSIZE, FYSIZE); + ReCreateBitmap(&bitmap_db_panel, DXSIZE, DYSIZE); + ReCreateBitmap(&bitmap_db_door_1, 3 * DXSIZE, DYSIZE); + ReCreateBitmap(&bitmap_db_door_2, 3 * VXSIZE, VYSIZE); /* initialize screen properties */ InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE, @@ -5301,7 +5352,7 @@ void InitGfx() InitMenuDesignSettings_Static(); InitGfxDrawBusyAnimFunction(DrawInitAnim); - InitGfxDrawGlobalAnimFunction(DrawGlobalAnim); + InitGfxDrawGlobalAnimFunction(DrawGlobalAnimations); InitGfxDrawGlobalBorderFunction(DrawMaskedBorderToTarget); gfx.fade_border_source_status = global.border_status; @@ -5315,7 +5366,7 @@ void InitGfx() void InitGfxBackground() { fieldbuffer = bitmap_db_field; - SetDrawtoField(DRAW_BACKBUFFER); + SetDrawtoField(DRAW_TO_BACKBUFFER); ClearRectangle(backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE);