if (!DelayReached(&action_delay, action_delay_value))
return;
+ if (init_last.busy.x == -1)
+ init_last.busy.x = WIN_XSIZE / 2;
+ if (init_last.busy.y == -1)
+ init_last.busy.y = WIN_YSIZE / 2;
+
x = ALIGNED_TEXT_XPOS(&init_last.busy);
y = ALIGNED_TEXT_YPOS(&init_last.busy);
gadgets_initialized = TRUE;
}
-inline void InitElementSmallImagesScaledUp(int graphic)
+inline static void InitElementSmallImagesScaledUp(int graphic)
{
struct GraphicInfo *g = &graphic_info[graphic];
g->tile_size = TILESIZE; /* standard tile size */
#endif
-#if 0
- // CHECK: when setting tile size, should this set width and height?
+ // when setting tile size, also set width and height accordingly
g->width = g->tile_size;
g->height = g->tile_size;
-#endif
}
if (g->use_image_size)
static int full_size_graphics[] =
{
IMG_GLOBAL_BORDER,
+ IMG_GLOBAL_BORDER_MAIN,
+ IMG_GLOBAL_BORDER_SCORES,
+ IMG_GLOBAL_BORDER_EDITOR,
+ IMG_GLOBAL_BORDER_PLAYING,
IMG_GLOBAL_DOOR,
IMG_BACKGROUND_ENVELOPE_1,
global.create_images_dir = NULL;
global.frames_per_second = 0;
- global.fps_slowdown = FALSE;
- global.fps_slowdown_factor = 1;
global.border_status = GAME_MODE_MAIN;
if (strEqual(command, "print graphicsinfo.conf"))
{
- printf("# You can configure additional/alternative image files here.\n");
- printf("# (The entries below are default and therefore commented out.)\n");
- printf("\n");
- printf("%s\n", getFormattedSetupEntry("name", "Classic Graphics"));
- printf("\n");
- printf("%s\n", getFormattedSetupEntry("sort_priority", "100"));
- printf("\n");
+ Print("# You can configure additional/alternative image files here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("name", "Classic Graphics"));
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("sort_priority", "100"));
+ Print("\n");
for (i = 0; image_config[i].token != NULL; i++)
- printf("# %s\n", getFormattedSetupEntry(image_config[i].token,
- image_config[i].value));
+ Print("# %s\n", getFormattedSetupEntry(image_config[i].token,
+ image_config[i].value));
exit(0);
}
else if (strEqual(command, "print soundsinfo.conf"))
{
- printf("# You can configure additional/alternative sound files here.\n");
- printf("# (The entries 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");
+ Print("# You can configure additional/alternative sound files here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("name", "Classic Sounds"));
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("sort_priority", "100"));
+ Print("\n");
for (i = 0; sound_config[i].token != NULL; i++)
- printf("# %s\n", getFormattedSetupEntry(sound_config[i].token,
- sound_config[i].value));
+ Print("# %s\n", getFormattedSetupEntry(sound_config[i].token,
+ sound_config[i].value));
exit(0);
}
else if (strEqual(command, "print musicinfo.conf"))
{
- printf("# You can configure additional/alternative music files here.\n");
- printf("# (The entries below are default and therefore commented out.)\n");
- printf("\n");
- printf("%s\n", getFormattedSetupEntry("name", "Classic Music"));
- printf("\n");
- printf("%s\n", getFormattedSetupEntry("sort_priority", "100"));
- printf("\n");
+ Print("# You can configure additional/alternative music files here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("name", "Classic Music"));
+ Print("\n");
+ Print("%s\n", getFormattedSetupEntry("sort_priority", "100"));
+ Print("\n");
for (i = 0; music_config[i].token != NULL; i++)
- printf("# %s\n", getFormattedSetupEntry(music_config[i].token,
- music_config[i].value));
+ Print("# %s\n", getFormattedSetupEntry(music_config[i].token,
+ music_config[i].value));
exit(0);
}
else if (strEqual(command, "print editorsetup.conf"))
{
- printf("# You can configure your personal editor element list here.\n");
- printf("# (The entries below are default and therefore commented out.)\n");
- printf("\n");
+ Print("# You can configure your personal editor element list here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
/* this is needed to be able to check element list for cascade elements */
InitElementPropertiesStatic();
}
else if (strEqual(command, "print helpanim.conf"))
{
- printf("# You can configure different element help animations here.\n");
- printf("# (The entries below are default and therefore commented out.)\n");
- printf("\n");
+ Print("# You can configure different element help animations here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
for (i = 0; helpanim_config[i].token != NULL; i++)
{
- printf("# %s\n", getFormattedSetupEntry(helpanim_config[i].token,
- helpanim_config[i].value));
+ Print("# %s\n", getFormattedSetupEntry(helpanim_config[i].token,
+ helpanim_config[i].value));
if (strEqual(helpanim_config[i].token, "end"))
- printf("#\n");
+ Print("#\n");
}
exit(0);
}
else if (strEqual(command, "print helptext.conf"))
{
- printf("# You can configure different element help text here.\n");
- printf("# (The entries below are default and therefore commented out.)\n");
- printf("\n");
+ Print("# You can configure different element help text here.\n");
+ Print("# (The entries below are default and therefore commented out.)\n");
+ Print("\n");
for (i = 0; helptext_config[i].token != NULL; i++)
- printf("# %s\n", getFormattedSetupEntry(helptext_config[i].token,
- helptext_config[i].value));
+ Print("# %s\n", getFormattedSetupEntry(helptext_config[i].token,
+ helptext_config[i].value));
exit(0);
}
exit(0);
}
- else if (strPrefix(command, "autoplay "))
+ else if (strPrefix(command, "autotest ") ||
+ strPrefix(command, "autoplay ") ||
+ strPrefix(command, "autoffwd "))
{
char *str_ptr = getStringCopy(&command[9]); /* read command parameters */
+ global.autoplay_mode = (strPrefix(command, "autotest") ? AUTOPLAY_TEST :
+ strPrefix(command, "autoplay") ? AUTOPLAY_PLAY :
+ strPrefix(command, "autoffwd") ? AUTOPLAY_FFWD : 0);
+
while (*str_ptr != '\0') /* continue parsing string */
{
/* cut leading whitespace from string, replace it by string terminator */
// check if there are any displays available
if (num_displays < 0)
{
- printf("No displays available: %s\n", SDL_GetError());
+ Print("No displays available: %s\n", SDL_GetError());
exit(-1);
}
int num_modes = SDL_GetNumDisplayModes(i);
int j;
- printf("Available display modes for display %d:\n", i);
+ Print("Available display modes for display %d:\n", i);
// check if there are any display modes available for this display
if (num_modes < 0)
{
- printf("No display modes available for display %d: %s\n",
- i, SDL_GetError());
+ Print("No display modes available for display %d: %s\n",
+ i, SDL_GetError());
exit(-1);
}
if (SDL_GetDisplayMode(i, j, &mode) < 0)
{
- printf("Cannot get display mode %d for display %d: %s\n",
- j, i, SDL_GetError());
+ Print("Cannot get display mode %d for display %d: %s\n",
+ j, i, SDL_GetError());
exit(-1);
}
- printf("- %d x %d\n", mode.w, mode.h);
+ Print("- %d x %d\n", mode.w, mode.h);
}
}
/* check if there are any modes available */
if (modes == NULL)
{
- printf("No modes available!\n");
+ Print("No modes available!\n");
exit(-1);
}
/* check if our resolution is restricted */
if (modes == (SDL_Rect **)-1)
{
- printf("All resolutions available.\n");
+ Print("All resolutions available.\n");
}
else
{
- printf("Available display modes:\n");
+ Print("Available display modes:\n");
for (i = 0; modes[i]; i++)
- printf("- %d x %d\n", modes[i]->w, modes[i]->h);
+ Print("- %d x %d\n", modes[i]->w, modes[i]->h);
}
exit(0);
void InitGfxBuffers()
{
+ static int win_xsize_last = -1;
+ static int win_ysize_last = -1;
+
/* create additional image buffers for double-buffering and cross-fading */
- ReCreateBitmap(&bitmap_db_store, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH);
- ReCreateBitmap(&bitmap_db_cross, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH);
+
+ 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);
+
+ 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);
font_height = getFontHeight(FC_RED);
DrawInitText(getProgramInitString(), 20, FC_YELLOW);
- DrawInitText(PROGRAM_COPYRIGHT_STRING, 50, FC_RED);
- DrawInitText(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, FC_RED);
+ DrawInitText(setup.internal.program_copyright, 50, FC_RED);
+ DrawInitText(setup.internal.program_website, WIN_YSIZE - 20 - font_height,
+ FC_RED);
DrawInitText("Loading graphics", 120, FC_GREEN);
- /* initialize busy animation with default values */
+ /* initialize settings for busy animation with default values */
int parameter[NUM_GFX_ARGS];
for (i = 0; i < NUM_GFX_ARGS; i++)
parameter[i] = get_graphic_parameter_value(image_config_suffix[i].value,
image_config_suffix[i].token,
image_config_suffix[i].type);
- /* determine settings for busy animation (when displaying startup messages) */
- for (i = 0; image_config[i].token != NULL; i++)
+ char *anim_token = CONFIG_TOKEN_GLOBAL_BUSY;
+ int len_anim_token = strlen(anim_token);
+
+ /* read settings for busy animation from default custom artwork config */
+ char *gfx_config_filename = getPath3(options.graphics_directory,
+ GFX_DEFAULT_SUBDIR,
+ GRAPHICSINFO_FILENAME);
+
+ if (fileExists(gfx_config_filename))
{
- char *anim_token = CONFIG_TOKEN_GLOBAL_BUSY;
- int len_anim_token = strlen(anim_token);
+ SetupFileHash *setup_file_hash = loadSetupFileHash(gfx_config_filename);
- if (strEqual(image_config[i].token, anim_token))
- filename_anim_initial = image_config[i].value;
- else if (strlen(image_config[i].token) > len_anim_token &&
- strncmp(image_config[i].token, anim_token, len_anim_token) == 0)
+ if (setup_file_hash)
{
- for (j = 0; image_config_suffix[j].token != NULL; j++)
+ char *filename = getHashEntry(setup_file_hash, anim_token);
+
+ if (filename)
{
- if (strEqual(&image_config[i].token[len_anim_token],
- image_config_suffix[j].token))
- parameter[j] =
- get_graphic_parameter_value(image_config[i].value,
- image_config_suffix[j].token,
- image_config_suffix[j].type);
+ filename_anim_initial = getStringCopy(filename);
+
+ for (j = 0; image_config_suffix[j].token != NULL; j++)
+ {
+ int type = image_config_suffix[j].type;
+ char *suffix = image_config_suffix[j].token;
+ char *token = getStringCat2(anim_token, suffix);
+ char *value = getHashEntry(setup_file_hash, token);
+
+ checked_free(token);
+
+ if (value)
+ parameter[j] = get_graphic_parameter_value(value, suffix, type);
+ }
}
+
+ freeSetupFileHash(setup_file_hash);
}
}
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
- filename_anim_initial = "loading.pcx";
-
- parameter[GFX_ARG_X] = 0;
- parameter[GFX_ARG_Y] = 0;
- parameter[GFX_ARG_WIDTH] = 128;
- parameter[GFX_ARG_HEIGHT] = 40;
- parameter[GFX_ARG_FRAMES] = 32;
- parameter[GFX_ARG_DELAY] = 4;
- parameter[GFX_ARG_FRAMES_PER_LINE] = ARG_UNDEFINED_VALUE;
-#endif
+ if (filename_anim_initial == NULL)
+ {
+ /* read settings for busy animation from static default artwork config */
+ for (i = 0; image_config[i].token != NULL; i++)
+ {
+ if (strEqual(image_config[i].token, anim_token))
+ filename_anim_initial = getStringCopy(image_config[i].value);
+ else if (strlen(image_config[i].token) > len_anim_token &&
+ strncmp(image_config[i].token, anim_token, len_anim_token) == 0)
+ {
+ for (j = 0; image_config_suffix[j].token != NULL; j++)
+ {
+ if (strEqual(&image_config[i].token[len_anim_token],
+ image_config_suffix[j].token))
+ parameter[j] =
+ get_graphic_parameter_value(image_config[i].value,
+ image_config_suffix[j].token,
+ image_config_suffix[j].type);
+ }
+ }
+ }
+ }
if (filename_anim_initial == NULL) /* should not happen */
Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_GLOBAL_BUSY);
anim_initial.bitmaps[IMG_BITMAP_STANDARD] =
LoadCustomImage(filename_anim_initial);
+ checked_free(filename_anim_initial);
+
graphic_info = &anim_initial; /* graphic == 0 => anim_initial */
set_graphic_parameters_ext(0, parameter, anim_initial.bitmaps);
init_last = init;
}
-void RedrawBackground()
-{
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, backbuffer,
- 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
-
- redraw_mask = REDRAW_ALL;
-}
-
void InitGfxBackground()
{
- int x, y;
-
fieldbuffer = bitmap_db_field;
SetDrawtoField(DRAW_BACKBUFFER);
ClearRectangle(backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE);
- for (x = 0; x < MAX_BUF_XSIZE; x++)
- for (y = 0; y < MAX_BUF_YSIZE; y++)
- redraw[x][y] = 0;
- redraw_tiles = 0;
redraw_mask = REDRAW_ALL;
}
LoadLevelInfo(); /* global level info */
LoadLevelSetup_LastSeries(); /* last played series info */
LoadLevelSetup_SeriesInfo(); /* last played level info */
+
+ if (global.autoplay_leveldir &&
+ global.autoplay_mode != AUTOPLAY_TEST)
+ {
+ leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
+ global.autoplay_leveldir);
+ if (leveldir_current == NULL)
+ leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
+ }
}
static void InitLevelArtworkInfo()
FadeOut(REDRAW_ALL);
- RedrawBackground();
+ RedrawGlobalBorder();
/* force redraw of (open or closed) door graphics */
SetDoorState(DOOR_OPEN_ALL);
sy += 3 * font_height;
num_lines_printed =
- DrawTextBuffer(sx, sy, program.error_filename, font_2,
+ DrawTextBuffer(sx, sy, program.log_filename[LOG_ERR_ID], font_2,
line_length, line_length, max_lines,
0, BLIT_ON_BACKGROUND, TRUE, TRUE, FALSE);