#include "main.h"
#include "init.h"
#include "game.h"
+#include "tape.h"
#include "events.h"
#include "config.h"
-Bitmap *bitmap_db_field, *bitmap_db_door;
+Bitmap *bitmap_db_title;
+Bitmap *bitmap_db_field;
+Bitmap *bitmap_db_door;
DrawBuffer *fieldbuffer;
DrawBuffer *drawto_field;
short Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-short Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ChangeCount[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+#if 0
unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS];
+#endif
int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
{
"yamyam",
"yamyam",
- "yam yam"
+ "yam yam (random start direction)"
},
{
"robot",
},
{
"steelwall",
- "wall",
+ "steelwall",
"steel wall"
},
{
{
"amoeba_wet",
"amoeba",
- "dropping amoeba"
+ "dropping amoeba (EM style)"
},
{
"amoeba_dry",
{
"key_1",
"key",
- "red key"
+ "key 1"
},
{
"key_2",
"key",
- "yellow key"
+ "key 2"
},
{
"key_3",
"key",
- "green key"
+ "key 3"
},
{
"key_4",
"key",
- "blue key"
+ "key 4"
},
{
"gate_1",
"gate",
- "red door"
+ "door 1"
},
{
"gate_2",
"gate",
- "yellow door"
+ "door 2"
},
{
"gate_3",
"gate",
- "green door"
+ "door 3"
},
{
"gate_4",
"gate",
- "blue door"
+ "door 4"
},
{
"gate_1_gray",
"gate",
- "gray door (opened by red key)"
+ "gray door (opened by key 1)"
},
{
"gate_2_gray",
"gate",
- "gray door (opened by yellow key)"},
+ "gray door (opened by key 2)"
+ },
{
"gate_3_gray",
"gate",
- "gray door (opened by green key)"},
+ "gray door (opened by key 3)"
+ },
{
"gate_4_gray",
"gate",
- "gray door (opened by blue key)"},
+ "gray door (opened by key 4)"
+ },
{
"dynamite",
"dynamite",
{
"expandable_wall",
"wall",
- "growing wall"
+ "growing wall (horizontal, visible)"
},
{
"bd_diamond",
},
{
"invisible_steelwall",
- "wall",
+ "steelwall",
"invisible steel wall"
},
{
{
"player_1",
"player",
- "yellow player"
+ "player 1"
},
{
"player_2",
"player",
- "red player"
+ "player 2"
},
{
"player_3",
"player",
- "green player"
+ "player 3"
},
{
"player_4",
"player",
- "blue player"
+ "player 4"
},
{
"bug.right",
{
"em_gate_1",
"gate",
- "red door (EM style)"
+ "door 1 (EM style)"
},
{
"em_gate_2",
"gate",
- "yellow door (EM style)"
+ "door 2 (EM style)"
},
{
"em_gate_3",
"gate",
- "green door (EM style)"
+ "door 3 (EM style)"
},
{
"em_gate_4",
"gate",
- "blue door (EM style)"
+ "door 4 (EM style)"
},
{
"em_key_2_file_obsolete",
{
"em_gate_1_gray",
"gate",
- "gray door (EM style, red key)"
+ "gray door (EM style, key 1)"
},
{
"em_gate_2_gray",
"gate",
- "gray door (EM style, yellow key)"
+ "gray door (EM style, key 2)"
},
{
"em_gate_3_gray",
"gate",
- "gray door (EM style, green key)"
+ "gray door (EM style, key 3)"
},
{
"em_gate_4_gray",
"gate",
- "gray door (EM style, blue key)"
+ "gray door (EM style, key 4)"
},
{
- "unused_254",
- "unused",
- "(not used)"
+ "em_dynamite",
+ "dynamite",
+ "dynamite (EM style)"
},
{
- "unused_255",
- "unused",
- "(not used)"
+ "em_dynamite.active",
+ "dynamite",
+ "burning dynamite (EM style)"
},
{
"pearl",
{
"conveyor_belt_1_left",
"conveyor_belt",
- "red conveyor belt (left)"
+ "conveyor belt 1 (left)"
},
{
"conveyor_belt_1_middle",
"conveyor_belt",
- "red conveyor belt (middle)"
+ "conveyor belt 1 (middle)"
},
{
"conveyor_belt_1_right",
"conveyor_belt",
- "red conveyor belt (right)"
+ "conveyor belt 1 (right)"
},
{
"conveyor_belt_1_switch_left",
"conveyor_belt_switch",
- "switch for red conveyor belt (left)"
+ "switch for conveyor belt 1 (left)"
},
{
"conveyor_belt_1_switch_middle",
"conveyor_belt_switch",
- "switch for red conveyor belt (middle)"
+ "switch for conveyor belt 1 (middle)"
},
{
"conveyor_belt_1_switch_right",
"conveyor_belt_switch",
- "switch for red conveyor belt (right)"
+ "switch for conveyor belt 1 (right)"
},
{
"conveyor_belt_2_left",
"conveyor_belt",
- "yellow conveyor belt (left)"
+ "conveyor belt 2 (left)"
},
{
"conveyor_belt_2_middle",
"conveyor_belt",
- "yellow conveyor belt (middle)"
+ "conveyor belt 2 (middle)"
},
{
"conveyor_belt_2_right",
"conveyor_belt",
- "yellow conveyor belt (right)"
+ "conveyor belt 2 (right)"
},
{
"conveyor_belt_2_switch_left",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (left)"
+ "switch for conveyor belt 2 (left)"
},
{
"conveyor_belt_2_switch_middle",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (middle)"
+ "switch for conveyor belt 2 (middle)"
},
{
"conveyor_belt_2_switch_right",
"conveyor_belt_switch",
- "switch for yellow conveyor belt (right)"
+ "switch for conveyor belt 2 (right)"
},
{
"conveyor_belt_3_left",
"conveyor_belt",
- "green conveyor belt (left)"
+ "conveyor belt 3 (left)"
},
{
"conveyor_belt_3_middle",
"conveyor_belt",
- "green conveyor belt (middle)"
+ "conveyor belt 3 (middle)"
},
{
"conveyor_belt_3_right",
"conveyor_belt",
- "green conveyor belt (right)"
+ "conveyor belt 3 (right)"
},
{
"conveyor_belt_3_switch_left",
"conveyor_belt_switch",
- "switch for green conveyor belt (left)"
+ "switch for conveyor belt 3 (left)"
},
{
"conveyor_belt_3_switch_middle",
"conveyor_belt_switch",
- "switch for green conveyor belt (middle)"
+ "switch for conveyor belt 3 (middle)"
},
{
"conveyor_belt_3_switch_right",
"conveyor_belt_switch",
- "switch for green conveyor belt (right)"
+ "switch for conveyor belt 3 (right)"
},
{
"conveyor_belt_4_left",
"conveyor_belt",
- "blue conveyor belt (left)"
+ "conveyor belt 4 (left)"
},
{
"conveyor_belt_4_middle",
"conveyor_belt",
- "blue conveyor belt (middle)"
+ "conveyor belt 4 (middle)"
},
{
"conveyor_belt_4_right",
"conveyor_belt",
- "blue conveyor belt (right)"
+ "conveyor belt 4 (right)"
},
{
"conveyor_belt_4_switch_left",
"conveyor_belt_switch",
- "switch for blue conveyor belt (left)"
+ "switch for conveyor belt 4 (left)"
},
{
"conveyor_belt_4_switch_middle",
"conveyor_belt_switch",
- "switch for blue conveyor belt (middle)"
+ "switch for conveyor belt 4 (middle)"
},
{
"conveyor_belt_4_switch_right",
"conveyor_belt_switch",
- "switch for blue conveyor belt (right)"
+ "switch for conveyor belt 4 (right)"
},
{
"landmine",
},
{
"steelwall_slippery",
- "wall",
+ "steelwall",
"slippery steel wall"
},
{
},
{
"emc_steelwall_1",
- "wall",
+ "steelwall",
"steel wall"
},
{
"emc_steelwall_2",
- "wall",
+ "steelwall",
"steel wall"
},
{
"emc_steelwall_3",
- "wall",
+ "steelwall",
"steel wall"
},
{
"emc_steelwall_4",
- "wall",
+ "steelwall",
"steel wall"
},
{
{
"em_key_1",
"key",
- "red key (EM style)"
+ "key 1 (EM style)"
},
{
"em_key_2",
"key",
- "yellow key (EM style)"
+ "key 2 (EM style)"
},
{
"em_key_3",
"key",
- "green key (EM style)"
+ "key 3 (EM style)"
},
{
"em_key_4",
"key",
- "blue key (EM style)"
+ "key 4 (EM style)"
},
{
"envelope_1",
"dripper",
"dripper"
},
+ {
+ "trigger_ce_value",
+ "trigger",
+ "CE value of element triggering change"
+ },
+ {
+ "trigger_ce_score",
+ "trigger",
+ "CE score of element triggering change"
+ },
+ {
+ "current_ce_value",
+ "current",
+ "CE value of current element"
+ },
+ {
+ "current_ce_score",
+ "current",
+ "CE score of current element"
+ },
+ {
+ "yamyam.left",
+ "yamyam",
+ "yam yam (starts moving left)"
+ },
+ {
+ "yamyam.right",
+ "yamyam",
+ "yam yam (starts moving right)"
+ },
+ {
+ "yamyam.up",
+ "yamyam",
+ "yam yam (starts moving up)"
+ },
+ {
+ "yamyam.down",
+ "yamyam",
+ "yam yam (starts moving down)"
+ },
+ {
+ "bd_expandable_wall",
+ "wall",
+ "growing wall (horizontal, BD style)"
+ },
/* ----------------------------------------------------------------------- */
/* "real" (and therefore drawable) runtime elements */
},
{
"invisible_steelwall.active",
- "wall",
+ "steelwall",
"-"
},
{
"dripper",
"dripper"
},
+ {
+ "emc_spring_bumper.active",
+ "emc_spring_bumper",
+ "spring bumper",
+ },
/* ----------------------------------------------------------------------- */
/* "unreal" (and therefore not drawable) runtime elements */
"-",
"-"
},
+ {
+ "diagonal.shrinking",
+ "-",
+ "-"
+ },
+ {
+ "diagonal.growing",
+ "-",
+ "-"
+ },
/* ----------------------------------------------------------------------- */
/* dummy elements (never used as game elements, only used as graphics) */
"hide group elements"
},
{
- "internal_cascade_user",
+ "internal_cascade_ref",
"internal",
- "show user defined elements"
+ "show reference elements"
},
{
- "internal_cascade_user.active",
+ "internal_cascade_ref.active",
"internal",
- "hide user defined elements"
+ "hide reference elements"
},
{
- "internal_cascade_generic",
+ "internal_cascade_user",
"internal",
- "show elements"
+ "show user defined elements"
},
{
- "internal_cascade_generic.active",
+ "internal_cascade_user.active",
"internal",
- "hide elements"
+ "hide user defined elements"
},
{
"internal_cascade_dynamic",
{ ".turning_from_down", ACTION_TURNING_FROM_DOWN, FALSE },
{ ".smashed_by_rock", ACTION_SMASHED_BY_ROCK, FALSE },
{ ".smashed_by_spring", ACTION_SMASHED_BY_SPRING, FALSE },
- { ".slurped_by_spring", ACTION_SLURPED_BY_SPRING, FALSE },
+ { ".eating", ACTION_EATING, FALSE },
{ ".twinkling", ACTION_TWINKLING, FALSE },
{ ".splashing", ACTION_SPLASHING, FALSE },
{ ".page[1]", ACTION_PAGE_1, FALSE },
{ NULL, 0, 0 }
};
-struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS + 1] =
+struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] =
{
{ ".left", MV_BIT_LEFT },
{ ".right", MV_BIT_RIGHT },
{ ".up", MV_BIT_UP },
{ ".down", MV_BIT_DOWN },
+ { ".upleft", MV_BIT_UP },
+ { ".upright", MV_BIT_RIGHT },
+ { ".downleft", MV_BIT_LEFT },
+ { ".downright", MV_BIT_DOWN },
{ NULL, 0 }
};
struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] =
{
{ ".[DEFAULT]", GAME_MODE_DEFAULT, },
+ { ".TITLE", GAME_MODE_TITLE, },
{ ".MAIN", GAME_MODE_MAIN, },
{ ".LEVELS", GAME_MODE_LEVELS },
{ ".SCORES", GAME_MODE_SCORES, },
{ "menu.list_size.SCORES", &menu.list_size[GFX_SPECIAL_ARG_SCORES] },
{ "menu.list_size.INFO", &menu.list_size[GFX_SPECIAL_ARG_INFO] },
+ { "door_1.width", &door_1.width },
+ { "door_1.height", &door_1.height },
{ "door_1.step_offset", &door_1.step_offset },
{ "door_1.step_delay", &door_1.step_delay },
{ "door_1.anim_mode", &door_1.anim_mode },
+ { "door_2.width", &door_2.width },
+ { "door_2.height", &door_2.height },
{ "door_2.step_offset", &door_2.step_offset },
{ "door_2.step_delay", &door_2.step_delay },
{ "door_2.anim_mode", &door_2.anim_mode },
{ "font.value_1" },
{ "font.value_2" },
{ "font.value_old" },
+ { "font.level_number.active" },
{ "font.level_number" },
{ "font.tape_recorder" },
{ "font.game_info" },
int main(int argc, char *argv[])
{
- InitProgramInfo(argv[0], USERDATA_DIRECTORY,
- PROGRAM_TITLE_STRING, getWindowTitleString(),
- ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME,
+ char * window_title_string = getWindowTitleString();
+
+ InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
+ PROGRAM_TITLE_STRING, window_title_string, ICON_TITLE_STRING,
+ X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME,
MSDOS_POINTER_FILENAME,
COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);