rnd-20030104-1-src
[rocksndiamonds.git] / src / main.c
index 2a0d656655036ea0cbab99364b0d171b9245674f..46277b95ad0dccae43801e9992d668be4fe2de28 100644 (file)
 #include "events.h"
 
 GC             tile_clip_gc;
+#if 0
 Bitmap        *pix[NUM_BITMAPS];
+#endif
+Bitmap        *bitmap_db_field, *bitmap_db_door;
 Pixmap         tile_clipmask[NUM_TILES];
 DrawBuffer     *fieldbuffer;
 DrawBuffer     *drawto_field;
@@ -42,6 +45,7 @@ short         Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short          GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -55,7 +59,7 @@ int           lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 int            FX = SX, FY = SY, ScrollStepSize;
 int            ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
 int            ScreenGfxPos = 0;
-int            BorderElement = EL_BETON;
+int            BorderElement = EL_STEELWALL;
 int            GameFrameDelay = GAME_FRAME_DELAY;
 int            FfwdFrameDelay = FFWD_FRAME_DELAY;
 int            BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1;
@@ -136,224 +140,37 @@ char *sound_name[NUM_SOUNDS] =
   "gate.wav"
 };
 
-struct SoundEffectInfo sound_effects[] =
+/* this is used to reduce memory usage of the different animation types */
+int graphics_action_mapping[] =
 {
-  /* sounds for Boulder Dash style elements and actions */
-  { "bd_empty_space.digging",          "empty.wav"             },
-  { "bd_sand.digging",                 "schlurf.wav"           },
-  { "bd_diamond.collecting",           "pong.wav"              },
-  { "bd_diamond.impact",               "pling.wav"             },
-  { "bd_rock.pushing",                 "pusch.wav"             },
-  { "bd_rock.impact",                  "klopf.wav"             },
-  { "bd_magic_wall.activating",                "quirk.wav"             },
-  { "bd_magic_wall.changing",          "quirk.wav"             },
-  { "bd_magic_wall.running",           "miep.wav"              },
-  { "bd_amoeba.waiting",               SND_FILE_UNDEFINED      },
-  { "bd_amoeba.creating",              "amoebe.wav"            },
-  { "bd_amoeba.turning_to_gem",                "pling.wav"             },
-  { "bd_amoeba.turning_to_rock",       "klopf.wav"             },
-  { "bd_butterfly.moving",             "klapper.wav"           },
-  { "bd_butterfly.waiting",            "klapper.wav"           },
-  { "bd_firefly.moving",               "roehr.wav"             },
-  { "bd_firefly.waiting",              "roehr.wav"             },
-  { "bd_exit.entering",                        "buing.wav"             },
-
-  /* sounds for Supaplex style elements and actions */
-  { "sp_empty_space.digging",          "empty.wav"             },
-  { "sp_base.digging",                 "base.wav"              },
-  { "sp_buggy_base.digging",           "base.wav"              },
-  { "sp_buggy_base.activating",                "bug.wav"               },
-  { "sp_infotron.collecting",          "infotron.wav"          },
-  { "sp_infotron.impact",              "pling.wav"             },
-  { "sp_zonk.pushing",                 "zonkpush.wav"          },
-  { "sp_zonk.impact",                  "zonkdown.wav"          },
-  { "sp_disk_red.collecting",          "infotron.wav"          },
-  { "sp_disk_orange.pushing",          "zonkpush.wav"          },
-  { "sp_disk_yellow.pushing",          "pusch.wav"             },
-  { "sp_port.passing",                 "gate.wav"              },
-  { "sp_exit.entering",                        "exit.wav"              },
-  { "sp_element.exploding",            "booom.wav"             },
-  { "sp_sniksnak.moving",              SND_FILE_UNDEFINED      },
-  { "sp_sniksnak.waiting",             SND_FILE_UNDEFINED      },
-  { "sp_electron.moving",              SND_FILE_UNDEFINED      },
-  { "sp_electron.waiting",             SND_FILE_UNDEFINED      },
-  { "sp_terminal.activating",          SND_FILE_UNDEFINED      },
-
-  /* sounds for Sokoban style elements and actions */
-  { "sokoban_object.pushing",          "pusch.wav"             },
-  { "sokoban_field.filling",           "deng.wav"              },
-  { "sokoban_field.clearing",          SND_FILE_UNDEFINED      },
-  { "sokoban_game.solving",            "buing.wav"             },
-
-  /* sounds for Emerald Mine style elements and actions */
-  { "empty_space.digging",             "empty.wav"             },
-  { "sand.digging",                    "schlurf.wav"           },
-  { "emerald.collecting",              "pong.wav"              },
-  { "emerald.impact",                  "pling.wav"             },
-  { "diamond.collecting",              "pong.wav"              },
-  { "diamond.impact",                  "pling.wav"             },
-  { "diamond.breaking",                        "quirk.wav"             },
-  { "rock.pushing",                    "pusch.wav"             },
-  { "rock.impact",                     "klopf.wav"             },
-  { "bomb.pushing",                    "pusch.wav"             },
-  { "nut.pushing",                     "knurk.wav"             },
-  { "nut.cracking",                    "knack.wav"             },
-  { "nut.impact",                      "klumpf.wav"            },
-  { "dynamite.collecting",             "pong.wav"              },
-  { "dynamite.placing",                        "deng.wav"              },
-  { "dynamite.burning",                        "zisch.wav"             },
-  { "key.collecting",                  "pong.wav"              },
-  { "gate.passing",                    "gate.wav"              },
-  { "bug.moving",                      "klapper.wav"           },
-  { "bug.waiting",                     "klapper.wav"           },
-  { "spaceship.moving",                        "roehr.wav"             },
-  { "spaceship.waiting",               "roehr.wav"             },
-  { "yamyam.moving",                   SND_FILE_UNDEFINED      },
-  { "yamyam.waiting",                  "njam.wav"              },
-  { "yamyam.eating_diamond",           SND_FILE_UNDEFINED      },
-  { "robot.stepping",                  "schlurf.wav"           },
-  { "robot.waiting",                   SND_FILE_UNDEFINED      },
-  { "robot_wheel.activating",          "deng.wav"              },
-  { "robot_wheel.running",             "miep.wav"              },
-  { "magic_wall.activating",           "quirk.wav"             },
-  { "magic_wall.changing",             "quirk.wav"             },
-  { "magic_wall.running",              "miep.wav"              },
-  { "amoeba.waiting",                  SND_FILE_UNDEFINED      },
-  { "amoeba.creating",                 "amoebe.wav"            },
-  { "amoeba.dropping",                 SND_FILE_UNDEFINED      },
-  { "acid.splashing",                  "blurb.wav"             },
-  { "quicksand.filling",               SND_FILE_UNDEFINED      },
-  { "quicksand.slipping_through",      SND_FILE_UNDEFINED      },
-  { "quicksand.emptying",              SND_FILE_UNDEFINED      },
-  { "exit.opening",                    "oeffnen.wav"           },
-  { "exit.entering",                   "buing.wav"             },
-
-  /* sounds for Emerald Mine Club style elements and actions */
-  { "balloon.moving",                  SND_FILE_UNDEFINED      },
-  { "balloon.waiting",                 SND_FILE_UNDEFINED      },
-  { "balloon.pushing",                 "schlurf.wav"           },
-  { "balloon_switch.activating",       SND_FILE_UNDEFINED      },
-  { "spring.moving",                   SND_FILE_UNDEFINED      },
-  { "spring.pushing",                  "pusch.wav"             },
-  { "spring.impact",                   "klopf.wav"             },
-  { "wall.growing",                    SND_FILE_UNDEFINED      },
-
-  /* sounds for Diamond Caves style elements and actions */
-  { "pearl.collecting",                        "pong.wav"              },
-  { "pearl.breaking",                  "knack.wav"             },
-  { "pearl.impact",                    "pling.wav"             },
-  { "crystal.collecting",              "pong.wav"              },
-  { "crystal.impact",                  "pling.wav"             },
-  { "envelope.collecting",             "pong.wav"              },
-  { "sand_invisible.digging",          "schlurf.wav"           },
-  { "shield_passive.collecting",       "pong.wav"              },
-  { "shield_passive.activated",                SND_FILE_UNDEFINED      },
-  { "shield_active.collecting",                "pong.wav"              },
-  { "shield_active.activated",         SND_FILE_UNDEFINED      },
-  { "extra_time.collecting",           "gong.wav"              },
-  { "mole.moving",                     SND_FILE_UNDEFINED      },
-  { "mole.waiting",                    SND_FILE_UNDEFINED      },
-  { "mole.eating_amoeba",              "blurb.wav"             },
-  { "switchgate_switch.activating",    SND_FILE_UNDEFINED      },
-  { "switchgate.opening",              "oeffnen.wav"           },
-  { "switchgate.closing",              "oeffnen.wav"           },
-  { "switchgate.passing",              "gate.wav"              },
-  { "timegate_wheel.activating",       "deng.wav"              },
-  { "timegate_wheel.running",          "miep.wav"              },
-  { "timegate.opening",                        "oeffnen.wav"           },
-  { "timegate.closing",                        "oeffnen.wav"           },
-  { "timegate.passing",                        "gate.wav"              },
-  { "conveyor_belt_switch.activating", SND_FILE_UNDEFINED      },
-  { "conveyor_belt.running",           SND_FILE_UNDEFINED      },
-  { "light_switch.activating",         SND_FILE_UNDEFINED      },
-  { "light_switch.deactivating",       SND_FILE_UNDEFINED      },
-
-  /* sounds for DX Boulderdash style elements and actions */
-  { "dx_bomb.pushing",                 "pusch.wav"             },
-  { "trap_inactive.digging",           "schlurf.wav"           },
-  { "trap.activating",                 SND_FILE_UNDEFINED      },
-  { "tube.passing",                    SND_FILE_UNDEFINED      },
-
-  /* sounds for Rocks'n'Diamonds style elements and actions */
-  { "amoeba.turning_to_gem",           "pling.wav"             },
-  { "amoeba.turning_to_rock",          "klopf.wav"             },
-  { "speed_pill.collecting",           "pong.wav"              },
-  { "dynabomb_nr.collecting",          "pong.wav"              },
-  { "dynabomb_sz.collecting",          "pong.wav"              },
-  { "dynabomb_xl.collecting",          "pong.wav"              },
-  { "dynabomb.placing",                        "deng.wav"              },
-  { "dynabomb.burning",                        "zisch.wav"             },
-  { "satellite.moving",                        SND_FILE_UNDEFINED      },
-  { "satellite.waiting",               SND_FILE_UNDEFINED      },
-  { "satellite.pushing",               "pusch.wav"             },
-  { "lamp.activating",                 "deng.wav"              },
-  { "lamp.deactivating",               "deng.wav"              },
-  { "time_orb_full.collecting",                "gong.wav"              },
-  { "time_orb_full.impact",            "deng.wav"              },
-  { "time_orb_empty.pushing",          "pusch.wav"             },
-  { "time_orb_empty.impact",           "deng.wav"              },
-  { "gameoflife.waiting",              SND_FILE_UNDEFINED      },
-  { "gameoflife.creating",             "amoebe.wav"            },
-  { "biomaze.waiting",                 SND_FILE_UNDEFINED      },
-  { "biomaze.creating",                        "amoebe.wav"            },
-  { "pacman.moving",                   SND_FILE_UNDEFINED      },
-  { "pacman.waiting",                  SND_FILE_UNDEFINED      },
-  { "pacman.eating_amoeba",            SND_FILE_UNDEFINED      },
-  { "dark_yamyam.moving",              SND_FILE_UNDEFINED      },
-  { "dark_yamyam.waiting",             "njam.wav"              },
-  { "dark_yamyam.eating_any",          SND_FILE_UNDEFINED      },
-  { "penguin.moving",                  SND_FILE_UNDEFINED      },
-  { "penguin.waiting",                 SND_FILE_UNDEFINED      },
-  { "penguin.entering_exit",           "buing.wav"             },
-  { "pig.moving",                      SND_FILE_UNDEFINED      },
-  { "pig.waiting",                     SND_FILE_UNDEFINED      },
-  { "pig.eating_gem",                  SND_FILE_UNDEFINED      },
-  { "dragon.moving",                   SND_FILE_UNDEFINED      },
-  { "dragon.waiting",                  SND_FILE_UNDEFINED      },
-  { "dragon.attacking",                        SND_FILE_UNDEFINED      },
-
-  /* sounds for generic elements and actions */
-  { "player.dying",                    "autsch.wav"            },
-  { "element.exploding",               "roaaar.wav"            },
-
-  /* sounds for other game actions */
-  { "game.starting",                   SND_FILE_UNDEFINED      },
-  { "game.running_out_of_time",                "gong.wav"              },
-  { "game.leveltime_bonus",            "sirr.wav"              },
-  { "game.losing",                     "lachen.wav"            },
-  { "game.winning",                    SND_FILE_UNDEFINED      },
-
-  /* sounds for other non-game actions */
-  { "menu.door_opening",               "oeffnen.wav"           },
-  { "menu.door_closing",               "oeffnen.wav"           },
-  { "menu.hall_of_fame",               "halloffame.wav"        },
-  { "menu.info_screen",                        "rhythmloop.wav"        },
-
-#if 0
-  { "[not used]",                      "antigrav.wav"          },
-  { "[not used]",                      "bong.wav"              },
-  { "[not used]",                      "fuel.wav"              },
-  { "[not used]",                      "holz.wav"              },
-  { "[not used]",                      "hui.wav"               },
-  { "[not used]",                      "kabumm.wav"            },
-  { "[not used]",                      "kink.wav"              },
-  { "[not used]",                      "kling.wav"             },
-  { "[not used]",                      "krach.wav"             },
-  { "[not used]",                      "laser.wav"             },
-  { "[not used]",                      "quiek.wav"             },
-  { "[not used]",                      "rumms.wav"             },
-  { "[not used]",                      "schlopp.wav"           },
-  { "[not used]",                      "schrff.wav"            },
-  { "[not used]",                      "schwirr.wav"           },
-  { "[not used]",                      "slurp.wav"             },
-  { "[not used]",                      "sproing.wav"           },
-  { "[not used]",                      "warnton.wav"           },
-  { "[not used]",                      "whoosh.wav"            },
-  { "[not used]",                      "boom.wav"              },
-#endif
+  0,           /* GFX_ACTION_DEFAULT           (0)  */
+  0,           /* GFX_ACTION_WAITING           (1)  */
+
+  1,           /* GFX_ACTION_FALLING           (2)  */
+  2,           /* GFX_ACTION_MOVING            (3)  */
+  3,           /* GFX_ACTION_DIGGING           (4)  */
+  4,           /* GFX_ACTION_SNAPPING          (5)  */
+  5,           /* GFX_ACTION_COLLECTING        (6)  */
+  6,           /* GFX_ACTION_PUSHING           (7)  */
+
+  7,           /* GFX_ACTION_PASSING           (8)  */
+  7,           /* GFX_ACTION_IMPACT            (9)  */
+  7,           /* GFX_ACTION_CRACKING          (10) */
+  7,           /* GFX_ACTION_BREAKING          (11) */
+  7,           /* GFX_ACTION_ACTIVATING        (12) */
+  7,           /* GFX_ACTION_OPENING           (13) */
+  7,           /* GFX_ACTION_CLOSING           (14) */
+  7,           /* GFX_ACTION_EATING            (15) */
+  7,           /* GFX_ACTION_ATTACKING         (16) */
+  7,           /* GFX_ACTION_GROWING           (17) */
+  7,           /* GFX_ACTION_SHRINKING         (18) */
+  7            /* GFX_ACTION_OTHER             (19) */
 };
 
-struct ElementInfo element_info[] =
+struct FileInfo *image_files;
+struct FileInfo *sound_files;
+
+struct ElementInfo element_info[MAX_ELEMENTS] =
 {
   { "empty_space",             "empty space"                   },      /* 0 */
   { "sand",                    "sand"                          },
@@ -377,14 +194,14 @@ struct ElementInfo element_info[] =
   { "bomb",                    "bomb"                          },
   { "magic_wall",              "magic wall"                    },     /* 20 */
   { "speed_pill",              "speed pill"                    },
-  { "acid",                    "acid pool"                     },
+  { "acid",                    "acid"                          },
   { "amoeba",                  "dropping amoeba"               },
   { "amoeba",                  "normal amoeba"                 },
   { "nut",                     "nut with emerald"              },
   { "gameoflife",              "Conway's wall of life"         },
   { "biomaze",                 "biomaze"                       },
   { "dynamite",                        "burning dynamite"              },
-  { NULL,                      "unknown"                       },
+  { "wall",                    "wall"                          },
   { "robot_wheel",             "magic wheel"                   },     /* 30 */
   { "robot_wheel",             "magic wheel (running)"         },
   { "key",                     "red key"                       },
@@ -418,7 +235,9 @@ struct ElementInfo element_info[] =
   { "dark_yamyam",             "dark yam yam"                  },     /* 60 */
   { "bd_magic_wall",           "magic wall (BD style)"         },
   { "wall",                    "invisible steel wall"          },
-  { NULL,                      "-"                             },
+
+  { NULL,                      "(not used)"                    },
+
   { "dynabomb_nr",             "increases number of bombs"     },
   { "dynabomb_sz",             "increases explosion size"      },
   { "dynabomb_xl",             "increases power of explosion"  },
@@ -455,12 +274,12 @@ struct ElementInfo element_info[] =
   { "emerald",                 "purple emerald"                },
   { "wall",                    "wall with red emerald"         },
   { "wall",                    "wall with purple emerald"      },
-  { NULL,                      "unknown"                       },    /* 100 */
-  { NULL,                      "unknown"                       },
-  { NULL,                      "unknown"                       },
-  { NULL,                      "unknown"                       },
-  { NULL,                      "unknown"                       },
-  { NULL,                      "normal wall (BD style)"        },
+  { "wall",                    "acid pool (top left)"          },    /* 100 */
+  { "wall",                    "acid pool (top right)"         },
+  { "wall",                    "acid pool (bottom left)"       },
+  { "wall",                    "acid pool (bottom)"            },
+  { "wall",                    "acid pool (bottom right)"      },
+  { "wall",                    "normal wall (BD style)"        },
   { "bd_rock",                 "rock (BD style)"               },
   { "exit",                    "open exit"                     },
   { NULL,                      "black orb bomb"                },
@@ -609,8 +428,9 @@ struct ElementInfo element_info[] =
   { "gate",                    "gray door (EM style, yellow key)"},
   { "gate",                    "gray door (EM style, green key)"},
   { "gate",                    "gray door (EM style, blue key)"},
-  { NULL,                      "unknown"                       },
-  { NULL,                      "unknown"                       },
+
+  { NULL,                      "(not used)"                    },
+  { NULL,                      "(not used)"                    },
 
   /* 256 */
 
@@ -621,7 +441,7 @@ struct ElementInfo element_info[] =
   { "gate",                    "white door"                    },    /* 260 */
   { "gate",                    "gray door (opened by white key)"},
   { "key",                     "white key"                     },
-  { "shield_passive",          "shield (passive)"              },
+  { "shield_normal",           "shield (normal)"               },
   { "extra_time",              "extra time"                    },
   { "switchgate",              "switch gate (open)"            },
   { "switchgate",              "switch gate (closed)"          },
@@ -675,18 +495,21 @@ struct ElementInfo element_info[] =
   { "mole",                    "mole (starts moving down)"     },
   { "wall",                    "steel wall (slanted)"          },
   { "sand",                    "invisible sand"                },
-  { NULL,                      "dx unknown 15"                 },
-  { NULL,                      "dx unknown 42"                 },
-  { NULL,                      "-"                             },
-  { NULL,                      "-"                             },    /* 320 */
-  { "shield_active",           "shield (active, kills enemies)"},
+
+  { NULL,                      "dx unknown element 15"         },
+  { NULL,                      "dx unknown element 42"         },
+
+  { NULL,                      "(not used)"                    },
+  { NULL,                      "(not used)"                    },    /* 320 */
+
+  { "shield_deadly",           "shield (deadly, kills enemies)"},
   { "timegate",                        "time gate (open)"              },
   { "timegate",                        "time gate (closed)"            },
-  { "timegate_wheel",          "switch for time gate"          },
-  { "timegate_wheel",          "switch for time gate"          },
+  { "timegate_switch",         "switch for time gate"          },
+  { "timegate_switch",         "switch for time gate"          },
   { "balloon",                 "balloon"                       },
-  { "wall",                    "send balloon to the left"      },
-  { "wall",                    "send balloon to the right"     },
+  { "balloon_switch",          "send balloon to the left"      },
+  { "balloon_switch",          "send balloon to the right"     },
   { "balloon_switch",          "send balloon up"               },
   { "balloon_switch",          "send balloon down"             },    /* 330 */
   { "balloon_switch",          "send balloon in any direction" },
@@ -716,6 +539,137 @@ struct ElementInfo element_info[] =
   { "spring",                  "spring"                        },
   { "trap",                    "trap"                          },
   { "dx_bomb",                 "stable bomb (DX style)"        },
+  { NULL,                      "-"                             },
+  { NULL,                      "-"                             },
+  { "custom",                  "custom element 0"              },
+  { "custom",                  "custom element 1"              },
+  { "custom",                  "custom element 2"              },
+  { "custom",                  "custom element 3"              },
+  { "custom",                  "custom element 4"              },
+  { "custom",                  "custom element 5"              },
+  { "custom",                  "custom element 6"              },
+  { "custom",                  "custom element 7"              },
+  { "custom",                  "custom element 8"              },
+  { "custom",                  "custom element 9"              },
+  { "custom",                  "custom element 10"             },
+  { "custom",                  "custom element 11"             },
+  { "custom",                  "custom element 12"             },
+  { "custom",                  "custom element 13"             },
+  { "custom",                  "custom element 14"             },
+  { "custom",                  "custom element 15"             },
+  { "custom",                  "custom element 16"             },
+  { "custom",                  "custom element 17"             },
+  { "custom",                  "custom element 18"             },
+  { "custom",                  "custom element 19"             },
+  { "custom",                  "custom element 20"             },
+  { "custom",                  "custom element 21"             },
+  { "custom",                  "custom element 22"             },
+  { "custom",                  "custom element 23"             },
+  { "custom",                  "custom element 24"             },
+  { "custom",                  "custom element 25"             },
+  { "custom",                  "custom element 26"             },
+  { "custom",                  "custom element 27"             },
+  { "custom",                  "custom element 28"             },
+  { "custom",                  "custom element 29"             },
+  { "custom",                  "custom element 30"             },
+  { "custom",                  "custom element 31"             },
+  { "custom",                  "custom element 32"             },
+  { "custom",                  "custom element 33"             },
+  { "custom",                  "custom element 34"             },
+  { "custom",                  "custom element 35"             },
+  { "custom",                  "custom element 36"             },
+  { "custom",                  "custom element 37"             },
+  { "custom",                  "custom element 38"             },
+  { "custom",                  "custom element 39"             },
+  { "custom",                  "custom element 40"             },
+  { "custom",                  "custom element 41"             },
+  { "custom",                  "custom element 42"             },
+  { "custom",                  "custom element 43"             },
+  { "custom",                  "custom element 44"             },
+  { "custom",                  "custom element 45"             },
+  { "custom",                  "custom element 46"             },
+  { "custom",                  "custom element 47"             },
+  { "custom",                  "custom element 48"             },
+  { "custom",                  "custom element 49"             },
+  { "custom",                  "custom element 50"             },
+  { "custom",                  "custom element 51"             },
+  { "custom",                  "custom element 52"             },
+  { "custom",                  "custom element 53"             },
+  { "custom",                  "custom element 54"             },
+  { "custom",                  "custom element 55"             },
+  { "custom",                  "custom element 56"             },
+  { "custom",                  "custom element 57"             },
+  { "custom",                  "custom element 58"             },
+  { "custom",                  "custom element 59"             },
+  { "custom",                  "custom element 60"             },
+  { "custom",                  "custom element 61"             },
+  { "custom",                  "custom element 62"             },
+  { "custom",                  "custom element 63"             },
+  { "custom",                  "custom element 64"             },
+  { "custom",                  "custom element 65"             },
+  { "custom",                  "custom element 66"             },
+  { "custom",                  "custom element 67"             },
+  { "custom",                  "custom element 68"             },
+  { "custom",                  "custom element 69"             },
+  { "custom",                  "custom element 70"             },
+  { "custom",                  "custom element 71"             },
+  { "custom",                  "custom element 72"             },
+  { "custom",                  "custom element 73"             },
+  { "custom",                  "custom element 74"             },
+  { "custom",                  "custom element 75"             },
+  { "custom",                  "custom element 76"             },
+  { "custom",                  "custom element 77"             },
+  { "custom",                  "custom element 78"             },
+  { "custom",                  "custom element 79"             },
+  { "custom",                  "custom element 80"             },
+  { "custom",                  "custom element 81"             },
+  { "custom",                  "custom element 82"             },
+  { "custom",                  "custom element 83"             },
+  { "custom",                  "custom element 84"             },
+  { "custom",                  "custom element 85"             },
+  { "custom",                  "custom element 86"             },
+  { "custom",                  "custom element 87"             },
+  { "custom",                  "custom element 88"             },
+  { "custom",                  "custom element 89"             },
+  { "custom",                  "custom element 90"             },
+  { "custom",                  "custom element 91"             },
+  { "custom",                  "custom element 92"             },
+  { "custom",                  "custom element 93"             },
+  { "custom",                  "custom element 94"             },
+  { "custom",                  "custom element 95"             },
+  { "custom",                  "custom element 96"             },
+  { "custom",                  "custom element 97"             },
+  { "custom",                  "custom element 98"             },
+  { "custom",                  "custom element 99"             },
+  { "custom",                  "custom element 100"            },
+  { "custom",                  "custom element 101"            },
+  { "custom",                  "custom element 102"            },
+  { "custom",                  "custom element 103"            },
+  { "custom",                  "custom element 104"            },
+  { "custom",                  "custom element 105"            },
+  { "custom",                  "custom element 106"            },
+  { "custom",                  "custom element 107"            },
+  { "custom",                  "custom element 108"            },
+  { "custom",                  "custom element 109"            },
+  { "custom",                  "custom element 110"            },
+  { "custom",                  "custom element 111"            },
+  { "custom",                  "custom element 112"            },
+  { "custom",                  "custom element 113"            },
+  { "custom",                  "custom element 114"            },
+  { "custom",                  "custom element 115"            },
+  { "custom",                  "custom element 116"            },
+  { "custom",                  "custom element 117"            },
+  { "custom",                  "custom element 118"            },
+  { "custom",                  "custom element 119"            },
+  { "custom",                  "custom element 120"            },
+  { "custom",                  "custom element 121"            },
+  { "custom",                  "custom element 122"            },
+  { "custom",                  "custom element 123"            },
+  { "custom",                  "custom element 124"            },
+  { "custom",                  "custom element 125"            },
+  { "custom",                  "custom element 126"            },
+  { "custom",                  "custom element 127"            },
+
   { NULL,                      "-"                             }
 
   /*
@@ -723,6 +677,9 @@ struct ElementInfo element_info[] =
   */
 };
 
+struct GraphicInfo graphic_info[MAX_GRAPHICS];
+struct NewGraphicInfo new_graphic_info[NUM_IMAGE_FILES];
+
 
 /* ========================================================================= */
 /* main()                                                                    */