rnd-20020907-1-src
[rocksndiamonds.git] / src / main.h
index 06939a398df30bc899564779bf0aef5134cc2427..976325dac8d68b13216a2f4f69d0563cebe76b4e 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Rocks'n'Diamonds -- McDuffin Strikes Back!               *
 *----------------------------------------------------------*
-* (c) 1995-2001 Artsoft Entertainment                      *
+* (c) 1995-2002 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
 #define MAX_SCORE_ENTRIES      100
 #define MAX_ELEMENTS           700             /* 500 static + 200 runtime */
+#define MAX_GRAPHICS           1536            /* see below: NUM_TILES */
 #define MAX_NUM_AMOEBA         100
 
 /* values for elements with content */
@@ -254,7 +255,8 @@ struct PlayerInfo
 struct LevelInfo
 {
   int file_version;    /* file format version the level is stored with    */
-  int game_version;    /* game engine version the level was created with  */
+  int game_version;    /* game release version the level was created with */
+
   boolean encoding_16bit_field;                /* level contains 16-bit elements  */
   boolean encoding_16bit_yamyam;       /* yamyam contains 16-bit elements */
   boolean encoding_16bit_amoeba;       /* amoeba contains 16-bit elements */
@@ -281,9 +283,10 @@ struct LevelInfo
 
 struct TapeInfo
 {
-  int file_version;    /* file format version the tape is stored with   */
-  int game_version;    /* game engine version the tape was created with */
-  int version;
+  int file_version;    /* file format version the tape is stored with    */
+  int game_version;    /* game release version the tape was created with */
+  int engine_version;  /* game engine version the tape was recorded with */
+
   int level_nr;
   unsigned long random_seed;
   unsigned long date;
@@ -310,8 +313,13 @@ struct TapeInfo
 
 struct GameInfo
 {
-  int version;
+  /* constant within running game */
+  int engine_version;
   int emulation;
+  int initial_move_delay;
+  int initial_move_delay_value;
+
+  /* variable within running game */
   int yam_content_nr;
   boolean magic_wall_active;
   int magic_wall_time_left;
@@ -331,6 +339,23 @@ struct GlobalInfo
   int fps_slowdown_factor;
 };
 
+struct ElementInfo
+{
+  char *sound_class_name;      /* classification for custom sound effects */
+  char *editor_description;    /* short description for level editor */
+
+  int graphic;
+};
+
+struct GraphicInfo
+{
+  Bitmap *bitmap;
+  int src_x, src_y;
+  int anim_frames;
+  int anim_delay;
+  int anim_mode;
+};
+
 extern GC              tile_clip_gc;
 extern Bitmap         *pix[];
 extern Pixmap          tile_clipmask[];
@@ -388,12 +413,11 @@ extern struct HiScore             highscore[];
 extern struct TapeInfo         tape;
 extern struct GameInfo         game;
 extern struct GlobalInfo       global;
-
-extern struct SoundEffectInfo  sound_effects[];
-
-extern char            *sound_name[];
-extern char            *element_info[];
-extern int             num_element_info;
+extern struct ElementInfo      element_info[];
+extern struct GraphicInfo      graphic_info[];
+extern struct ConfigInfo       image_config[], sound_config[];
+extern struct FileInfo        *image_files, *sound_files;
+extern char                   *image_config_suffix[], *sound_config_suffix[];
 
 /* often used screen positions */
 #define SX                     8
@@ -818,6 +842,9 @@ extern int          num_element_info;
 #define EL_TRAP_INACTIVE       356
 #define EL_DX_SUPABOMB         357
 
+#define NUM_LEVEL_ELEMENTS     358
+
+
 /* "real" (and therefore drawable) runtime elements */
 #define EL_FIRST_RUNTIME_EL    500
 
@@ -888,7 +915,7 @@ extern int          num_element_info;
 #define GFX_START_ROCKSMORE    1280
 #define GFX_END_ROCKSMORE      1535
 
-#define NUM_TILES              1536
+#define NUM_TILES              1536            /* see above: MAX_GRAPHICS */
 
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
@@ -1433,7 +1460,14 @@ extern int               num_element_info;
 #define NUM_SOUNDS             55
 
 
-/* values for sound effects */
+/* values for image configuration */
+#define GFX_BD_DIAMOND                         0
+#define GFX_ROBOT_WHEEL                                1
+
+#define NUM_IMAGE_FILES                                2
+
+
+/* values for sound configuration */
 #define SND_BD_EMPTY_SPACE_DIGGING             0
 #define SND_BD_SAND_DIGGING                    1
 #define SND_BD_DIAMOND_COLLECTING              2
@@ -1443,148 +1477,168 @@ extern int            num_element_info;
 #define SND_BD_MAGIC_WALL_ACTIVATING           6
 #define SND_BD_MAGIC_WALL_CHANGING             7
 #define SND_BD_MAGIC_WALL_RUNNING              8
-#define SND_BD_AMOEBA_GROWING                  9
-#define SND_BD_AMOEBA_TURNING_TO_GEM           10
-#define SND_BD_AMOEBA_TURNING_TO_ROCK          11
-#define SND_BD_BUTTERFLY_MOVING                        12
-#define SND_BD_FIREFLY_MOVING                  13
-#define SND_BD_EXIT_ENTERING                   14
-#define SND_SP_EMPTY_SPACE_DIGGING             15
-#define SND_SP_BASE_DIGGING                    16
-#define SND_SP_BUGGY_BASE_DIGGING              17
-#define SND_SP_BUGGY_BASE_ACTIVATING           18
-#define SND_SP_INFOTRON_COLLECTING             19
-#define SND_SP_INFOTRON_IMPACT                 20
-#define SND_SP_ZONK_PUSHING                    21
-#define SND_SP_ZONK_IMPACT                     22
-#define SND_SP_DISK_RED_COLLECTING             23
-#define SND_SP_DISK_ORANGE_PUSHING             24
-#define SND_SP_DISK_YELLOW_PUSHING             25
-#define SND_SP_PORT_PASSING                    26
-#define SND_SP_EXIT_ENTERING                   27
-#define SND_SP_ELEMENT_EXPLODING               28
-#define SND_SP_SNIKSNAK_MOVING                 29
-#define SND_SP_ELECTRON_MOVING                 30
-#define SND_SP_TERMINAL_ACTIVATING             31
-#define SND_SOKOBAN_OBJECT_PUSHING             32
-#define SND_SOKOBAN_FIELD_FILLING              33
-#define SND_SOKOBAN_FIELD_CLEARING             34
-#define SND_SOKOBAN_GAME_SOLVING               35
-#define SND_EMPTY_SPACE_DIGGING                        36
-#define SND_SAND_DIGGING                       37
-#define SND_EMERALD_COLLECTING                 38
-#define SND_EMERALD_IMPACT                     39
-#define SND_DIAMOND_COLLECTING                 40
-#define SND_DIAMOND_IMPACT                     41
-#define SND_DIAMOND_BREAKING                   42
-#define SND_ROCK_PUSHING                       43
-#define SND_ROCK_IMPACT                                44
-#define SND_BOMB_PUSHING                       45
-#define SND_NUT_PUSHING                                46
-#define SND_NUT_CRACKING                       47
-#define SND_NUT_IMPACT                         48
-#define SND_DYNAMITE_COLLECTING                        49
-#define SND_DYNAMITE_PLACING                   50
-#define SND_DYNAMITE_BURNING                   51
-#define SND_KEY_COLLECTING                     52
-#define SND_GATE_PASSING                       53
-#define SND_BUG_MOVING                         54
-#define SND_SPACESHIP_MOVING                   55
-#define SND_YAMYAM_MOVING                      56
-#define SND_YAMYAM_WAITING                     57
-#define SND_YAMYAM_EATING_DIAMOND              58
-#define SND_ROBOT_MOVING                       59
-#define SND_ROBOT_WHEEL_ACTIVATING             60
-#define SND_ROBOT_WHEEL_RUNNING                        61
-#define SND_MAGIC_WALL_ACTIVATING              62
-#define SND_MAGIC_WALL_CHANGING                        63
-#define SND_MAGIC_WALL_RUNNING                 64
-#define SND_AMOEBA_GROWING                     65
-#define SND_AMOEBA_DROPPING                    66
-#define SND_ACID_SPLASHING                     67
-#define SND_QUICKSAND_FILLING                  68
-#define SND_QUICKSAND_SLIPPING_THROUGH         69
-#define SND_QUICKSAND_EMPTYING                 70
-#define SND_EXIT_OPENING                       71
-#define SND_EXIT_ENTERING                      72
-#define SND_BALLOON_MOVING                     73
-#define SND_BALLOON_PUSHING                    74
-#define SND_SPRING_MOVING                      75
-#define SND_SPRING_PUSHING                     76
-#define SND_SPRING_IMPACT                      77
-#define SND_WALL_GROWING                       78
-#define SND_PEARL_COLLECTING                   79
-#define SND_PEARL_BREAKING                     80
-#define SND_PEARL_IMPACT                       81
-#define SND_CRYSTAL_COLLECTING                 82
-#define SND_CRYSTAL_IMPACT                     83
-#define SND_ENVELOPE_COLLECTING                        84
-#define SND_SAND_INVISIBLE_DIGGING             85
-#define SND_SHIELD_PASSIVE_COLLECTING          86
-#define SND_SHIELD_PASSIVE_ACTIVATED           87
-#define SND_SHIELD_ACTIVE_COLLECTING           88
-#define SND_SHIELD_ACTIVE_ACTIVATED            89
-#define SND_EXTRA_TIME_COLLECTING              90
-#define SND_MOLE_MOVING                                91
-#define SND_MOLE_EATING_AMOEBA                 92
-#define SND_SWITCHGATE_SWITCH_ACTIVATING       93
-#define SND_SWITCHGATE_OPENING                 94
-#define SND_SWITCHGATE_CLOSING                 95
-#define SND_SWITCHGATE_PASSING                 96
-#define SND_TIMEGATE_WHEEL_ACTIVATING          97
-#define SND_TIMEGATE_WHEEL_RUNNING             98
-#define SND_TIMEGATE_OPENING                   99
-#define SND_TIMEGATE_CLOSING                   100
-#define SND_TIMEGATE_PASSING                   101
-#define SND_CONVEYOR_BELT_SWITCH_ACTIVATING    102
-#define SND_CONVEYOR_BELT_RUNNING              103
-#define SND_LIGHT_SWITCH_ACTIVATING            104
-#define SND_LIGHT_SWITCH_DEACTIVATING          105
-#define SND_DX_BOMB_PUSHING                    106
-#define SND_TRAP_INACTIVE_DIGGING              107
-#define SND_TRAP_ACTIVATING                    108
-#define SND_AMOEBA_TURNING_TO_GEM              109
-#define SND_AMOEBA_TURNING_TO_ROCK             110
-#define SND_SPEED_PILL_COLLECTING              111
-#define SND_DYNABOMB_NR_COLLECTING             112
-#define SND_DYNABOMB_SZ_COLLECTING             113
-#define SND_DYNABOMB_XL_COLLECTING             114
-#define SND_DYNABOMB_PLACING                   115
-#define SND_DYNABOMB_BURNING                   116
-#define SND_SATELLITE_MOVING                   117
-#define SND_SATELLITE_PUSHING                  118
-#define SND_LAMP_ACTIVATING                    119
-#define SND_LAMP_DEACTIVATING                  120
-#define SND_TIME_ORB_FULL_COLLECTING           121
-#define SND_TIME_ORB_FULL_IMPACT               122
-#define SND_TIME_ORB_EMPTY_PUSHING             123
-#define SND_TIME_ORB_EMPTY_IMPACT              124
-#define SND_GAMEOFLIFE_GROWING                 125
-#define SND_BIOMAZE_GROWING                    126
-#define SND_PACMAN_MOVING                      127
-#define SND_PACMAN_EATING_AMOEBA               128
-#define SND_DARK_YAMYAM_MOVING                 129
-#define SND_DARK_YAMYAM_WAITING                        130
-#define SND_DARK_YAMYAM_EATING_ANY             131
-#define SND_PENGUIN_MOVING                     132
-#define SND_PENGUIN_ENTERING_EXIT              133
-#define SND_PIG_MOVING                         134
-#define SND_PIG_EATING_GEM                     135
-#define SND_DRAGON_MOVING                      136
-#define SND_DRAGON_BREATHING_FIRE              137
-#define SND_PLAYER_DYING                       138
-#define SND_ELEMENT_EXPLODING                  139
-#define SND_GAME_STARTING                      140
-#define SND_GAME_RUNNING_OUT_OF_TIME           141
-#define SND_GAME_LEVELTIME_BONUS               142
-#define SND_GAME_LOSING                                143
-#define SND_GAME_WINNING                       144
-#define SND_MENU_DOOR_OPENING                  145
-#define SND_MENU_DOOR_CLOSING                  146
-#define SND_MENU_HALL_OF_FAME                  147
-#define SND_MENU_INFO_SCREEN                   148
-
-#define NUM_SOUND_EFFECTS                      149
+#define SND_BD_AMOEBA_WAITING                  9
+#define SND_BD_AMOEBA_CREATING                 10
+#define SND_BD_AMOEBA_TURNING_TO_GEM           11
+#define SND_BD_AMOEBA_TURNING_TO_ROCK          12
+#define SND_BD_BUTTERFLY_MOVING                        13
+#define SND_BD_BUTTERFLY_WAITING               14
+#define SND_BD_FIREFLY_MOVING                  15
+#define SND_BD_FIREFLY_WAITING                 16
+#define SND_BD_EXIT_ENTERING                   17
+#define SND_SP_EMPTY_SPACE_DIGGING             18
+#define SND_SP_BASE_DIGGING                    19
+#define SND_SP_BUGGY_BASE_DIGGING              20
+#define SND_SP_BUGGY_BASE_ACTIVATING           21
+#define SND_SP_INFOTRON_COLLECTING             22
+#define SND_SP_INFOTRON_IMPACT                 23
+#define SND_SP_ZONK_PUSHING                    24
+#define SND_SP_ZONK_IMPACT                     25
+#define SND_SP_DISK_RED_COLLECTING             26
+#define SND_SP_DISK_ORANGE_PUSHING             27
+#define SND_SP_DISK_YELLOW_PUSHING             28
+#define SND_SP_PORT_PASSING                    29
+#define SND_SP_EXIT_ENTERING                   30
+#define SND_SP_ELEMENT_EXPLODING               31
+#define SND_SP_SNIKSNAK_MOVING                 32
+#define SND_SP_SNIKSNAK_WAITING                        33
+#define SND_SP_ELECTRON_MOVING                 34
+#define SND_SP_ELECTRON_WAITING                        35
+#define SND_SP_TERMINAL_ACTIVATING             36
+#define SND_SOKOBAN_OBJECT_PUSHING             37
+#define SND_SOKOBAN_FIELD_FILLING              38
+#define SND_SOKOBAN_FIELD_CLEARING             39
+#define SND_SOKOBAN_GAME_SOLVING               40
+#define SND_EMPTY_SPACE_DIGGING                        41
+#define SND_SAND_DIGGING                       42
+#define SND_EMERALD_COLLECTING                 43
+#define SND_EMERALD_IMPACT                     44
+#define SND_DIAMOND_COLLECTING                 45
+#define SND_DIAMOND_IMPACT                     46
+#define SND_DIAMOND_BREAKING                   47
+#define SND_ROCK_PUSHING                       48
+#define SND_ROCK_IMPACT                                49
+#define SND_BOMB_PUSHING                       50
+#define SND_NUT_PUSHING                                51
+#define SND_NUT_CRACKING                       52
+#define SND_NUT_IMPACT                         53
+#define SND_DYNAMITE_COLLECTING                        54
+#define SND_DYNAMITE_PLACING                   55
+#define SND_DYNAMITE_BURNING                   56
+#define SND_KEY_COLLECTING                     57
+#define SND_GATE_PASSING                       58
+#define SND_BUG_MOVING                         59
+#define SND_BUG_WAITING                                60
+#define SND_SPACESHIP_MOVING                   61
+#define SND_SPACESHIP_WAITING                  62
+#define SND_YAMYAM_MOVING                      63
+#define SND_YAMYAM_WAITING                     64
+#define SND_YAMYAM_EATING_DIAMOND              65
+#define SND_ROBOT_STEPPING                     66
+#define SND_ROBOT_WAITING                      67
+#define SND_ROBOT_WHEEL_ACTIVATING             68
+#define SND_ROBOT_WHEEL_RUNNING                        69
+#define SND_MAGIC_WALL_ACTIVATING              70
+#define SND_MAGIC_WALL_CHANGING                        71
+#define SND_MAGIC_WALL_RUNNING                 72
+#define SND_AMOEBA_WAITING                     73
+#define SND_AMOEBA_CREATING                    74
+#define SND_AMOEBA_DROPPING                    75
+#define SND_ACID_SPLASHING                     76
+#define SND_QUICKSAND_FILLING                  77
+#define SND_QUICKSAND_SLIPPING_THROUGH         78
+#define SND_QUICKSAND_EMPTYING                 79
+#define SND_EXIT_OPENING                       80
+#define SND_EXIT_ENTERING                      81
+#define SND_BALLOON_MOVING                     82
+#define SND_BALLOON_WAITING                    83
+#define SND_BALLOON_PUSHING                    84
+#define SND_BALLOON_SWITCH_ACTIVATING          85
+#define SND_SPRING_MOVING                      86
+#define SND_SPRING_PUSHING                     87
+#define SND_SPRING_IMPACT                      88
+#define SND_WALL_GROWING                       89
+#define SND_PEARL_COLLECTING                   90
+#define SND_PEARL_BREAKING                     91
+#define SND_PEARL_IMPACT                       92
+#define SND_CRYSTAL_COLLECTING                 93
+#define SND_CRYSTAL_IMPACT                     94
+#define SND_ENVELOPE_COLLECTING                        95
+#define SND_SAND_INVISIBLE_DIGGING             96
+#define SND_SHIELD_PASSIVE_COLLECTING          97
+#define SND_SHIELD_PASSIVE_ACTIVATED           98
+#define SND_SHIELD_ACTIVE_COLLECTING           99
+#define SND_SHIELD_ACTIVE_ACTIVATED            100
+#define SND_EXTRA_TIME_COLLECTING              101
+#define SND_MOLE_MOVING                                102
+#define SND_MOLE_WAITING                       103
+#define SND_MOLE_EATING_AMOEBA                 104
+#define SND_SWITCHGATE_SWITCH_ACTIVATING       105
+#define SND_SWITCHGATE_OPENING                 106
+#define SND_SWITCHGATE_CLOSING                 107
+#define SND_SWITCHGATE_PASSING                 108
+#define SND_TIMEGATE_WHEEL_ACTIVATING          109
+#define SND_TIMEGATE_WHEEL_RUNNING             110
+#define SND_TIMEGATE_OPENING                   111
+#define SND_TIMEGATE_CLOSING                   112
+#define SND_TIMEGATE_PASSING                   113
+#define SND_CONVEYOR_BELT_SWITCH_ACTIVATING    114
+#define SND_CONVEYOR_BELT_RUNNING              115
+#define SND_LIGHT_SWITCH_ACTIVATING            116
+#define SND_LIGHT_SWITCH_DEACTIVATING          117
+#define SND_DX_BOMB_PUSHING                    118
+#define SND_TRAP_INACTIVE_DIGGING              119
+#define SND_TRAP_ACTIVATING                    120
+#define SND_TUBE_PASSING                       121
+#define SND_AMOEBA_TURNING_TO_GEM              122
+#define SND_AMOEBA_TURNING_TO_ROCK             123
+#define SND_SPEED_PILL_COLLECTING              124
+#define SND_DYNABOMB_NR_COLLECTING             125
+#define SND_DYNABOMB_SZ_COLLECTING             126
+#define SND_DYNABOMB_XL_COLLECTING             127
+#define SND_DYNABOMB_PLACING                   128
+#define SND_DYNABOMB_BURNING                   129
+#define SND_SATELLITE_MOVING                   130
+#define SND_SATELLITE_WAITING                  131
+#define SND_SATELLITE_PUSHING                  132
+#define SND_LAMP_ACTIVATING                    133
+#define SND_LAMP_DEACTIVATING                  134
+#define SND_TIME_ORB_FULL_COLLECTING           135
+#define SND_TIME_ORB_FULL_IMPACT               136
+#define SND_TIME_ORB_EMPTY_PUSHING             137
+#define SND_TIME_ORB_EMPTY_IMPACT              138
+#define SND_GAMEOFLIFE_WAITING                 139
+#define SND_GAMEOFLIFE_CREATING                        140
+#define SND_BIOMAZE_WAITING                    141
+#define SND_BIOMAZE_CREATING                   142
+#define SND_PACMAN_MOVING                      143
+#define SND_PACMAN_WAITING                     144
+#define SND_PACMAN_EATING_AMOEBA               145
+#define SND_DARK_YAMYAM_MOVING                 146
+#define SND_DARK_YAMYAM_WAITING                        147
+#define SND_DARK_YAMYAM_EATING_ANY             148
+#define SND_PENGUIN_MOVING                     149
+#define SND_PENGUIN_WAITING                    150
+#define SND_PENGUIN_ENTERING_EXIT              151
+#define SND_PIG_MOVING                         152
+#define SND_PIG_WAITING                                153
+#define SND_PIG_EATING_GEM                     154
+#define SND_DRAGON_MOVING                      155
+#define SND_DRAGON_WAITING                     156
+#define SND_DRAGON_ATTACKING                   157
+#define SND_PLAYER_DYING                       158
+#define SND_ELEMENT_EXPLODING                  159
+#define SND_GAME_STARTING                      160
+#define SND_GAME_RUNNING_OUT_OF_TIME           161
+#define SND_GAME_LEVELTIME_BONUS               162
+#define SND_GAME_LOSING                                163
+#define SND_GAME_WINNING                       164
+#define SND_MENU_DOOR_OPENING                  165
+#define SND_MENU_DOOR_CLOSING                  166
+#define SND_MENU_HALL_OF_FAME                  167
+#define SND_MENU_INFO_SCREEN                   168
+
+#define NUM_SOUND_FILES                                169
 
 
 /* values for game_status */
@@ -1599,9 +1653,9 @@ extern int                num_element_info;
 #define SETUP                  8
 
 #define PROGRAM_VERSION_MAJOR  2
-#define PROGRAM_VERSION_MINOR  0
+#define PROGRAM_VERSION_MINOR  1
 #define PROGRAM_VERSION_PATCH  2
-#define PROGRAM_VERSION_STRING "2.0.2"
+#define PROGRAM_VERSION_STRING "2.1.2"
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"