/* for DrawSetupScreen(), HandleSetupScreen() */
#define SETUP_SCREEN_POS_START 2
-#define SETUP_SCREEN_POS_END 16
+#define SETUP_SCREEN_POS_END (SCR_FIELDY - 1)
#define SETUP_SCREEN_POS_EMPTY1 (SETUP_SCREEN_POS_END - 2)
#define SETUP_SCREEN_POS_EMPTY2 (SETUP_SCREEN_POS_END - 2)
/* for HandleSetupInputScreen() */
#define SETUPINPUT_SCREEN_POS_START 2
-#define SETUPINPUT_SCREEN_POS_END 15
+#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 2)
#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3)
#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1)
/* for HandleChooseLevel() */
-#define MAX_LEVEL_SERIES_ON_SCREEN 15
+#define MAX_LEVEL_SERIES_ON_SCREEN (SCR_FIELDY - 2)
#ifdef MSDOS
extern unsigned char get_ascii(KeySym);
for(i=2; i<10; i++)
DrawGraphic(0, i, GFX_KUGEL_BLAU);
- DrawGraphic(10, 3, GFX_PFEIL_L);
- DrawGraphic(14, 3, GFX_PFEIL_R);
+ DrawGraphic(10, 3, GFX_PFEIL_LEFT);
+ DrawGraphic(14, 3, GFX_PFEIL_RIGHT);
DrawText(SX + 56, SY + 326, "A Game by Artsoft Entertainment",
FS_SMALL, FC_RED);
GFX_MAMPFER2+1,1,1, GFX_MAMPFER2+0,1,1, HA_NEXT,
GFX_ROBOT+0,4,1, GFX_ROBOT+3,1,1, GFX_ROBOT+2,1,1,
GFX_ROBOT+1,1,1, GFX_ROBOT+0,1,1, HA_NEXT,
- GFX_MAULWURF_DOWN,4,2,
- GFX_MAULWURF_UP,4,2,
- GFX_MAULWURF_LEFT,4,2,
- GFX_MAULWURF_RIGHT,4,2, HA_NEXT,
+ GFX_MOLE_DOWN,4,2,
+ GFX_MOLE_UP,4,2,
+ GFX_MOLE_LEFT,4,2,
+ GFX_MOLE_RIGHT,4,2, HA_NEXT,
GFX_PINGUIN_DOWN,4,2,
GFX_PINGUIN_UP,4,2,
GFX_PINGUIN_LEFT,4,2,
{"Cruncher: Eats diamonds and you,", "if you're not careful"},
{"Cruncher (BD style):", "Eats almost everything"},
{"Robot: Tries to kill the player", ""},
- {"The mole: You must guide him savely","to the exit; he will follow you"},
+ {"The mole: Eats the amoeba and turns","empty space into normal sand"},
{"The penguin: Guide him to the exit,","but keep him away from monsters!"},
{"The Pig: Harmless, but eats all", "gems it can get"},
{"The Dragon: Breathes fire,", "especially to some monsters"},
}
if (((key >= XK_A && key <= XK_Z) || (key >= XK_a && key <= XK_z)) &&
- xpos < MAX_NAMELEN - 1)
+ xpos < MAX_PLAYER_NAME_LEN)
{
char ascii;
for(i=0; i<num_page_entries; i++)
{
- strncpy(buffer, leveldir[first_entry + i].name , SCR_FIELDX - 1);
+ strncpy(buffer, leveldir[first_entry + i].name_short , SCR_FIELDX - 1);
buffer[SCR_FIELDX - 1] = '\0';
DrawText(SX + 32, SY + (i + 2) * 32, buffer,
FS_BIG, leveldir[first_entry + i].color);
}
if (first_entry > 0)
- DrawGraphic(0, 1, GFX_PFEIL_O);
+ DrawGraphic(0, 1, GFX_PFEIL_UP);
if (first_entry + num_page_entries < num_leveldirs)
- DrawGraphic(0, MAX_LEVEL_SERIES_ON_SCREEN + 1, GFX_PFEIL_U);
+ DrawGraphic(0, MAX_LEVEL_SERIES_ON_SCREEN + 1, GFX_PFEIL_DOWN);
}
static void drawChooseLevelInfo(int leveldir_nr)
int x, last_redraw_mask = redraw_mask;
XFillRectangle(display, drawto, gc, SX + 32, SY + 32, SXSIZE - 32, 32);
+
+#if 0
DrawTextFCentered(40, FC_RED, "%3d levels (%s)",
leveldir[leveldir_nr].levels,
leveldir[leveldir_nr].readonly ? "readonly" : "writable");
+#else
+ DrawTextFCentered(40, FC_RED, "%3d levels (%s)",
+ leveldir[leveldir_nr].levels,
+ leveldir[leveldir_nr].class_desc);
+#endif
/* let BackToFront() redraw only what is needed */
redraw_mask = last_redraw_mask | REDRAW_TILES;
void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
{
static int choice = 3;
- static int first_entry = 0;
+ static int first_entry = -1;
static unsigned long choose_delay = 0;
static int redraw = TRUE;
int x = (mx + 32 - SX) / 32, y = (my + 32 - SY) / 32;
if (button == MB_MENU_INITIALIZE)
{
- redraw = TRUE;
- choice = leveldir_nr + 3 - first_entry;
-
- if (choice > num_page_entries + 2)
+ if (first_entry == -1)
{
- choice = num_page_entries + 2;
- first_entry = num_leveldirs - num_page_entries;
+ first_entry = MAX(0, leveldir_nr - num_page_entries + 1);
+ choice = leveldir_nr - first_entry + 3;
}
drawChooseLevelList(first_entry, num_page_entries);
drawChooseLevelInfo(leveldir_nr);
+ redraw = TRUE;
}
if (redraw)
y = choice + dy;
}
else
- x = y = 0;
+ x = y = 0; /* no action */
+
+ if (ABS(dy) == SCR_FIELDY) /* handle XK_Page_Up, XK_Page_Down */
+ {
+ dy = SIGN(dy);
+ step = num_page_entries - 1;
+ x = 1;
+ y = (dy < 0 ? 2 : num_page_entries + 3);
+ }
}
if (x == 1 && y == 2)
if (first_entry > 0 &&
(dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY)))
{
-#if 0
- first_entry--;
-#else
first_entry -= step;
if (first_entry < 0)
first_entry = 0;
-#endif
+
drawChooseLevelList(first_entry, num_page_entries);
- drawChooseLevelInfo(first_entry);
+ drawChooseLevelInfo(first_entry + choice - 3);
DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
return;
}
if (first_entry + num_page_entries < num_leveldirs &&
(dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY)))
{
-#if 0
- first_entry++;
-#else
first_entry += step;
if (first_entry + num_page_entries > num_leveldirs)
- first_entry = num_leveldirs - num_page_entries;
-#endif
+ first_entry = MAX(0, num_leveldirs - num_page_entries);
+
drawChooseLevelList(first_entry, num_page_entries);
- drawChooseLevelInfo(first_entry + num_page_entries - 1);
+ drawChooseLevelInfo(first_entry + choice - 3);
DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
return;
}
DrawGraphic(0, 3, GFX_KUGEL_BLAU);
DrawGraphic(0, 4, GFX_KUGEL_BLAU);
DrawGraphic(0, 15, GFX_KUGEL_BLAU);
- DrawGraphic(10, 2, GFX_PFEIL_L);
- DrawGraphic(12, 2, GFX_PFEIL_R);
+ DrawGraphic(10, 2, GFX_PFEIL_LEFT);
+ DrawGraphic(12, 2, GFX_PFEIL_RIGHT);
DrawText(SX+32, SY+2*32, "Player:", FS_BIG, FC_GREEN);
DrawText(SX+32, SY+3*32, "Device:", FS_BIG, FC_GREEN);
}
DrawText(SX+32, SY+5*32, "Actual Settings:", FS_BIG, FC_GREEN);
- DrawGraphic(1, 6, GFX_PFEIL_L);
- DrawGraphic(1, 7, GFX_PFEIL_R);
- DrawGraphic(1, 8, GFX_PFEIL_O);
- DrawGraphic(1, 9, GFX_PFEIL_U);
+ DrawGraphic(1, 6, GFX_PFEIL_LEFT);
+ DrawGraphic(1, 7, GFX_PFEIL_RIGHT);
+ DrawGraphic(1, 8, GFX_PFEIL_UP);
+ DrawGraphic(1, 9, GFX_PFEIL_DOWN);
DrawText(SX+2*32, SY+6*32, ":", FS_BIG, FC_BLUE);
DrawText(SX+2*32, SY+7*32, ":", FS_BIG, FC_BLUE);
DrawText(SX+2*32, SY+8*32, ":", FS_BIG, FC_BLUE);