static Bitmap *bitmap_font_initial = NULL;
-static void InitGlobal(void);
-static void InitSetup(void);
-static void InitPlayerInfo(void);
-static void InitLevelInfo(void);
-static void InitArtworkInfo(void);
-static void InitLevelArtworkInfo(void);
-static void InitNetworkServer(void);
-static void InitArtworkConfig(void);
-static void InitImages(void);
-static void InitMixer(void);
-static void InitSound(void);
-static void InitMusic(void);
-static void InitGfx(void);
-static void InitGfxBackground(void);
-static void InitGadgets(void);
-static void InitElementProperties(void);
-static void InitElementInfo(void);
-static void InitGraphicInfo(void);
+static void InitGlobal();
+static void InitSetup();
+static void InitPlayerInfo();
+static void InitLevelInfo();
+static void InitArtworkInfo();
+static void InitLevelArtworkInfo();
+static void InitNetworkServer();
+static void InitArtworkConfig();
+static void InitImages();
+static void InitMixer();
+static void InitSound();
+static void InitMusic();
+static void InitGfx();
+static void InitGfxBackground();
+static void InitGadgets();
+static void InitElementImages();
+static void InitElementGraphicInfo();
+static void InitElementSoundInfo();
+static void InitElementProperties();
+static void InitGraphicInfo();
static void InitSoundInfo();
static void Execute_Command(char *);
-void OpenAll(void)
+void OpenAll()
{
InitGlobal(); /* initialize some global variables */
InitEventFilter(FilterMouseMotionEvents);
InitElementProperties();
- InitElementInfo();
InitGfx();
static void InitArtworkConfig()
{
static char *element_prefix[MAX_NUM_ELEMENTS + 1];
+ static char *sound_class_prefix[MAX_NUM_ELEMENTS + 1];
static char *action_suffix[NUM_ACTIONS + 1];
static char *direction_suffix[NUM_DIRECTIONS + 1];
static char *dummy[1] = { NULL };
int i;
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ element_info[i].custom_description = NULL;
+
for (i=0; i<MAX_NUM_ELEMENTS + 1; i++)
element_prefix[i] = element_info[i].token_name;
+ for (i=0; i<MAX_NUM_ELEMENTS + 1; i++)
+ sound_class_prefix[i] = element_info[i].sound_class_name;
for (i=0; i<NUM_ACTIONS + 1; i++)
action_suffix[i] = element_action_info[i].suffix;
for (i=0; i<NUM_DIRECTIONS + 1; i++)
InitImageList(image_config, NUM_IMAGE_FILES, image_config_suffix,
element_prefix, action_suffix, direction_suffix);
InitSoundList(sound_config, NUM_SOUND_FILES, sound_config_suffix,
- element_prefix, action_suffix, dummy);
+ sound_class_prefix, action_suffix, dummy);
}
void InitLevelArtworkInfo()
static void ReinitializeGraphics()
{
- InitGraphicInfo(); /* initialize graphic info from config file */
+ InitElementGraphicInfo(); /* initialize element/graphic config info */
+ InitGraphicInfo(); /* initialize graphic info from config file */
InitFontInfo(bitmap_font_initial,
graphic_info[IMG_FONT_BIG].bitmap,
InitGadgets();
InitToons();
+
+
+
+ /* !!! TEST ONLY !!! */
+ if (0)
+ {
+ Bitmap *tst_bitmap = graphic_info[IMG_SAND].bitmap;
+ Bitmap *tmp_bitmap = ZoomBitmap(tst_bitmap,
+ tst_bitmap->width / 2,
+ tst_bitmap->height / 2);
+
+ BlitBitmap(tmp_bitmap, tst_bitmap, 0, 0, 256, 224, 0, 448);
+
+ FreeBitmap(tmp_bitmap);
+ }
+
+ if (1)
+ {
+ printf("CREATING SMALL IMAGES...\n");
+
+#if 1
+ InitElementImages();
+#else
+ CreateImageWithSmallImages(IMG_SAND);
+ CreateImageWithSmallImages(IMG_SAND);
+#endif
+
+ printf("DONE!\n");
+ }
}
static void ReinitializeSounds()
{
- InitSoundInfo(); /* initialize sounds info from config file */
+ InitElementSoundInfo(); /* initialize element/sound config info */
+ InitSoundInfo(); /* initialize sounds info from config file */
+
+ InitPlaySoundLevel(); /* initialize internal game sound values */
}
static void ReinitializeMusic()
{
ReloadCustomImages();
ReinitializeGraphics();
+
+ LoadCustomElementDescriptions();
}
static void InitSound()
ReloadCustomImages();
ReinitializeGraphics();
+ LoadCustomElementDescriptions();
+
FreeTileClipmasks();
InitTileClipmasks();
gadgets_initialized = TRUE;
}
-void InitElementInfo()
+void InitElementImages()
{
+ struct PropertyMapping *property_mapping = getImageListPropertyMapping();
+ int num_property_mappings = getImageListPropertyMappingSize();
+ int i;
+
+ /* initialize images from static configuration */
+ for (i=0; element_to_graphic[i].element > -1; i++)
+ CreateImageWithSmallImages(element_to_graphic[i].graphic);
+
+ /* initialize images from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ CreateImageWithSmallImages(property_mapping[i].artwork_index);
+}
+
+void InitElementGraphicInfo()
+{
+ struct PropertyMapping *property_mapping = getImageListPropertyMapping();
+ int num_property_mappings = getImageListPropertyMappingSize();
int i, act, dir;
/* set values to -1 to identify later as "uninitialized" values */
element_info[i].graphic[ACTION_DEFAULT] =
IMG_CUSTOM_START + (i - EL_CUSTOM_START);
- i = 0;
- while (element_to_graphic[i].element > -1)
+ /* initialize element/graphic mapping from static configuration */
+ for (i=0; element_to_graphic[i].element > -1; i++)
{
int element = element_to_graphic[i].element;
- int direction = element_to_graphic[i].direction;
int action = element_to_graphic[i].action;
+ int direction = element_to_graphic[i].direction;
int graphic = element_to_graphic[i].graphic;
if (action < 0)
action = ACTION_DEFAULT;
if (direction > -1)
- {
- direction = MV_DIR_BIT(direction);
-
element_info[element].direction_graphic[action][direction] = graphic;
- }
else
element_info[element].graphic[action] = graphic;
+ }
+
+ /* initialize element/graphic mapping from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ {
+ int element = property_mapping[i].base_index;
+ int action = property_mapping[i].ext1_index;
+ int direction = property_mapping[i].ext2_index;
+ int graphic = property_mapping[i].artwork_index;
- i++;
+ if (action < 0)
+ action = ACTION_DEFAULT;
+
+ if (direction > -1)
+ element_info[element].direction_graphic[action][direction] = graphic;
+ else
+ element_info[element].graphic[action] = graphic;
}
/* now set all '-1' values to element specific default values */
}
}
+static void InitElementSoundInfo()
+{
+ /* soon to come */
+}
+
static void set_graphic_parameters(int graphic, int *parameter)
{
Bitmap *src_bitmap = getBitmapFromImageID(graphic);
static void InitGraphicInfo()
{
static boolean clipmasks_initialized = FALSE;
+ int num_images = getImageListSize();
int i;
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
Pixmap src_pixmap;
GC copy_clipmask_gc = None;
#endif
- image_files = getCurrentImageList();
+ if (graphic_info != NULL)
+ free(graphic_info);
+
+ graphic_info = checked_calloc(num_images * sizeof(struct GraphicInfo));
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
if (clipmasks_initialized)
{
- for (i=0; i<NUM_IMAGE_FILES; i++)
+ for (i=0; i<num_images; i++)
{
if (graphic_info[i].clip_mask)
XFreePixmap(display, graphic_info[i].clip_mask);
}
#endif
- for (i=0; i<NUM_IMAGE_FILES; i++)
+ for (i=0; i<num_images; i++)
{
+ struct FileInfo *image = getImageListEntry(i);
Bitmap *src_bitmap;
int src_x, src_y;
int first_frame, last_frame;
- set_graphic_parameters(i, image_files[i].parameter);
+ set_graphic_parameters(i, image->parameter);
/* now check if no animation frames are outside of the loaded image */
Error(ERR_RETURN, "custom graphic rejected for this element/action");
Error(ERR_RETURN_LINE, "-");
- set_graphic_parameters(i, image_files[i].default_parameter);
+ set_graphic_parameters(i, image->default_parameter);
}
last_frame = graphic_info[i].anim_frames - 1;
Error(ERR_RETURN, "custom graphic rejected for this element/action");
Error(ERR_RETURN_LINE, "-");
- set_graphic_parameters(i, image_files[i].default_parameter);
+ set_graphic_parameters(i, image->default_parameter);
}
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
static void InitSoundInfo()
{
- int sound_effect_properties[NUM_SOUND_FILES];
+ int *sound_effect_properties;
+ int num_sounds = getSoundListSize();
int i, j;
- sound_files = getCurrentSoundList();
+ if (sound_info != NULL)
+ free(sound_info);
+
+ sound_effect_properties = checked_calloc(num_sounds * sizeof(int));
+ sound_info = checked_calloc(num_sounds * sizeof(struct SoundInfo));
/* initialize sound effect for all elements to "no sound" */
for (i=0; i<MAX_NUM_ELEMENTS; i++)
for (j=0; j<NUM_ACTIONS; j++)
element_info[i].sound[j] = SND_UNDEFINED;
- for (i=0; i<NUM_SOUND_FILES; i++)
+ for (i=0; i<num_sounds; i++)
{
- int len_effect_text = strlen(sound_files[i].token);
+ struct FileInfo *sound = getSoundListEntry(i);
+ int len_effect_text = strlen(sound->token);
sound_effect_properties[i] = ACTION_OTHER;
sound_info[i].loop = FALSE;
int len_action_text = strlen(element_action_info[j].suffix);
if (len_action_text < len_effect_text &&
- strcmp(&sound_files[i].token[len_effect_text - len_action_text],
+ strcmp(&sound->token[len_effect_text - len_action_text],
element_action_info[j].suffix) == 0)
{
sound_effect_properties[i] = element_action_info[j].value;
int len_class_text = strlen(element_info[j].sound_class_name);
if (len_class_text + 1 < len_effect_text &&
- strncmp(sound_files[i].token,
+ strncmp(sound->token,
element_info[j].sound_class_name, len_class_text) == 0 &&
- sound_files[i].token[len_class_text] == '.')
+ sound->token[len_class_text] == '.')
{
int sound_action_value = sound_effect_properties[i];
}
}
- set_sound_parameters(i, sound_files[i].parameter);
+ set_sound_parameters(i, sound->parameter);
}
+ free(sound_effect_properties);
+
#if 0
/* TEST ONLY */
{