}
}
+#if 1
+ /* now set all undefined/invalid graphics to -1 to set to default after it */
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ {
+ for (act=0; act<NUM_ACTIONS; act++)
+ {
+ if (graphic_info[element_info[i].graphic[act]].bitmap == NULL)
+ element_info[i].graphic[act] = -1;
+
+ if (graphic_info[element_info[i].crumbled[act]].bitmap == NULL)
+ element_info[i].crumbled[act] = -1;
+
+ for (dir=0; dir<NUM_DIRECTIONS; dir++)
+ {
+ int graphic;
+
+ graphic = element_info[i].direction_graphic[act][dir];
+ if (graphic_info[graphic].bitmap == NULL)
+ element_info[i].direction_graphic[act][dir] = -1;
+
+ graphic = element_info[i].direction_crumbled[act][dir];
+ if (graphic_info[graphic].bitmap == NULL)
+ element_info[i].direction_crumbled[act][dir] = -1;
+ }
+ }
+ }
+#endif
+
/* now set all '-1' values to element specific default values */
for (i=0; i<MAX_NUM_ELEMENTS; i++)
{
for (act=0; act<NUM_ACTIONS; act++)
{
- boolean act_remove = (act == ACTION_DIGGING ||
- act == ACTION_SNAPPING ||
- act == ACTION_COLLECTING);
+ boolean act_remove = ((IS_DIGGABLE(i) && act == ACTION_DIGGING) ||
+ (IS_SNAPPABLE(i) && act == ACTION_SNAPPING) ||
+ (IS_COLLECTIBLE(i) && act == ACTION_COLLECTING));
/* generic default action graphic (defined by "[default]" directive) */
int default_action_graphic = element_info[EL_DEFAULT].graphic[act];
if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS)
element_info[element].special_graphic[special] = graphic;
}
+
+#if 1
+ /* now set all undefined/invalid graphics to default */
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++)
+ if (graphic_info[element_info[i].special_graphic[j]].bitmap == NULL)
+ element_info[i].special_graphic[j] =
+ element_info[i].graphic[ACTION_DEFAULT];
+#endif
}
static int get_element_from_token(char *token)
int first_frame, last_frame;
#if 0
- printf("::: image: '%s'\n", image->token);
+ printf("::: image: '%s' [%d]\n", image->token, i);
#endif
#if 0
-1
};
- static int ep_collectible[] =
+ static int ep_collectible_only[] =
{
EL_BD_DIAMOND,
EL_EMERALD,
EL_SIGN_EXIT,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
- EL_STEELWALL_SLANTED,
+ EL_STEELWALL_SLIPPERY,
EL_EMC_STEELWALL_1,
EL_EMC_STEELWALL_2,
EL_EMC_STEELWALL_3,
static int ep_slippery[] =
{
- EL_WALL_CRUMBLED,
+ EL_WALL_SLIPPERY,
EL_BD_WALL,
EL_ROCK,
EL_BD_ROCK,
EL_SP_CHIP_TOP,
EL_SP_CHIP_BOTTOM,
EL_SPEED_PILL,
- EL_STEELWALL_SLANTED,
+ EL_STEELWALL_SLIPPERY,
EL_PEARL,
EL_CRYSTAL,
-1
EL_PLAYER_2,
EL_PLAYER_3,
EL_PLAYER_4,
+ EL_SP_MURPHY,
-1
};
{
EL_EMPTY,
EL_SAND,
- EL_WALL_CRUMBLED,
+ EL_WALL_SLIPPERY,
EL_BD_WALL,
EL_ROCK,
EL_BD_ROCK,
EL_EXIT_OPENING,
EL_EXIT_OPEN,
EL_WALL,
- EL_WALL_CRUMBLED,
+ EL_WALL_SLIPPERY,
EL_EXPANDABLE_WALL,
EL_EXPANDABLE_WALL_HORIZONTAL,
EL_EXPANDABLE_WALL_VERTICAL,
EL_INVISIBLE_STEELWALL_ACTIVE,
EL_INVISIBLE_WALL,
EL_INVISIBLE_WALL_ACTIVE,
- EL_STEELWALL_SLANTED,
+ EL_STEELWALL_SLIPPERY,
EL_EMC_STEELWALL_1,
EL_EMC_STEELWALL_2,
EL_EMC_STEELWALL_3,
EL_EXPANDABLE_WALL_VERTICAL,
EL_EXPANDABLE_WALL_ANY,
EL_BD_WALL,
- EL_WALL_CRUMBLED,
+ EL_WALL_SLIPPERY,
EL_EXIT_CLOSED,
EL_EXIT_OPENING,
EL_EXIT_OPEN,
EL_SIGN_EXIT,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
- EL_STEELWALL_SLANTED,
+ EL_STEELWALL_SLIPPERY,
EL_EMC_STEELWALL_1,
EL_EMC_STEELWALL_2,
EL_EMC_STEELWALL_3,
EL_SAND,
EL_WALL,
EL_BD_WALL,
- EL_WALL_CRUMBLED,
+ EL_WALL_SLIPPERY,
EL_STEELWALL,
EL_AMOEBA_DEAD,
EL_QUICKSAND_EMPTY,
EL_SIGN_EXIT,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
- EL_STEELWALL_SLANTED,
+ EL_STEELWALL_SLIPPERY,
EL_EMC_STEELWALL_1,
EL_EMC_STEELWALL_2,
EL_EMC_STEELWALL_3,
} element_properties[] =
{
{ ep_diggable, EP_DIGGABLE },
- { ep_collectible, EP_COLLECTIBLE },
+ { ep_collectible_only, EP_COLLECTIBLE_ONLY },
{ ep_dont_run_into, EP_DONT_RUN_INTO },
{ ep_dont_collide_with, EP_DONT_COLLIDE_WITH },
{ ep_dont_touch, EP_DONT_TOUCH },
static int no_wall_properties[] =
{
EP_DIGGABLE,
- EP_COLLECTIBLE,
+ EP_COLLECTIBLE_ONLY,
EP_DONT_RUN_INTO,
EP_DONT_COLLIDE_WITH,
EP_CAN_MOVE,
SET_PROPERTY(i, EP_ACCESSIBLE, (IS_WALKABLE(i) ||
IS_PASSABLE(i)));
+ /* ---------- COLLECTIBLE ---------------------------------------------- */
+ SET_PROPERTY(i, EP_COLLECTIBLE, (IS_COLLECTIBLE_ONLY(i) ||
+ IS_DROPPABLE(i)));
+
/* ---------- SNAPPABLE ------------------------------------------------ */
SET_PROPERTY(i, EP_SNAPPABLE, (IS_DIGGABLE(i) ||
IS_COLLECTIBLE(i) ||
CAN_EXPLODE_SMASHED(i) ||
CAN_EXPLODE_IMPACT(i)));
+ /* ---------- CAN_EXPLODE_3X3 ------------------------------------------ */
+ SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) &&
+ !CAN_EXPLODE_1X1(i)));
+
/* ---------- CAN_BE_CRUMBLED ------------------------------------------ */
SET_PROPERTY(i, EP_CAN_BE_CRUMBLED,
element_info[i].crumbled[ACTION_DEFAULT] != IMG_EMPTY);
#endif
#if 0
- printf("::: InitImages ['%s', '%s'] ['%s', '%s']\n",
+ printf("::: InitImages for '%s' ['%s', '%s'] ['%s', '%s']\n",
+ leveldir_current->identifier,
artwork.gfx_current_identifier,
artwork.gfx_current->identifier,
leveldir_current->graphics_set,
ReinitializeGraphics();
}
-static void InitSound()
+static void InitSound(char *identifier)
{
+ if (identifier == NULL)
+ identifier = artwork.snd_current->identifier;
+
+#if 1
+ /* set artwork path to send it to the sound server process */
setLevelArtworkDir(artwork.snd_first);
+#endif
- InitReloadCustomSounds(artwork.snd_current->identifier);
+ InitReloadCustomSounds(identifier);
ReinitializeSounds();
}
-static void InitMusic()
+static void InitMusic(char *identifier)
{
+ if (identifier == NULL)
+ identifier = artwork.mus_current->identifier;
+
+#if 1
+ /* set artwork path to send it to the sound server process */
setLevelArtworkDir(artwork.mus_first);
+#endif
- InitReloadCustomMusic(artwork.mus_current->identifier);
+ InitReloadCustomMusic(identifier);
ReinitializeMusic();
}
#endif
}
-void ReloadCustomArtwork()
+static char *getNewArtworkIdentifier(int type)
{
- 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;
- static boolean last_own_level_graphics_set = FALSE;
- static boolean last_own_level_sounds_set = FALSE;
- static boolean last_own_level_music_set = FALSE;
- boolean level_graphics_set_changed = FALSE;
- boolean level_sounds_set_changed = FALSE;
- boolean level_music_set_changed = FALSE;
- /* identifier for new artwork; default: artwork configured in setup */
-#if 0
- char *gfx_new_identifier = artwork.gfx_current->identifier;
- char *snd_new_identifier = artwork.snd_current->identifier;
- char *mus_new_identifier = artwork.mus_current->identifier;
+ static char *leveldir_current_identifier[3] = { NULL, NULL, NULL };
+ static boolean last_override_level_artwork[3] = { FALSE, FALSE, FALSE };
+ static boolean last_has_level_artwork_set[3] = { FALSE, FALSE, FALSE };
+ static boolean initialized[3] = { FALSE, FALSE, FALSE };
+ TreeInfo *artwork_first_node = ARTWORK_FIRST_NODE(artwork, type);
+ boolean setup_override_artwork = SETUP_OVERRIDE_ARTWORK(setup, type);
+ char *setup_artwork_set = SETUP_ARTWORK_SET(setup, type);
+ char *leveldir_identifier = leveldir_current->identifier;
+#if 1
+ /* !!! setLevelArtworkDir() should be moved to an earlier stage !!! */
+ char *leveldir_artwork_set = setLevelArtworkDir(artwork_first_node);
#else
- char *gfx_new_identifier = artwork.gfx_current_identifier;
- char *snd_new_identifier = artwork.snd_current_identifier;
- char *mus_new_identifier = artwork.mus_current_identifier;
-#endif
- boolean redraw_screen = FALSE;
-
-#if 0
- if (leveldir_current_identifier == NULL)
- leveldir_current_identifier = leveldir_current->identifier;
-#endif
-
-#if 0
- printf("CURRENT GFX: '%s' ['%s']\n", artwork.gfx_current->identifier,
- leveldir_current->graphics_set);
- printf("CURRENT LEV: '%s' / '%s'\n", leveldir_current_identifier,
- leveldir_current->identifier);
-#endif
-
-#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);
+ char *leveldir_artwork_set = LEVELDIR_ARTWORK_SET(leveldir_current, type);
#endif
+ boolean has_level_artwork_set = (leveldir_artwork_set != NULL);
+ char *artwork_current_identifier;
+ char *artwork_new_identifier = NULL; /* default: nothing has changed */
/* leveldir_current may be invalid (level group, parent link) */
if (!validLevelSeries(leveldir_current))
- return;
-
- /* when a new level series was selected, check if there was a change
- in custom artwork stored in level series directory */
- if (1 || leveldir_current_identifier != leveldir_current->identifier)
- {
-#if 0
- char *identifier_old = leveldir_current_identifier;
-#endif
- char *identifier_new = leveldir_current->identifier;
+ return NULL;
+
+ /* 1st step: determine artwork set to be activated in descending order:
+ --------------------------------------------------------------------
+ 1. setup artwork (when configured to override everything else)
+ 2. artwork set configured in "levelinfo.conf" of current level set
+ (artwork in level directory will have priority when loading later)
+ 3. artwork in level directory (stored in artwork sub-directory)
+ 4. setup artwork (currently configured in setup menu) */
+
+ if (setup_override_artwork)
+ artwork_current_identifier = setup_artwork_set;
+ else if (leveldir_artwork_set != NULL)
+ artwork_current_identifier = leveldir_artwork_set;
+ else if (getTreeInfoFromIdentifier(artwork_first_node, leveldir_identifier))
+ artwork_current_identifier = leveldir_identifier;
+ else
+ artwork_current_identifier = setup_artwork_set;
-#if 0
- printf("::: 1: ['%s'] '%s', '%s' [%lx, %lx]\n",
- gfx_new_identifier, identifier_old, identifier_new,
- getTreeInfoFromIdentifier(artwork.gfx_first, identifier_old),
- getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new));
-#endif
-#if 0
- if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new) == NULL)
- gfx_new_identifier = GRAPHICS_SUBDIR;
- else if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_old) !=
- getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new))
- gfx_new_identifier = identifier_new;
-#else
- if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new))
- gfx_new_identifier = identifier_new;
- else
- gfx_new_identifier = setup.graphics_set;
-#endif
+ /* 2nd step: check if it is really needed to reload artwork set
+ ------------------------------------------------------------ */
#if 0
- if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_new) == NULL)
- snd_new_identifier = SOUNDS_SUBDIR;
- else if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_old) !=
- getTreeInfoFromIdentifier(artwork.snd_first, identifier_new))
- snd_new_identifier = identifier_new;
-#else
- if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_new))
- snd_new_identifier = identifier_new;
- else
- snd_new_identifier = setup.sounds_set;
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("::: 0: '%s' ['%s', '%s'] ['%s' ('%s')]\n",
+ artwork_new_identifier,
+ ARTWORK_CURRENT_IDENTIFIER(artwork, type),
+ artwork_current_identifier,
+ leveldir_current->graphics_set,
+ leveldir_current->identifier);
#endif
-#if 0
- if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new) == NULL)
- mus_new_identifier = MUSIC_SUBDIR;
- else if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new) !=
- getTreeInfoFromIdentifier(artwork.mus_first, identifier_new))
- mus_new_identifier = identifier_new;
-#else
- if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new))
- mus_new_identifier = identifier_new;
- else
- mus_new_identifier = setup.music_set;
-#endif
+ /* ---------- reload if level set and also artwork set has changed ------- */
+ if (leveldir_current_identifier[type] != leveldir_identifier &&
+ (last_has_level_artwork_set[type] || has_level_artwork_set))
+ artwork_new_identifier = artwork_current_identifier;
-#if 0
- printf("::: 2: ['%s'] '%s', '%s'\n",
- gfx_new_identifier, identifier_old, identifier_new);
-#endif
+ leveldir_current_identifier[type] = leveldir_identifier;
+ last_has_level_artwork_set[type] = has_level_artwork_set;
#if 0
- leveldir_current_identifier = leveldir_current->identifier;
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("::: 1: '%s'\n", artwork_new_identifier);
#endif
- }
- /* custom level artwork configured in level series configuration file
- always overrides custom level artwork stored in level series directory
- and (level independent) custom artwork configured in setup menu */
- if (leveldir_current->graphics_set != NULL)
- gfx_new_identifier = leveldir_current->graphics_set;
- if (leveldir_current->sounds_set != NULL)
- snd_new_identifier = leveldir_current->sounds_set;
- if (leveldir_current->music_set != NULL)
- mus_new_identifier = leveldir_current->music_set;
+ /* ---------- reload if "override artwork" setting has changed ----------- */
+ if (last_override_level_artwork[type] != setup_override_artwork)
+ artwork_new_identifier = artwork_current_identifier;
- if (leveldir_current_identifier != leveldir_current->identifier)
- {
- if (last_own_level_graphics_set || leveldir_current->graphics_set != NULL)
- level_graphics_set_changed = TRUE;
+ last_override_level_artwork[type] = setup_override_artwork;
- if (last_own_level_sounds_set || leveldir_current->sounds_set != NULL)
- level_sounds_set_changed = TRUE;
+#if 0
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("::: 2: '%s'\n", artwork_new_identifier);
+#endif
- if (last_own_level_music_set || leveldir_current->music_set != NULL)
- level_music_set_changed = TRUE;
+ /* ---------- reload if current artwork identifier has changed ----------- */
+ if (strcmp(ARTWORK_CURRENT_IDENTIFIER(artwork, type),
+ artwork_current_identifier) != 0)
+ artwork_new_identifier = artwork_current_identifier;
- last_own_level_graphics_set = (leveldir_current->graphics_set != NULL);
- last_own_level_sounds_set = (leveldir_current->sounds_set != NULL);
- last_own_level_music_set = (leveldir_current->music_set != NULL);
- }
+ *(&(ARTWORK_CURRENT_IDENTIFIER(artwork, type))) = artwork_current_identifier;
-#if 1
- leveldir_current_identifier = leveldir_current->identifier;
+#if 0
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("::: 3: '%s'\n", artwork_new_identifier);
#endif
- if (setup.override_level_graphics)
- gfx_new_identifier = artwork.gfx_current->identifier;
- if (setup.override_level_sounds)
- snd_new_identifier = artwork.snd_current->identifier;
- if (setup.override_level_music)
- mus_new_identifier = artwork.mus_current->identifier;
+ /* ---------- do not reload directly after starting ---------------------- */
+ if (!initialized[type])
+ artwork_new_identifier = NULL;
+ initialized[type] = TRUE;
#if 0
- printf("CHECKING OLD/NEW GFX:\n OLD: '%s'\n NEW: '%s' ['%s', '%s'] [%d]\n",
- artwork.gfx_current_identifier, gfx_new_identifier,
- artwork.gfx_current->identifier, leveldir_current->graphics_set,
- level_graphics_set_changed);
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("::: 4: '%s'\n", artwork_new_identifier);
#endif
- if (strcmp(artwork.gfx_current_identifier, gfx_new_identifier) != 0 ||
- last_override_level_graphics != setup.override_level_graphics ||
- level_graphics_set_changed)
- {
#if 0
- printf("RELOADING GRAPHICS '%s' -> '%s' ['%s']\n",
- artwork.gfx_current_identifier,
- gfx_new_identifier,
- artwork.gfx_current->identifier);
+ if (type == ARTWORK_TYPE_GRAPHICS)
+ printf("CHECKING OLD/NEW GFX:\n- OLD: %s\n- NEW: %s ['%s', '%s'] ['%s']\n",
+ artwork.gfx_current_identifier, artwork_current_identifier,
+ artwork.gfx_current->identifier, leveldir_current->graphics_set,
+ artwork_new_identifier);
#endif
-#if 0
- artwork.gfx_current =
- getTreeInfoFromIdentifier(artwork.gfx_first, gfx_new_identifier);
-#endif
-#if 0
- artwork.gfx_current_identifier = gfx_new_identifier;
-#endif
+ return artwork_new_identifier;
+}
+void ReloadCustomArtwork()
+{
+ char *gfx_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS);
+ char *snd_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS);
+ char *mus_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_MUSIC);
+ boolean redraw_screen = FALSE;
+
+ if (gfx_new_identifier != NULL)
+ {
#if 0
- setLevelArtworkDir(artwork.gfx_first);
+ printf("RELOADING GRAPHICS '%s' -> '%s' ['%s', '%s']\n",
+ artwork.gfx_current_identifier,
+ gfx_new_identifier,
+ artwork.gfx_current->identifier,
+ leveldir_current->graphics_set);
#endif
ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
InitImages();
#if 0
- printf("::: %d\n", menu.list_size[GAME_MODE_LEVELS]);
+ printf("... '%s'\n",
+ leveldir_current->graphics_set);
#endif
FreeTileClipmasks();
InitTileClipmasks();
-#if 0
- artwork.gfx_current =
- getTreeInfoFromIdentifier(artwork.gfx_first, gfx_new_identifier);
-#endif
-#if 0
- printf("::: '%s', %lx\n", gfx_new_identifier, artwork.gfx_current);
-#endif
-
-#if 0
- artwork.gfx_current_identifier = artwork.gfx_current->identifier;
-#endif
- artwork.gfx_current_identifier = gfx_new_identifier;
- last_override_level_graphics = setup.override_level_graphics;
-
-#if 0
- printf("DONE RELOADING GFX: '%s' ['%s']\n",
- artwork.gfx_current_identifier, artwork.gfx_current->identifier);
-#endif
redraw_screen = TRUE;
}
- if (strcmp(artwork.snd_current_identifier, snd_new_identifier) != 0 ||
- last_override_level_sounds != setup.override_level_sounds ||
- level_sounds_set_changed)
+ if (snd_new_identifier != NULL)
{
-#if 0
- printf("RELOADING SOUNDS '%s' -> '%s' ('%s')\n",
- artwork.snd_current_identifier,
- artwork.snd_current->identifier,
- snd_new_identifier);
-#endif
-
- /* set artwork path to send it to the sound server process */
- setLevelArtworkDir(artwork.snd_first);
-
ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
- InitReloadCustomSounds(snd_new_identifier);
- ReinitializeSounds();
-
-#if 0
- artwork.snd_current =
- getTreeInfoFromIdentifier(artwork.snd_first, setup.sounds_set);
- artwork.snd_current_identifier = artwork.snd_current->identifier;
-#endif
- artwork.snd_current_identifier = snd_new_identifier;
- last_override_level_sounds = setup.override_level_sounds;
+ InitSound(snd_new_identifier);
redraw_screen = TRUE;
}
- if (strcmp(artwork.mus_current_identifier, mus_new_identifier) != 0 ||
- last_override_level_music != setup.override_level_music ||
- level_music_set_changed)
+ if (mus_new_identifier != NULL)
{
- /* set artwork path to send it to the sound server process */
- setLevelArtworkDir(artwork.mus_first);
-
ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
- InitReloadCustomMusic(mus_new_identifier);
- ReinitializeMusic();
-
-#if 0
- artwork.mus_current =
- getTreeInfoFromIdentifier(artwork.mus_first, setup.music_set);
- artwork.mus_current_identifier = artwork.mus_current->identifier;
-#endif
- artwork.mus_current_identifier = mus_new_identifier;
- last_override_level_music = setup.override_level_music;
+ InitMusic(mus_new_identifier);
redraw_screen = TRUE;
}
InitEventFilter(FilterMouseMotionEvents);
InitElementPropertiesStatic();
+ InitElementPropertiesEngine(GAME_VERSION_ACTUAL);
InitGfx();
InitLevelArtworkInfo();
InitImages(); /* needs to know current level directory */
- InitSound(); /* needs to know current level directory */
- InitMusic(); /* needs to know current level directory */
+ InitSound(NULL); /* needs to know current level directory */
+ InitMusic(NULL); /* needs to know current level directory */
InitGfxBackground();