#define EL_DYNABOMB_PLAYER2_ACTIVE (EL_FIRST_RUNTIME_REAL + 5)
#define EL_DYNABOMB_PLAYER3_ACTIVE (EL_FIRST_RUNTIME_REAL + 6)
#define EL_DYNABOMB_PLAYER4_ACTIVE (EL_FIRST_RUNTIME_REAL + 7)
-#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 8)
-#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 9)
-#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 10)
-#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 11)
-#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 12)
-#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 13)
-#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 14)
-#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 15)
-#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 16)
-#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 17)
-#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 18)
-#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 19)
-#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 20)
-#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 21)
-#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
-#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 23)
-#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 24)
-#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25)
-#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 26)
-#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 27)
-#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
-#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 29)
-#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 30)
-#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31)
-#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 32)
-#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33)
-#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 34)
-#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 35)
-#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 36)
-#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 37)
-#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38)
-#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 39)
-#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40)
-#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 41)
-#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 43)
-#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_SP_DISK_RED_ACTIVE (EL_FIRST_RUNTIME_REAL + 8)
+#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 9)
+#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 10)
+#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 11)
+#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 12)
+#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 13)
+#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 14)
+#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 15)
+#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 16)
+#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 17)
+#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 18)
+#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 19)
+#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 20)
+#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 21)
+#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 22)
+#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 23)
+#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 24)
+#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 25)
+#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 26)
+#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 27)
+#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
+#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 29)
+#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 30)
+#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45)
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 46)
#define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0)
#define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1)
#define NUM_ACTIONS 21
/* values for special image configuration suffixes */
-#define GFX_SPECIAL_ARG_EDITOR 0
-#define GFX_SPECIAL_ARG_PREVIEW 1
+#define GFX_SPECIAL_ARG_MAIN 0
+#define GFX_SPECIAL_ARG_LEVELS 1
+#define GFX_SPECIAL_ARG_SCORES 2
+#define GFX_SPECIAL_ARG_EDITOR 3
+#define GFX_SPECIAL_ARG_INFO 4
+#define GFX_SPECIAL_ARG_SETUP 5
+#define GFX_SPECIAL_ARG_DOOR 6
+#define GFX_SPECIAL_ARG_PREVIEW 7
-#define NUM_SPECIAL_GFX_ARGS 2
+#define NUM_SPECIAL_GFX_ARGS 8
/* values for image configuration suffixes */
#define GFX_ARG_XOFFSET 8
#define GFX_ARG_YOFFSET 9
#define GFX_ARG_FRAMES 10
-#define GFX_ARG_START_FRAME 11
-#define GFX_ARG_DELAY 12
-#define GFX_ARG_MODE_LOOP 13
-#define GFX_ARG_MODE_LINEAR 14
-#define GFX_ARG_MODE_PINGPONG 15
-#define GFX_ARG_MODE_PINGPONG2 16
-#define GFX_ARG_MODE_RANDOM 17
-#define GFX_ARG_MODE_REVERSE 18
-#define GFX_ARG_GLOBAL_SYNC 19
-#define GFX_ARG_STEP_OFFSET 20
-#define GFX_ARG_STEP_DELAY 21
-#define GFX_ARG_DIRECTION 22
-#define GFX_ARG_POSITION 23
-#define GFX_ARG_DRAW_XOFFSET 24
-#define GFX_ARG_DRAW_YOFFSET 25
-#define GFX_ARG_NAME 26
-
-#define NUM_GFX_ARGS 27
+#define GFX_ARG_FRAMES_PER_LINE 11
+#define GFX_ARG_START_FRAME 12
+#define GFX_ARG_DELAY 13
+#define GFX_ARG_ANIM_MODE 14
+#define GFX_ARG_GLOBAL_SYNC 15
+#define GFX_ARG_STEP_OFFSET 16
+#define GFX_ARG_STEP_DELAY 17
+#define GFX_ARG_DIRECTION 18
+#define GFX_ARG_POSITION 19
+#define GFX_ARG_DRAW_XOFFSET 20
+#define GFX_ARG_DRAW_YOFFSET 21
+#define GFX_ARG_FORMAT 22
+#define GFX_ARG_NAME 23
+
+#define NUM_GFX_ARGS 24
/* values for sound configuration suffixes */
/* values for font configuration */
-#define FIRST_IMG_FONT IMG_FONT_INITIAL_1
-#define LAST_IMG_FONT IMG_FONT_NARROW
-
-#define NUM_IMG_FONTS (LAST_IMG_FONT - \
- FIRST_IMG_FONT + 1)
+#define FONT_INITIAL_1 0
+#define FONT_INITIAL_2 1
+#define FONT_INITIAL_3 2
+#define FONT_INITIAL_4 3
+#define FONT_TITLE_1 4
+#define FONT_TITLE_2 5
+#define FONT_MENU_1 6
+#define FONT_MENU_2 7
+#define FONT_TEXT_1 8
+#define FONT_TEXT_2 9
+#define FONT_TEXT_3 10
+#define FONT_TEXT_4 11
+#define FONT_INPUT 12
+#define FONT_INPUT_ACTIVE 13
+#define FONT_OPTION_OFF 14
+#define FONT_OPTION_ON 15
+#define FONT_VALUE_1 16
+#define FONT_VALUE_2 17
+#define FONT_VALUE_OLD 18
+#define FONT_TAPE_RECORDER 19
+#define FONT_LEVEL_NUMBER 20
+
+#define NUM_FONTS 21
#define NUM_INITIAL_FONTS 4
#define TYPENAME 6
#define HALLOFFAME 7
#define SETUP 8
+#define PSEUDO_PREVIEW 9
+#define PSEUDO_DOOR 10
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 2
int MovDir, MovPos, GfxPos;
int Frame;
+ int GfxAction;
+
+ boolean use_murphy_graphic;
+ boolean use_disk_red_graphic;
+
boolean Pushing;
boolean Switching;
boolean LevelSolved, GameOver;
boolean snapped;
int last_move_dir;
- int is_moving;
+ boolean is_moving;
+
+ boolean is_digging;
+ boolean is_waiting;
unsigned long move_delay;
int move_delay_value;
unsigned long push_delay;
unsigned long push_delay_value;
- int frame_reset_delay;
-
unsigned long actual_frame_counter;
int score;
struct ElementInfo
{
- char *token_name; /* element token prefix used in config files */
+ char *token_name; /* element token used in config files */
char *sound_class_name; /* classification for custom sound effects */
char *editor_description; /* short description for level editor */
char *custom_description; /* custom description for level editor */
int graphic[NUM_ACTIONS]; /* default graphics for several actions */
- /* special graphics for left/right/up/down */
int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS];
-
- int editor_graphic; /* graphic displayed in level editor */
- int preview_graphic; /* graphic displayed in level preview */
+ /* special graphics for left/right/up/down */
+ int special_graphic[NUM_SPECIAL_GFX_ARGS];
+ /* special graphics for certain screens */
int sound[NUM_ACTIONS]; /* default sounds for several actions */
};
+struct FontInfo
+{
+ char *token_name; /* font token used in config files */
+
+ int graphic; /* default graphic for this font */
+ int special_graphic[NUM_SPECIAL_GFX_ARGS];
+ /* special graphics for certain screens */
+ int special_bitmap_id[NUM_SPECIAL_GFX_ARGS];
+ /* internal bitmap ID for special graphics */
+};
+
struct GraphicInfo
{
Bitmap *bitmap;
extern struct ElementActionInfo element_action_info[];
extern struct ElementDirectionInfo element_direction_info[];
extern struct SpecialSuffixInfo special_suffix_info[];
+extern struct FontInfo font_info[];
extern struct GraphicInfo *graphic_info;
extern struct SoundInfo *sound_info;
extern struct ConfigInfo image_config[], sound_config[];