rnd-19991002-1-src
[rocksndiamonds.git] / src / main.c
index 14756c5ec57383f5f1c9f2462d661e608a4a5c48..3182b47dd9d4cae4b3248d2e98cb5728fbc57ed0 100644 (file)
@@ -78,12 +78,13 @@ short               Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-short          JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short          JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-unsigned long  Elementeigenschaften[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften1[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften2[MAX_ELEMENTS];
 
-int            level_nr, leveldir_nr, num_leveldirs;
+int            level_nr, num_leveldirs;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScrollStepSize;
@@ -101,7 +102,7 @@ int         FrameCounter, TimeFrames, TimePlayed, TimeLeft;
 
 boolean                network_player_action_received = FALSE;
 
-struct LevelDirInfo    leveldir[MAX_LEVDIR_ENTRIES];
+struct LevelDirInfo    *leveldir_first = NULL, *leveldir_current = NULL;
 struct LevelInfo       level;
 struct PlayerInfo      stored_player[MAX_PLAYERS], *local_player = NULL;
 struct HiScore         highscore[MAX_SCORE_ENTRIES];
@@ -109,8 +110,6 @@ struct SoundInfo    Sound[NUM_SOUNDS];
 struct TapeInfo                tape;
 struct OptionInfo      options;
 struct SetupInfo       setup;
-struct SetupFileList   *setup_list = NULL;
-struct SetupFileList   *level_setup_list = NULL;
 struct GameInfo                game;
 struct GlobalInfo      global;
 
@@ -196,7 +195,7 @@ int num_bg_loops = sizeof(background_loop)/sizeof(int);
 
 char *element_info[] =
 {
-  "empty space",
+  "empty space",                               /* 0 */
   "sand",
   "normal wall",
   "round wall",
@@ -206,7 +205,7 @@ char *element_info[] =
   "closed exit",
   "player",
   "bug",
-  "spaceship",
+  "spaceship",                                 /* 10 */
   "yam yam",
   "robot",
   "steel wall",
@@ -216,7 +215,7 @@ char *element_info[] =
   "quicksand with rock",
   "amoeba drop",
   "bomb",
-  "magic wall",
+  "magic wall",                                        /* 20 */
   "speed ball",
   "acid pool",
   "dropping amoeba",
@@ -226,7 +225,7 @@ char *element_info[] =
   "biomaze",
   "burning dynamite",
   "unknown",
-  "magic wheel",
+  "magic wheel",                               /* 30 */
   "running wire",
   "red key",
   "yellow key",
@@ -236,7 +235,7 @@ char *element_info[] =
   "yellow door",
   "green door",
   "blue door",
-  "gray door (opened by red key)",
+  "gray door (opened by red key)",             /* 40 */
   "gray door (opened by yellow key)",
   "gray door (opened by green key)",
   "gray door (opened by blue key)",
@@ -246,7 +245,7 @@ char *element_info[] =
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
-  "wall with diamond",
+  "wall with diamond",                         /* 50 */
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
@@ -256,7 +255,7 @@ char *element_info[] =
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
-  "dark yam yam",
+  "dark yam yam",                              /* 60 */
   "magic wall (BD style)",
   "invisible steel wall",
   "dynabomb",
@@ -266,7 +265,7 @@ char *element_info[] =
   "sokoban object",
   "sokoban empty field",
   "sokoban field with object",
-  "butterfly (starts moving right)",
+  "butterfly (starts moving right)",           /* 70 */
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
@@ -276,7 +275,7 @@ char *element_info[] =
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
-  "yellow player",
+  "yellow player",                             /* 80 */
   "red player",
   "green player",
   "blue player",
@@ -286,7 +285,7 @@ char *element_info[] =
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
-  "spaceship (starts moving left)",
+  "spaceship (starts moving left)",            /* 90 */
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
@@ -296,7 +295,7 @@ char *element_info[] =
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
-  "unknown",
+  "unknown",                                   /* 100 */
   "unknown",
   "unknown",
   "unknown",
@@ -306,7 +305,7 @@ char *element_info[] =
   "open exit",
   "unknown",
   "amoeba",
-  "mole",
+  "mole",                                      /* 110 */
   "penguin",
   "satellite",
   "arrow left",
@@ -316,7 +315,7 @@ char *element_info[] =
   "pig",
   "fire breathing dragon",
   "unknown",
-  "letter ' '",
+  "letter ' '",                                        /* 120 */
   "letter '!'",
   "letter '\"'",
   "letter '#'",
@@ -326,7 +325,7 @@ char *element_info[] =
   "letter '''",
   "letter '('",
   "letter ')'",
-  "letter '*'",
+  "letter '*'",                                        /* 130 */
   "letter '+'",
   "letter ','",
   "letter '-'",
@@ -336,7 +335,7 @@ char *element_info[] =
   "letter '1'",
   "letter '2'",
   "letter '3'",
-  "letter '4'",
+  "letter '4'",                                        /* 140 */
   "letter '5'",
   "letter '6'",
   "letter '7'",
@@ -346,7 +345,7 @@ char *element_info[] =
   "letter ';'",
   "letter '<'",
   "letter '='",
-  "letter '>'",
+  "letter '>'",                                        /* 150 */
   "letter '?'",
   "letter '@'",
   "letter 'A'",
@@ -356,7 +355,7 @@ char *element_info[] =
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
-  "letter 'H'",
+  "letter 'H'",                                        /* 160 */
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
@@ -366,7 +365,7 @@ char *element_info[] =
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
-  "letter 'R'",
+  "letter 'R'",                                        /* 170 */
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
@@ -376,7 +375,7 @@ char *element_info[] =
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
-  "letter 'Ö'",
+  "letter 'Ö'",                                        /* 180 */
   "letter 'Ü'",
   "letter '^'",
   "letter ''",
@@ -386,6 +385,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
+  "letter ''",                                 /* 190 */
   "letter ''",
   "letter ''",
   "letter ''",
@@ -395,8 +395,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
-  "letter ''",
-  "growing wall (horizontally)",
+  "growing wall (horizontally)",               /* 200 */
   "growing wall (vertically)",
   "growing wall (all directions)",
   "unused",
@@ -406,7 +405,7 @@ char *element_info[] =
   "unused",
   "unused",
   "unused",
-  "empty space",
+  "empty space",                               /* 210 */
   "zonk",
   "base",
   "murphy",
@@ -416,7 +415,7 @@ char *element_info[] =
   "exit",
   "orange disk",
   "port (leading right)",
-  "port (leading down)",
+  "port (leading down)",                       /* 220 */
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
@@ -426,7 +425,7 @@ char *element_info[] =
   "snik snak",
   "yellow disk",
   "terminal",
-  "red disk",
+  "red disk",                                  /* 230 */
   "port (vertically)",
   "port (horizontally)",
   "port (all directions)",
@@ -436,7 +435,7 @@ char *element_info[] =
   "chip (right half)",
   "hardware",
   "hardware",
-  "hardware",
+  "hardware",                                  /* 240 */
   "hardware",
   "hardware",
   "hardware",
@@ -446,7 +445,7 @@ char *element_info[] =
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
-  "unknown",
+  "unknown",                                   /* 250 */
   "unknown",
   "unknown",
   "unknown",
@@ -455,37 +454,51 @@ char *element_info[] =
 
   /* 256 */
 
-  "pearl",
+  "pearl",                                     /* (256) */
   "crystal",
   "wall with pearl",
   "wall with crystal",
-  "white door",
+  "white door",                                        /* 260 */
   "gray door (opened by white key)",
   "white key",
-  "force field",
+  "shield (passive)",
   "extra time",
   "switch gate (open)",
   "switch gate (closed)",
   "switch for switch gate",
-  "time gate",
-  "time gate with magic wheel",
-  "green conveyor belt (left)",
-  "green conveyor belt (middle)",
-  "green conveyor belt (right)",
-  "switch for green conveyor belt",
+  "switch for switch gate",
+  "-",
+  "-",                                         /* 270 */
   "red conveyor belt (left)",
   "red conveyor belt (middle)",
   "red conveyor belt (right)",
-  "switch for red conveyor belt",
+  "switch for red conveyor belt (left)",
+  "switch for red conveyor belt (middle)",
+  "switch for red conveyor belt (right)",
+  "yellow conveyor belt (left)",
+  "yellow conveyor belt (middle)",
+  "yellow conveyor belt (right)",
+  "switch for yellow conveyor belt (left)",    /* 280 */
+  "switch for yellow conveyor belt (middle)",
+  "switch for yellow conveyor belt (right)",
+  "green conveyor belt (left)",
+  "green conveyor belt (middle)",
+  "green conveyor belt (right)",
+  "switch for green conveyor belt (left)",
+  "switch for green conveyor belt (middle)",
+  "switch for green conveyor belt (right)",
   "blue conveyor belt (left)",
-  "blue conveyor belt (middle)",
+  "blue conveyor belt (middle)",               /* 290 */
   "blue conveyor belt (right)",
-  "switch for blue conveyor belt",
+  "switch for blue conveyor belt (left)",
+  "switch for blue conveyor belt (middle)",
+  "switch for blue conveyor belt (right)",
   "land mine",
   "mail envelope",
-  "light switch",
+  "light switch (off)",
+  "light switch (on)",
   "sign (exclamation)",
-  "sign (radio activity)",
+  "sign (radio activity)",                     /* 300 */
   "sign (stop)",
   "sign (wheel chair)",
   "sign (parking)",
@@ -495,22 +508,40 @@ char *element_info[] =
   "sign (round)",
   "sign (exit)",
   "sign (yin yang)",
-  "sign (other)",
+  "sign (other)",                              /* 310 */
   "mole (starts moving left)",
   "mole (starts moving right)",
   "mole (starts moving up)",
   "mole (starts moving down)",
-  "steel (?)",
+  "steel wall (slanted)",
   "invisible sand",
+  "dx unknown 15",
+  "dx unknown 42",
   "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
+  "-",                                         /* 320 */
+  "shield (active, kills enemies)",
+  "time gate (open)",
+  "time gate (closed)",
+  "switch for time gate",
+  "switch for time gate",
+  "balloon",
+  "send balloon to the left",
+  "send balloon to the right",
+  "send balloon up",
+  "send balloon down",                         /* 330 */
+  "send balloon in any direction",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",                               /* 340 */
+  "normal wall",
+  "normal wall",
+  "normal wall",
   "-"
 
   /*