// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// init.c
// ============================================================================
EL_MOLE_LEFT, EL_MOLE_RIGHT,
EL_MOLE_UP, EL_MOLE_DOWN
},
+ {
+ EL_SPRING,
+ EL_SPRING_LEFT, EL_SPRING_RIGHT,
+ EL_SPRING_LEFT, EL_SPRING_RIGHT, // (to match array size)
+ },
{
-1,
-1, -1, -1, -1
void InitImageTextures(void)
{
+ static int texture_graphics[] =
+ {
+ IMG_GFX_REQUEST_BUTTON_TOUCH_YES,
+ IMG_GFX_REQUEST_BUTTON_TOUCH_NO,
+ IMG_GFX_REQUEST_BUTTON_TOUCH_CONFIRM,
+ IMG_GFX_GAME_BUTTON_TOUCH_STOP,
+ IMG_GFX_GAME_BUTTON_TOUCH_PAUSE,
+ IMG_MENU_BUTTON_TOUCH_BACK,
+ IMG_MENU_BUTTON_TOUCH_NEXT,
+ IMG_MENU_BUTTON_TOUCH_BACK2,
+ IMG_MENU_BUTTON_TOUCH_NEXT2,
+ -1
+ };
int i, j, k;
FreeAllImageTextures();
}
}
}
-}
-
-#if 1
-// !!! FIX THIS (CHANGE TO USING NORMAL ELEMENT GRAPHIC DEFINITIONS) !!!
-void SetBitmaps_EM(Bitmap **em_bitmap)
-{
- em_bitmap[0] = graphic_info[IMG_EMC_OBJECT].bitmap;
- em_bitmap[1] = graphic_info[IMG_EMC_SPRITE].bitmap;
-}
-#endif
-#if 0
-// !!! FIX THIS (CHANGE TO USING NORMAL ELEMENT GRAPHIC DEFINITIONS) !!!
-void SetBitmaps_SP(Bitmap **sp_bitmap)
-{
- *sp_bitmap = graphic_info[IMG_SP_OBJECTS].bitmap;
+ for (i = 0; texture_graphics[i] > -1; i++)
+ CreateImageTextures(texture_graphics[i]);
}
-#endif
static int getFontBitmapID(int font_nr)
{
else
g->anim_frames = 1;
- if (g->anim_frames == 0) // frames must be at least 1
+ if (g->anim_frames < 1) // frames must be at least 1
g->anim_frames = 1;
g->anim_frames_per_line =
parameter[GFX_ARG_FRAMES_PER_LINE] : anim_frames_per_line);
g->anim_delay = parameter[GFX_ARG_DELAY];
- if (g->anim_delay == 0) // delay must be at least 1
+ if (g->anim_delay < 1) // delay must be at least 1
g->anim_delay = 1;
g->anim_mode = parameter[GFX_ARG_ANIM_MODE];
g->x = parameter[GFX_ARG_X]; // (may be uninitialized,
g->y = parameter[GFX_ARG_Y]; // unlike src_x and src_y)
+ if (g->step_delay < 1) // delay must be at least 1
+ g->step_delay = 1;
+
// this is only used for drawing font characters
g->draw_xoffset = parameter[GFX_ARG_DRAW_XOFFSET];
g->draw_yoffset = parameter[GFX_ARG_DRAW_YOFFSET];
{ EL_SP_ELECTRON, 15 },
{ EL_BALLOON, 16 },
{ EL_SPRING, 17 },
+ { EL_SPRING_LEFT, 17 },
+ { EL_SPRING_RIGHT, 17 },
{ EL_EMC_ANDROID, 18 },
{ -1, -1 },
EL_BOMB,
EL_NUT,
EL_AMOEBA_DROP,
+ EL_AMOEBA_DROPPING,
EL_QUICKSAND_FULL,
EL_QUICKSAND_FAST_FULL,
EL_MAGIC_WALL_FULL,
}
global.autoplay_leveldir = NULL;
+ global.patchtapes_leveldir = NULL;
global.convert_leveldir = NULL;
global.create_images_dir = NULL;
exit(0);
}
- else if (strPrefix(command, "autotest ") ||
- strPrefix(command, "autoplay ") ||
+ else if (strPrefix(command, "autoplay ") ||
strPrefix(command, "autoffwd ") ||
- strPrefix(command, "autowarp "))
+ strPrefix(command, "autowarp ") ||
+ strPrefix(command, "autotest ") ||
+ strPrefix(command, "autofix "))
{
- char *str_ptr = getStringCopy(&command[9]); // read command parameters
+ char *str_ptr = getStringCopy(&command[8]); // read command parameters
global.autoplay_mode =
- (strPrefix(command, "autotest") ? AUTOPLAY_MODE_TEST :
- strPrefix(command, "autoplay") ? AUTOPLAY_MODE_PLAY :
+ (strPrefix(command, "autoplay") ? AUTOPLAY_MODE_PLAY :
strPrefix(command, "autoffwd") ? AUTOPLAY_MODE_FFWD :
strPrefix(command, "autowarp") ? AUTOPLAY_MODE_WARP :
+ strPrefix(command, "autotest") ? AUTOPLAY_MODE_TEST :
+ strPrefix(command, "autofix") ? AUTOPLAY_MODE_FIX :
AUTOPLAY_MODE_NONE);
while (*str_ptr != '\0') // continue parsing string
str_ptr++;
}
- if (global.autoplay_mode == AUTOPLAY_MODE_TEST)
+ if (global.autoplay_mode & AUTOPLAY_WARP_NO_DISPLAY)
program.headless = TRUE;
}
+ else if (strPrefix(command, "patch tapes "))
+ {
+ char *str_ptr = getStringCopy(&command[12]); // read command parameters
+
+ // skip leading whitespace
+ while (*str_ptr == ' ' || *str_ptr == '\t')
+ str_ptr++;
+
+ if (*str_ptr == '\0')
+ Error(ERR_EXIT, "cannot find MODE in command '%s'", command);
+
+ global.patchtapes_mode = str_ptr; // store patch mode
+
+ // advance to next whitespace (or end of string)
+ while (*str_ptr != ' ' && *str_ptr != '\t' && *str_ptr != '\0')
+ str_ptr++;
+
+ while (*str_ptr != '\0') // continue parsing string
+ {
+ // cut leading whitespace from string, replace it by string terminator
+ while (*str_ptr == ' ' || *str_ptr == '\t')
+ *str_ptr++ = '\0';
+
+ if (*str_ptr == '\0') // end of string reached
+ break;
+
+ if (global.patchtapes_leveldir == NULL) // read level set string
+ {
+ global.patchtapes_leveldir = str_ptr;
+ global.patchtapes_all = TRUE; // default: patch all tapes
+
+ for (i = 0; i < MAX_TAPES_PER_SET; i++)
+ global.patchtapes_level[i] = FALSE;
+ }
+ else // read level number string
+ {
+ int level_nr = atoi(str_ptr); // get level_nr value
+
+ if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET)
+ global.patchtapes_level[level_nr] = TRUE;
+
+ global.patchtapes_all = FALSE;
+ }
+
+ // advance string pointer to the next whitespace (or end of string)
+ while (*str_ptr != ' ' && *str_ptr != '\t' && *str_ptr != '\0')
+ str_ptr++;
+ }
+
+ if (global.patchtapes_leveldir == NULL)
+ {
+ if (strEqual(global.patchtapes_mode, "help"))
+ global.patchtapes_leveldir = UNDEFINED_LEVELSET;
+ else
+ Error(ERR_EXIT, "cannot find LEVELDIR in command '%s'", command);
+ }
+
+ program.headless = TRUE;
+ }
else if (strPrefix(command, "convert "))
{
char *str_copy = getStringCopy(strchr(command, ' ') + 1);
InitOverrideArtwork();
force_reload_gfx |= AdjustGraphicsForEMC();
+ force_reload_snd |= AdjustSoundsForEMC();
gfx_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS);
snd_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS);
if (global.autoplay_leveldir)
{
- AutoPlayTape();
+ AutoPlayTapes();
+ return;
+ }
+ else if (global.patchtapes_leveldir)
+ {
+ PatchTapes();
return;
}
else if (global.convert_leveldir)