* editor.c *
***********************************************************/
+#include <math.h>
+
#include "editor.h"
#include "screens.h"
#include "tools.h"
#define ED_CTRL_ID_SINGLE_ITEMS 0
#define ED_CTRL_ID_CONNECTED_ITEMS 1
#define ED_CTRL_ID_LINE 2
-#define ED_CTRL_ID_TEXT 3
+#define ED_CTRL_ID_ARC 3
#define ED_CTRL_ID_RECTANGLE 4
#define ED_CTRL_ID_FILLED_BOX 5
#define ED_CTRL_ID_WRAP_UP 6
-#define ED_CTRL_ID_PROPERTIES 7
+#define ED_CTRL_ID_TEXT 7
#define ED_CTRL_ID_FLOOD_FILL 8
#define ED_CTRL_ID_WRAP_LEFT 9
-#define ED_CTRL_ID_UNUSED1 10
+#define ED_CTRL_ID_PROPERTIES 10
#define ED_CTRL_ID_WRAP_RIGHT 11
#define ED_CTRL_ID_RANDOM_PLACEMENT 12
#define ED_CTRL_ID_GRAB_BRUSH 13
{ 's', "draw single items" },
{ 'd', "draw connected items" },
{ 'l', "draw lines" },
- { 't', "enter text elements" },
+ { 'a', "draw arcs" },
{ 'r', "draw outline rectangles" },
{ 'R', "draw filled rectangles" },
{ '\0', "wrap (rotate) level up" },
- { '?', "properties of drawing element" },
+ { 't', "enter text elements" },
{ 'f', "flood fill" },
{ '\0', "wrap (rotate) level left" },
- { '\0', "" },
+ { '?', "properties of drawing element" },
{ '\0', "wrap (rotate) level right" },
{ '\0', "random element placement" },
{ 'b', "grab brush" },
if (id == ED_CTRL_ID_SINGLE_ITEMS ||
id == ED_CTRL_ID_CONNECTED_ITEMS ||
id == ED_CTRL_ID_LINE ||
+ id == ED_CTRL_ID_ARC ||
id == ED_CTRL_ID_TEXT ||
id == ED_CTRL_ID_RECTANGLE ||
id == ED_CTRL_ID_FILLED_BOX ||
for (x=0; x<=len_x; x++)
{
- int y = (int)(a * x + 0.5) * (to_y < from_y ? -1 : +1);
-
+ y = (int)(a * x + 0.5) * (to_y < from_y ? -1 : +1);
DrawLineElement(from_x + x, from_y + y, element, change_level);
}
}
for (y=0; y<=len_y; y++)
{
- int x = (int)(a * y + 0.5) * (to_x < from_x ? -1 : +1);
-
+ x = (int)(a * y + 0.5) * (to_x < from_x ? -1 : +1);
DrawLineElement(from_x + x, from_y + y, element, change_level);
}
}
DrawLine(from_x, y, to_x, y, element, change_level);
}
+static void DrawArcExt(int from_x, int from_y, int to_x2, int to_y2,
+ int element, boolean change_level)
+{
+ int to_x = to_x2 - (to_x2 > from_x ? +1 : -1);
+ int to_y = to_y2 - (to_y2 > from_y ? +1 : -1);
+ int len_x = ABS(to_x - from_x);
+ int len_y = ABS(to_y - from_y);
+ int radius, x, y;
+
+ radius = (int)(sqrt((float)(len_x * len_x + len_y * len_y)) + 0.5);
+
+ /* not optimal (some points get drawn twice) but simple,
+ and fast enough for the few points we are drawing */
+
+ for (x=0; x<=radius; x++)
+ {
+ int sx, sy, lx, ly;
+
+ y = (int)(sqrt((float)(radius * radius - x * x)) + 0.5);
+
+ sx = from_x + x * (from_x < to_x2 ? +1 : -1);
+ sy = from_y + y * (from_y < to_y2 ? +1 : -1);
+ lx = sx + level_xpos;
+ ly = sy + level_ypos;
+
+ if (IN_ED_FIELD(sx, sy) && IN_LEV_FIELD(lx, ly))
+ DrawLineElement(sx, sy, element, change_level);
+ }
+
+ for (y=0; y<=radius; y++)
+ {
+ int sx, sy, lx, ly;
+
+ x = (int)(sqrt((float)(radius * radius - y * y)) + 0.5);
+
+ sx = from_x + x * (from_x < to_x2 ? +1 : -1);
+ sy = from_y + y * (from_y < to_y2 ? +1 : -1);
+ lx = sx + level_xpos;
+ ly = sy + level_ypos;
+
+ if (IN_ED_FIELD(sx, sy) && IN_LEV_FIELD(lx, ly))
+ DrawLineElement(sx, sy, element, change_level);
+ }
+}
+
+static void DrawArc(int from_x, int from_y, int to_x, int to_y,
+ int element, boolean change_level)
+{
+ int to_x2 = to_x + (to_x < from_x ? -1 : +1);
+ int to_y2 = to_y + (to_y > from_y ? +1 : -1);
+
+ DrawArcExt(from_x, from_y, to_x2, to_y2, element, change_level);
+}
+
+#if 0
+static void DrawCircle(int from_x, int from_y, int to_x, int to_y,
+ int element, boolean change_level)
+{
+ int to_x2 = to_x + (to_x < from_x ? -1 : +1);
+ int to_y2 = to_y + (to_y > from_y ? +1 : -1);
+ int mirror_to_x2 = from_x - (to_x2 - from_x);
+ int mirror_to_y2 = from_y - (to_y2 - from_y);
+
+ DrawArcExt(from_x, from_y, to_x2, to_y2, element, change_level);
+ DrawArcExt(from_x, from_y, mirror_to_x2, to_y2, element, change_level);
+ DrawArcExt(from_x, from_y, to_x2, mirror_to_y2, element, change_level);
+ DrawArcExt(from_x, from_y, mirror_to_x2, mirror_to_y2, element,change_level);
+}
+#endif
+
static void DrawAreaBorder(int from_x, int from_y, int to_x, int to_y)
{
int from_sx, from_sy;
break;
case ED_CTRL_ID_LINE:
+ case ED_CTRL_ID_ARC:
case ED_CTRL_ID_RECTANGLE:
case ED_CTRL_ID_FILLED_BOX:
case ED_CTRL_ID_GRAB_BRUSH:
if (drawing_function == ED_CTRL_ID_LINE)
draw_func = DrawLine;
+ else if (drawing_function == ED_CTRL_ID_ARC)
+ draw_func = DrawArc;
else if (drawing_function == ED_CTRL_ID_RECTANGLE)
draw_func = DrawRectangle;
else if (drawing_function == ED_CTRL_ID_FILLED_BOX)
case ED_CTRL_ID_SINGLE_ITEMS:
case ED_CTRL_ID_CONNECTED_ITEMS:
case ED_CTRL_ID_LINE:
+ case ED_CTRL_ID_ARC:
case ED_CTRL_ID_TEXT:
case ED_CTRL_ID_RECTANGLE:
case ED_CTRL_ID_FILLED_BOX:
case ED_CTRL_ID_LINE:
infotext = "Drawing line";
break;
+ case ED_CTRL_ID_ARC:
+ infotext = "Drawing arc";
+ break;
case ED_CTRL_ID_TEXT:
infotext = "Setting text cursor";
break;
/* misuse this function to draw brush cursor, if needed */
if (edit_mode == ED_MODE_DRAWING && draw_with_brush && !button_status)
{
- if (IN_ED_FIELD(sx,sy) && IN_LEV_FIELD(lx, ly))
+ if (IN_ED_FIELD(sx, sy) && IN_LEV_FIELD(lx, ly))
CopyBrushToCursor(sx, sy);
else
DeleteBrushFromCursor();
level.high_speed = FALSE;
- strcpy(level.name, "Nameless Level");
- strcpy(level.author, "Anonymous");
+ strcpy(level.name, NAMELESS_LEVEL_NAME);
+ strcpy(level.author, ANONYMOUS_NAME);
for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
level.score[i] = 10;
Ur[STD_LEV_FIELDX-1][STD_LEV_FIELDY-1] = EL_AUSGANG_ZU;
BorderElement = EL_BETON;
+
+ /* try to determine better author name than 'anonymous' */
+ if (strcmp(leveldir[leveldir_nr].author, ANONYMOUS_NAME) != 0)
+ {
+ strncpy(level.author, leveldir[leveldir_nr].author,
+ MAX_LEVEL_AUTHOR_LEN - 1);
+ level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
+ }
+ else
+ {
+ switch (LEVELCLASS(leveldir_nr))
+ {
+ case LEVELCLASS_TUTORIAL:
+ strcpy(level.author, PROGRAM_AUTHOR_STRING);
+ break;
+
+ case LEVELCLASS_CONTRIBUTION:
+ strncpy(level.author, leveldir[leveldir_nr].name,
+ MAX_LEVEL_AUTHOR_LEN - 1);
+ level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
+ break;
+
+ case LEVELCLASS_USER:
+ strncpy(level.author, getRealName(), MAX_LEVEL_AUTHOR_LEN - 1);
+ level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
+ break;
+
+ default:
+ /* keep default value */
+ break;
+ }
+ }
}
void LoadLevel(int level_nr)
level.time = 10;
#endif
- /* determine level author */
- if (leveldir[leveldir_nr].author)
- {
- strncpy(level.author, leveldir[leveldir_nr].author,
- MAX_LEVEL_AUTHOR_LEN - 1);
- level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
- }
- else
- {
- switch (LEVELCLASS(leveldir_nr))
- {
- case LEVELCLASS_TUTORIAL:
- strcpy(level.author, PROGRAM_AUTHOR_STRING);
- break;
-
- case LEVELCLASS_CLASSICS:
- case LEVELCLASS_CONTRIBUTION:
- strncpy(level.author, leveldir[leveldir_nr].name,
- MAX_LEVEL_AUTHOR_LEN - 1);
- level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
- break;
-
- case LEVELCLASS_USER:
- strncpy(level.author, getRealName(), MAX_LEVEL_AUTHOR_LEN - 1);
- level.author[MAX_LEVEL_AUTHOR_LEN - 1] = '\0';
- break;
-
- default:
- /* keep default value */
- break;
- }
- }
-
/* player was faster than monsters in pre-1.0 levels */
if (file_version == FILE_VERSION_1_0 &&
IS_LEVELCLASS_CONTRIBUTION(leveldir_nr))
static void setLevelDirInfoToDefaults(struct LevelDirInfo *ldi)
{
- ldi->name = getStringCopy("non-existing");
- ldi->author = NULL;
+ ldi->name = getStringCopy(ANONYMOUS_NAME);
+ ldi->author = getStringCopy(ANONYMOUS_NAME);
ldi->levels = 0;
ldi->first_level = 0;
ldi->sort_priority = LEVELCLASS_UNDEFINED; /* default: least priority */
{
char *token_value;
int level_series_nr = getLevelSeriesNrFromLevelSeriesName(level_series_name);
- int last_level_nr = 0;
+ int last_level_nr = leveldir[level_series_nr].first_level;
if (!level_series_name)
return 0;
return;
}
+ /* always start with reliable default values */
+ setLevelDirInfoToDefaults(&ldi);
+
ldi.name = getLoginName();
+ ldi.author = getRealName();
ldi.levels = 100;
- ldi.first_level = 0;
+ ldi.first_level = 1;
ldi.sort_priority = LEVELCLASS_USER_START;
ldi.readonly = FALSE;
/* often used screen positions */
#define SX 8
#define SY 8
-#define REAL_SX (SX-2)
-#define REAL_SY (SY-2)
+#define REAL_SX (SX - 2)
+#define REAL_SY (SY - 2)
#define DX 566
#define DY 60
#define VX DX
#define EY (VY - 44)
#define TILEX 32
#define TILEY 32
-#define MINI_TILEX (TILEX/2)
-#define MINI_TILEY (TILEY/2)
-#define MICRO_TILEX (TILEX/8)
-#define MICRO_TILEY (TILEY/8)
-#define MIDPOSX (SCR_FIELDX/2)
-#define MIDPOSY (SCR_FIELDY/2)
-#define SXSIZE (SCR_FIELDX*TILEX)
-#define SYSIZE (SCR_FIELDY*TILEY)
-#define FXSIZE ((SCR_FIELDX+2)*TILEX)
-#define FYSIZE ((SCR_FIELDY+2)*TILEY)
+#define MINI_TILEX (TILEX / 2)
+#define MINI_TILEY (TILEY / 2)
+#define MICRO_TILEX (TILEX / 8)
+#define MICRO_TILEY (TILEY / 8)
+#define MIDPOSX (SCR_FIELDX / 2)
+#define MIDPOSY (SCR_FIELDY / 2)
+#define SXSIZE (SCR_FIELDX * TILEX)
+#define SYSIZE (SCR_FIELDY * TILEY)
+#define FXSIZE ((SCR_FIELDX + 2) * TILEX)
+#define FYSIZE ((SCR_FIELDY + 2) * TILEY)
#define DXSIZE 100
#define DYSIZE 280
#define VXSIZE DXSIZE
#define VYSIZE 100
#define EXSIZE DXSIZE
#define EYSIZE (VXSIZE + 44)
-#define FULL_SXSIZE (2+SXSIZE+2)
-#define FULL_SYSIZE (2+SYSIZE+2)
+#define FULL_SXSIZE (2 + SXSIZE + 2)
+#define FULL_SYSIZE (2 + SYSIZE + 2)
#define MICROLEV_XSIZE ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
#define MICROLEV_YSIZE ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
#define MICROLEV_XPOS (SX + (SXSIZE - MICROLEV_XSIZE) / 2)
#define MICROLEV_YPOS (SX + 12 * TILEY - MICRO_TILEY)
-#define MICROLABEL_YPOS (MICROLEV_YPOS+MICROLEV_YSIZE+12)
+#define MICROLABEL_YPOS (MICROLEV_YPOS + MICROLEV_YSIZE + 7)
#define FONT1_XSIZE 32
#define FONT1_YSIZE 32
#define FONT2_XSIZE 14
/* graphics from "RocksFont" */
#define GFX_CHAR_START (GFX_START_ROCKSFONT)
-#define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
-#define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33)
-#define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0+34)
-#define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0+36)
-#define GFX_CHAR_PROZ (GFX_CHAR_ASCII0+37)
-#define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0+39)
-#define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0+40)
-#define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0+41)
-#define GFX_CHAR_PLUS (GFX_CHAR_ASCII0+43)
-#define GFX_CHAR_KOMMA (GFX_CHAR_ASCII0+44)
-#define GFX_CHAR_MINUS (GFX_CHAR_ASCII0+45)
-#define GFX_CHAR_PUNKT (GFX_CHAR_ASCII0+46)
-#define GFX_CHAR_SLASH (GFX_CHAR_ASCII0+47)
-#define GFX_CHAR_0 (GFX_CHAR_ASCII0+48)
-#define GFX_CHAR_9 (GFX_CHAR_ASCII0+57)
-#define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0+58)
-#define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0+59)
-#define GFX_CHAR_LT (GFX_CHAR_ASCII0+60)
-#define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0+61)
-#define GFX_CHAR_GT (GFX_CHAR_ASCII0+62)
-#define GFX_CHAR_FRAGE (GFX_CHAR_ASCII0+63)
-#define GFX_CHAR_AT (GFX_CHAR_ASCII0+64)
-#define GFX_CHAR_A (GFX_CHAR_ASCII0+65)
-#define GFX_CHAR_Z (GFX_CHAR_ASCII0+90)
-#define GFX_CHAR_AE (GFX_CHAR_ASCII0+91)
-#define GFX_CHAR_OE (GFX_CHAR_ASCII0+92)
-#define GFX_CHAR_UE (GFX_CHAR_ASCII0+93)
-#define GFX_CHAR_COPY (GFX_CHAR_ASCII0+94)
-#define GFX_CHAR_END (GFX_CHAR_START+79)
+#define GFX_CHAR_ASCII0 (GFX_CHAR_START - 32)
+#define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0 + 33)
+#define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0 + 34)
+#define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0 + 36)
+#define GFX_CHAR_PROZ (GFX_CHAR_ASCII0 + 37)
+#define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0 + 39)
+#define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0 + 40)
+#define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0 + 41)
+#define GFX_CHAR_PLUS (GFX_CHAR_ASCII0 + 43)
+#define GFX_CHAR_KOMMA (GFX_CHAR_ASCII0 + 44)
+#define GFX_CHAR_MINUS (GFX_CHAR_ASCII0 + 45)
+#define GFX_CHAR_PUNKT (GFX_CHAR_ASCII0 + 46)
+#define GFX_CHAR_SLASH (GFX_CHAR_ASCII0 + 47)
+#define GFX_CHAR_0 (GFX_CHAR_ASCII0 + 48)
+#define GFX_CHAR_9 (GFX_CHAR_ASCII0 + 57)
+#define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0 + 58)
+#define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0 + 59)
+#define GFX_CHAR_LT (GFX_CHAR_ASCII0 + 60)
+#define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0 + 61)
+#define GFX_CHAR_GT (GFX_CHAR_ASCII0 + 62)
+#define GFX_CHAR_FRAGE (GFX_CHAR_ASCII0 + 63)
+#define GFX_CHAR_AT (GFX_CHAR_ASCII0 + 64)
+#define GFX_CHAR_A (GFX_CHAR_ASCII0 + 65)
+#define GFX_CHAR_Z (GFX_CHAR_ASCII0 + 90)
+#define GFX_CHAR_AE (GFX_CHAR_ASCII0 + 91)
+#define GFX_CHAR_OE (GFX_CHAR_ASCII0 + 92)
+#define GFX_CHAR_UE (GFX_CHAR_ASCII0 + 93)
+#define GFX_CHAR_COPY (GFX_CHAR_ASCII0 + 94)
+#define GFX_CHAR_END (GFX_CHAR_START + 79)
/* the names of the sounds */
#define SND_ALCHEMY 0
/* default name for empty highscore entry */
#define EMPTY_PLAYER_NAME "no name"
+/* default name for unknown player names */
+#define ANONYMOUS_NAME "anonymous"
+
+/* default name for new levels */
+#define NAMELESS_LEVEL_NAME "nameless level"
+
/* values for button_status */
#define MB_NOT_PRESSED FALSE
#define MB_RELEASED FALSE
#define DOOR_GFX_PAGEY2 DYSIZE
/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
-#define ANIM_NORMAL 0
-#define ANIM_OSCILLATE 1
-#define ANIM_REVERSE 2
+#define ANIM_NORMAL 0
+#define ANIM_OSCILLATE 1
+#define ANIM_REVERSE 2
/* values for game_emulation */
#define EMU_NONE 0
{
struct passwd *pwd;
- if (!(pwd = getpwuid(getuid())))
- return "ANONYMOUS";
+ if ((pwd = getpwuid(getuid())) == NULL)
+ return ANONYMOUS_NAME;
else
return pwd->pw_name;
}
{
struct passwd *pwd;
- if (!(pwd = getpwuid(getuid())))
- return "ANONYMOUS";
+ if ((pwd = getpwuid(getuid())) == NULL || strlen(pwd->pw_gecos) == 0)
+ return ANONYMOUS_NAME;
else
- return pwd->pw_gecos;
+ {
+ static char real_name[1024];
+ char *from_ptr = pwd->pw_gecos, *to_ptr = real_name;
+
+ if (strchr(pwd->pw_gecos, 'ß') == NULL)
+ return pwd->pw_gecos;
+
+ /* the user's real name contains a 'ß' character (german sharp s),
+ which has no equivalent in upper case letters (which our fonts use) */
+ while (*from_ptr != '\0' && (long)(to_ptr - real_name) < 1024 - 2)
+ {
+ if (*from_ptr != 'ß')
+ *to_ptr++ = *from_ptr++;
+ else
+ {
+ from_ptr++;
+ *to_ptr++ = 's';
+ *to_ptr++ = 's';
+ }
+ }
+ *to_ptr = '\0';
+
+ return real_name;
+ }
}
char *getHomeDir()
GFX_MORAST_LEER,1,100, HA_NEXT,
GFX_BETON,1,100, HA_NEXT,
GFX_MAUERWERK,1,100, HA_NEXT,
- GFX_MAUER_R1,3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
- GFX_MAUER_L1,3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10, HA_NEXT,
+ GFX_MAUER_L1, 3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
+ GFX_MAUER_R1, 3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
+ GFX_MAUER_UP, 3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10,
+ GFX_MAUER_DOWN,3,4, GFX_MAUERWERK,1,20, GFX_LEERRAUM,1,10, HA_NEXT,
GFX_UNSICHTBAR,1,100, HA_NEXT,
GFX_FELSBODEN,1,100, HA_NEXT,
GFX_CHAR_A,30,4, GFX_CHAR_AUSRUF,32,4, HA_NEXT,
GFX_AUSGANG_AUF+2,1,2, GFX_AUSGANG_AUF+1,1,2, HA_NEXT,
GFX_AUSGANG_AUF+0,4,2, GFX_AUSGANG_AUF+3,1,2,
GFX_AUSGANG_AUF+2,1,2, GFX_AUSGANG_AUF+1,1,2, HA_NEXT,
+ GFX_SOKOBAN_OBJEKT,1,100, HA_NEXT,
+ GFX_SOKOBAN_FELD_LEER,1,100, HA_NEXT,
+ GFX_SOKOBAN_FELD_VOLL,1,100, HA_NEXT,
+ GFX_SPEED_PILL,1,100, HA_NEXT,
HA_END
};
static char *helpscreen_eltext[][2] =
{"Quicksand: You cannot pass it,", "but rocks can fall though it"},
{"Massive Wall:", "Nothing can go through it"},
{"Normal Wall: You can't go through", "it, but you can bomb it away"},
- {"Growing Wall: Grows to the left or", "right if there is an empty field"},
+ {"Growing Wall: Grows in several di-", "rections if there is an empty field"},
{"Invisible Wall: Behaves like normal","wall, but is invisible"},
{"Old Wall: Like normal wall, but", "some things can fall down from it"},
{"Letter Wall: Looks like a letter,", "behaves like a normal wall"},
{"Magic Wall (BD style):", "Changes rocks and BD style diamonds"},
{"Exit door: Opens if you have enough","emeralds to finish the level"},
{"Open exit door: Enter here to leave","the level and exit the actual game"},
+ {"Sokoban element: Object which must", "be pushed to an empty field"},
+ {"Sokoban element: Empty field where", "a Sokoban object can be placed on"},
+ {"Sokoban element: Field with object", "which can be pushed away"},
+ {"Speed pill: Lets the player run", "twice as fast as normally"},
};
static int num_helpscreen_els = sizeof(helpscreen_eltext)/(2*sizeof(char *));
}
/* redraw micro level label, if needed */
- if (DelayReached(&label_delay, MICROLEVEL_LABEL_DELAY))
+ if (strcmp(level.name, NAMELESS_LEVEL_NAME) != 0 &&
+ strcmp(level.author, ANONYMOUS_NAME) != 0 &&
+ strcmp(level.author, leveldir[leveldir_nr].name) != 0 &&
+ DelayReached(&label_delay, MICROLEVEL_LABEL_DELAY))
{
label_counter = (label_counter + 1) % 23;
label_state = (label_counter >= 0 && label_counter <= 7 ? 1 :