X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=34d4ef14d51ae6093f72a112805563e3f51263ab;hb=57becb68aac2b371506b50cbf8b9b66220003b31;hp=14e64084727721f1cd7d94703ecef55ac271dd41;hpb=09f90416c51f96c37bf133690eb3dcdaf6dd997c;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 14e64084..34d4ef14 100644 --- a/src/init.c +++ b/src/init.c @@ -363,7 +363,7 @@ void InitFontGraphicInfo() /* ---------- initialize font bitmap array ---------- */ if (font_bitmap_info != NULL) - free(font_bitmap_info); + FreeFontInfo(font_bitmap_info); font_bitmap_info = checked_calloc(num_font_bitmaps * sizeof(struct FontBitmapInfo)); @@ -1087,9 +1087,9 @@ void InitElementProperties() EL_AMOEBA_WET, EL_AMOEBA_DRY, EL_AMOEBA_FULL, - EL_BD_AMOEBA + EL_BD_AMOEBA, + -1 }; - static int ep_amoebalive_num = SIZEOF_ARRAY_INT(ep_amoebalive); static int ep_amoeboid[] = { @@ -1097,22 +1097,18 @@ void InitElementProperties() EL_AMOEBA_WET, EL_AMOEBA_DRY, EL_AMOEBA_FULL, - EL_BD_AMOEBA + EL_BD_AMOEBA, + -1 }; - static int ep_amoeboid_num = SIZEOF_ARRAY_INT(ep_amoeboid); - static int ep_schluessel[] = + static int ep_can_be_crumbled[] = { - EL_KEY_1, - EL_KEY_2, - EL_KEY_3, - EL_KEY_4, - EL_EM_KEY_1, - EL_EM_KEY_2, - EL_EM_KEY_3, - EL_EM_KEY_4 + EL_SAND, + EL_LANDMINE, + EL_TRAP, + EL_TRAP_ACTIVE, + -1 }; - static int ep_schluessel_num = SIZEOF_ARRAY_INT(ep_schluessel); static int ep_pforte[] = { @@ -1150,9 +1146,9 @@ void InitElementProperties() EL_TUBE_LEFT_UP, EL_TUBE_LEFT_DOWN, EL_TUBE_RIGHT_UP, - EL_TUBE_RIGHT_DOWN + EL_TUBE_RIGHT_DOWN, + -1 }; - static int ep_pforte_num = SIZEOF_ARRAY_INT(ep_pforte); static int ep_solid[] = { @@ -1305,9 +1301,9 @@ void InitElementProperties() EL_TUBE_LEFT_UP, EL_TUBE_LEFT_DOWN, EL_TUBE_RIGHT_UP, - EL_TUBE_RIGHT_DOWN + EL_TUBE_RIGHT_DOWN, + -1 }; - static int ep_solid_num = SIZEOF_ARRAY_INT(ep_solid); static int ep_indestructible[] = { @@ -1397,9 +1393,9 @@ void InitElementProperties() EL_TUBE_LEFT_UP, EL_TUBE_LEFT_DOWN, EL_TUBE_RIGHT_UP, - EL_TUBE_RIGHT_DOWN + EL_TUBE_RIGHT_DOWN, + -1 }; - static int ep_indestructible_num = SIZEOF_ARRAY_INT(ep_indestructible); static int ep_slippery[] = { @@ -1434,9 +1430,9 @@ void InitElementProperties() EL_SPEED_PILL, EL_STEELWALL_SLANTED, EL_PEARL, - EL_CRYSTAL + EL_CRYSTAL, + -1 }; - static int ep_slippery_num = SIZEOF_ARRAY_INT(ep_slippery); static int ep_enemy[] = { @@ -1449,9 +1445,9 @@ void InitElementProperties() EL_ROBOT, EL_PACMAN, EL_SP_SNIKSNAK, - EL_SP_ELECTRON + EL_SP_ELECTRON, + -1 }; - static int ep_enemy_num = SIZEOF_ARRAY_INT(ep_enemy); static int ep_mauer[] = { @@ -1519,9 +1515,9 @@ void InitElementProperties() EL_EMC_WALL_5, EL_EMC_WALL_6, EL_EMC_WALL_7, - EL_EMC_WALL_8 + EL_EMC_WALL_8, + -1 }; - static int ep_mauer_num = SIZEOF_ARRAY_INT(ep_mauer); static int ep_can_fall[] = { @@ -1547,9 +1543,9 @@ void InitElementProperties() EL_PEARL, EL_CRYSTAL, EL_SPRING, - EL_DX_SUPABOMB + EL_DX_SUPABOMB, + -1 }; - static int ep_can_fall_num = SIZEOF_ARRAY_INT(ep_can_fall); static int ep_can_smash[] = { @@ -1572,9 +1568,9 @@ void InitElementProperties() EL_PEARL, EL_CRYSTAL, EL_SPRING, - EL_DX_SUPABOMB + EL_DX_SUPABOMB, + -1 }; - static int ep_can_smash_num = SIZEOF_ARRAY_INT(ep_can_smash); static int ep_can_change[] = { @@ -1585,9 +1581,9 @@ void InitElementProperties() EL_EMERALD_YELLOW, EL_EMERALD_RED, EL_EMERALD_PURPLE, - EL_DIAMOND + EL_DIAMOND, + -1 }; - static int ep_can_change_num = SIZEOF_ARRAY_INT(ep_can_change); static int ep_can_move[] = { @@ -1607,9 +1603,9 @@ void InitElementProperties() EL_SP_SNIKSNAK, EL_SP_ELECTRON, EL_BALLOON, - EL_SPRING + EL_SPRING, + -1 }; - static int ep_can_move_num = SIZEOF_ARRAY_INT(ep_can_move); static int ep_could_move[] = { @@ -1632,18 +1628,18 @@ void InitElementProperties() EL_PACMAN_RIGHT, EL_PACMAN_UP, EL_PACMAN_LEFT, - EL_PACMAN_DOWN + EL_PACMAN_DOWN, + -1 }; - static int ep_could_move_num = SIZEOF_ARRAY_INT(ep_could_move); static int ep_dont_touch[] = { EL_BUG, EL_SPACESHIP, EL_BD_BUTTERFLY, - EL_BD_FIREFLY + EL_BD_FIREFLY, + -1 }; - static int ep_dont_touch_num = SIZEOF_ARRAY_INT(ep_dont_touch); static int ep_dont_go_to[] = { @@ -1661,11 +1657,11 @@ void InitElementProperties() EL_SP_ELECTRON, EL_SP_BUGGY_BASE_ACTIVE, EL_TRAP_ACTIVE, - EL_LANDMINE + EL_LANDMINE, + -1 }; - static int ep_dont_go_to_num = SIZEOF_ARRAY_INT(ep_dont_go_to); - static int ep_mampf2[] = + static int ep_food_dark_yamyam[] = { EL_SAND, EL_BUG, @@ -1688,9 +1684,9 @@ void InitElementProperties() EL_EMERALD_PURPLE, EL_DIAMOND, EL_PEARL, - EL_CRYSTAL + EL_CRYSTAL, + -1 }; - static int ep_mampf2_num = SIZEOF_ARRAY_INT(ep_mampf2); static int ep_bd_element[] = { @@ -1717,9 +1713,9 @@ void InitElementProperties() EL_BD_BUTTERFLY_3, EL_BD_BUTTERFLY_4, EL_BD_AMOEBA, - EL_CHAR_QUESTION + EL_CHAR_QUESTION, + -1 }; - static int ep_bd_element_num = SIZEOF_ARRAY_INT(ep_bd_element); static int ep_sb_element[] = { @@ -1729,9 +1725,9 @@ void InitElementProperties() EL_SOKOBAN_FIELD_EMPTY, EL_SOKOBAN_FIELD_FULL, EL_PLAYER_1, - EL_INVISIBLE_STEELWALL + EL_INVISIBLE_STEELWALL, + -1 }; - static int ep_sb_element_num = SIZEOF_ARRAY_INT(ep_sb_element); static int ep_gem[] = { @@ -1740,9 +1736,9 @@ void InitElementProperties() EL_EMERALD_YELLOW, EL_EMERALD_RED, EL_EMERALD_PURPLE, - EL_DIAMOND + EL_DIAMOND, + -1 }; - static int ep_gem_num = SIZEOF_ARRAY_INT(ep_gem); static int ep_inactive[] = { @@ -1876,9 +1872,9 @@ void InitElementProperties() EL_EMC_WALL_5, EL_EMC_WALL_6, EL_EMC_WALL_7, - EL_EMC_WALL_8 + EL_EMC_WALL_8, + -1 }; - static int ep_inactive_num = SIZEOF_ARRAY_INT(ep_inactive); static int ep_explosive[] = { @@ -1904,11 +1900,11 @@ void InitElementProperties() EL_SP_DISK_YELLOW, EL_SP_SNIKSNAK, EL_SP_ELECTRON, - EL_DX_SUPABOMB + EL_DX_SUPABOMB, + -1 }; - static int ep_explosive_num = SIZEOF_ARRAY_INT(ep_explosive); - static int ep_mampf3[] = + static int ep_food_penguin[] = { EL_EMERALD, EL_BD_DIAMOND, @@ -1917,9 +1913,9 @@ void InitElementProperties() EL_EMERALD_PURPLE, EL_DIAMOND, EL_PEARL, - EL_CRYSTAL + EL_CRYSTAL, + -1 }; - static int ep_mampf3_num = SIZEOF_ARRAY_INT(ep_mampf3); static int ep_pushable[] = { @@ -1936,92 +1932,53 @@ void InitElementProperties() EL_SP_DISK_YELLOW, EL_BALLOON, EL_SPRING, - EL_DX_SUPABOMB + EL_DX_SUPABOMB, + -1 }; - static int ep_pushable_num = SIZEOF_ARRAY_INT(ep_pushable); static int ep_player[] = { EL_PLAYER_1, EL_PLAYER_2, EL_PLAYER_3, - EL_PLAYER_4 + EL_PLAYER_4, + -1 }; - static int ep_player_num = SIZEOF_ARRAY_INT(ep_player); - static int ep_has_content[] = + static int ep_walkable_over[] = { - EL_YAMYAM, - EL_AMOEBA_WET, - EL_AMOEBA_DRY, - EL_AMOEBA_FULL, - EL_BD_AMOEBA + EL_EMPTY_SPACE, + EL_SP_EMPTY_SPACE, + /* !!! EL_GATE_[1-4], EL_GATE_[1-4]_GRAY !!! */ + /* !!! EL_EM_GATE_[1-4], EL_EM_GATE_[1-4]_GRAY !!! */ + EL_SOKOBAN_FIELD_EMPTY, + EL_EXIT_OPEN, + EL_SP_EXIT_OPEN, + -1 }; - static int ep_has_content_num = SIZEOF_ARRAY_INT(ep_has_content); - static int ep_eatable[] = + static int ep_walkable_through[] = { - EL_SAND, - EL_SP_BASE, - EL_SP_BUGGY_BASE, - EL_SP_BUGGY_BASE_ACTIVATING, - EL_TRAP, - EL_INVISIBLE_SAND, - EL_INVISIBLE_SAND_ACTIVE + EL_TUBE_ANY, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERTICAL_LEFT, + EL_TUBE_VERTICAL_RIGHT, + EL_TUBE_HORIZONTAL_UP, + EL_TUBE_HORIZONTAL_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN, + -1 }; - static int ep_eatable_num = SIZEOF_ARRAY_INT(ep_eatable); - static int ep_sp_element[] = + static int ep_walkable_under[] = { - EL_SP_EMPTY, - EL_SP_ZONK, - EL_SP_BASE, - EL_SP_MURPHY, - EL_SP_INFOTRON, - EL_SP_CHIP_SINGLE, - EL_SP_HARDWARE_GRAY, - EL_SP_EXIT_CLOSED, - EL_SP_EXIT_OPEN, - EL_SP_DISK_ORANGE, - EL_SP_PORT_RIGHT, - EL_SP_PORT_DOWN, - EL_SP_PORT_LEFT, - EL_SP_PORT_UP, - EL_SP_GRAVITY_PORT_RIGHT, - EL_SP_GRAVITY_PORT_DOWN, - EL_SP_GRAVITY_PORT_LEFT, - EL_SP_GRAVITY_PORT_UP, - EL_SP_SNIKSNAK, - EL_SP_DISK_YELLOW, - EL_SP_TERMINAL, - EL_SP_DISK_RED, - EL_SP_PORT_VERTICAL, - EL_SP_PORT_HORIZONTAL, - EL_SP_PORT_ANY, - EL_SP_ELECTRON, - EL_SP_BUGGY_BASE, - EL_SP_CHIP_LEFT, - EL_SP_CHIP_RIGHT, - EL_SP_HARDWARE_BASE_1, - EL_SP_HARDWARE_GREEN, - EL_SP_HARDWARE_BLUE, - EL_SP_HARDWARE_RED, - EL_SP_HARDWARE_YELLOW, - EL_SP_HARDWARE_BASE_2, - EL_SP_HARDWARE_BASE_3, - EL_SP_HARDWARE_BASE_4, - EL_SP_HARDWARE_BASE_5, - EL_SP_HARDWARE_BASE_6, - EL_SP_CHIP_TOP, - EL_SP_CHIP_BOTTOM, - /* additional elements that appeared in newer Supaplex levels */ - EL_INVISIBLE_WALL, - /* more than one murphy in a level results in an inactive clone */ - EL_SP_MURPHY_CLONE + -1 }; - static int ep_sp_element_num = SIZEOF_ARRAY_INT(ep_sp_element); - static int ep_quick_gate[] = + static int ep_passable_over[] = { EL_EM_GATE_1, EL_EM_GATE_2, @@ -2031,21 +1988,80 @@ void InitElementProperties() EL_EM_GATE_2_GRAY, EL_EM_GATE_3_GRAY, EL_EM_GATE_4_GRAY, + EL_SWITCHGATE_OPEN, + EL_TIMEGATE_OPEN, + -1 + }; + + static int ep_passable_through[] = + { EL_SP_PORT_LEFT, EL_SP_PORT_RIGHT, EL_SP_PORT_UP, EL_SP_PORT_DOWN, + EL_SP_PORT_HORIZONTAL, + EL_SP_PORT_VERTICAL, + EL_SP_PORT_ANY, EL_SP_GRAVITY_PORT_LEFT, EL_SP_GRAVITY_PORT_RIGHT, EL_SP_GRAVITY_PORT_UP, EL_SP_GRAVITY_PORT_DOWN, - EL_SP_PORT_HORIZONTAL, - EL_SP_PORT_VERTICAL, - EL_SP_PORT_ANY, - EL_SWITCHGATE_OPEN, - EL_TIMEGATE_OPEN + -1 + }; + + static int ep_passable_under[] = + { + -1 + }; + + static int ep_diggable[] = + { + EL_SAND, + EL_SP_BASE, + EL_SP_BUGGY_BASE, + EL_SP_BUGGY_BASE_ACTIVATING, + EL_TRAP, + EL_INVISIBLE_SAND, + EL_INVISIBLE_SAND_ACTIVE, +#if 0 + EL_LANDMINE, + EL_SP_BUGGY_BASE_ACTIVE, +#endif + -1 + }; + + static int ep_collectible[] = + { + EL_BD_DIAMOND, + EL_EMERALD, + EL_DIAMOND, + EL_EMERALD_YELLOW, + EL_EMERALD_RED, + EL_EMERALD_PURPLE, + EL_KEY_1, + EL_KEY_2, + EL_KEY_3, + EL_KEY_4, + EL_EM_KEY_1, + EL_EM_KEY_2, + EL_EM_KEY_3, + EL_EM_KEY_4, + EL_DYNAMITE, + EL_DYNABOMB_INCREASE_NUMBER, + EL_DYNABOMB_INCREASE_SIZE, + EL_DYNABOMB_INCREASE_POWER, + EL_SP_INFOTRON, + EL_SP_DISK_RED, + EL_PEARL, + EL_CRYSTAL, + EL_KEY_WHITE, + EL_SHIELD_NORMAL, + EL_SHIELD_DEADLY, + EL_EXTRA_TIME, + EL_ENVELOPE, + EL_SPEED_PILL, + -1 }; - static int ep_quick_gate_num = SIZEOF_ARRAY_INT(ep_quick_gate); static int ep_over_player[] = { @@ -2053,26 +2069,26 @@ void InitElementProperties() EL_SP_PORT_RIGHT, EL_SP_PORT_UP, EL_SP_PORT_DOWN, + EL_SP_PORT_HORIZONTAL, + EL_SP_PORT_VERTICAL, + EL_SP_PORT_ANY, EL_SP_GRAVITY_PORT_LEFT, EL_SP_GRAVITY_PORT_RIGHT, EL_SP_GRAVITY_PORT_UP, EL_SP_GRAVITY_PORT_DOWN, - EL_SP_PORT_HORIZONTAL, - EL_SP_PORT_VERTICAL, - EL_SP_PORT_ANY, - EL_TUBE_ANY, - EL_TUBE_VERTICAL, - EL_TUBE_HORIZONTAL, - EL_TUBE_VERTICAL_LEFT, - EL_TUBE_VERTICAL_RIGHT, - EL_TUBE_HORIZONTAL_UP, - EL_TUBE_HORIZONTAL_DOWN, EL_TUBE_LEFT_UP, EL_TUBE_LEFT_DOWN, EL_TUBE_RIGHT_UP, - EL_TUBE_RIGHT_DOWN + EL_TUBE_RIGHT_DOWN, + EL_TUBE_HORIZONTAL, + EL_TUBE_HORIZONTAL_UP, + EL_TUBE_HORIZONTAL_DOWN, + EL_TUBE_VERTICAL, + EL_TUBE_VERTICAL_LEFT, + EL_TUBE_VERTICAL_RIGHT, + EL_TUBE_ANY, + -1 }; - static int ep_over_player_num = SIZEOF_ARRAY_INT(ep_over_player); static int ep_active_bomb[] = { @@ -2081,9 +2097,9 @@ void InitElementProperties() EL_DYNABOMB_PLAYER_2_ACTIVE, EL_DYNABOMB_PLAYER_3_ACTIVE, EL_DYNABOMB_PLAYER_4_ACTIVE, - EL_SP_DISK_RED_ACTIVE + EL_SP_DISK_RED_ACTIVE, + -1 }; - static int ep_active_bomb_num = SIZEOF_ARRAY_INT(ep_active_bomb); static int ep_belt[] = { @@ -2099,8 +2115,8 @@ void InitElementProperties() EL_CONVEYOR_BELT_4_LEFT, EL_CONVEYOR_BELT_4_MIDDLE, EL_CONVEYOR_BELT_4_RIGHT, + -1 }; - static int ep_belt_num = SIZEOF_ARRAY_INT(ep_belt); static int ep_belt_active[] = { @@ -2116,8 +2132,8 @@ void InitElementProperties() EL_CONVEYOR_BELT_4_LEFT_ACTIVE, EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE, EL_CONVEYOR_BELT_4_RIGHT_ACTIVE, + -1 }; - static int ep_belt_active_num = SIZEOF_ARRAY_INT(ep_belt_active); static int ep_belt_switch[] = { @@ -2133,186 +2149,244 @@ void InitElementProperties() EL_CONVEYOR_BELT_4_SWITCH_LEFT, EL_CONVEYOR_BELT_4_SWITCH_MIDDLE, EL_CONVEYOR_BELT_4_SWITCH_RIGHT, + -1 + }; + + static int ep_sp_element[] = + { + EL_SP_EMPTY, + EL_SP_ZONK, + EL_SP_BASE, + EL_SP_MURPHY, + EL_SP_INFOTRON, + EL_SP_CHIP_SINGLE, + EL_SP_HARDWARE_GRAY, + EL_SP_EXIT_CLOSED, + EL_SP_EXIT_OPEN, + EL_SP_DISK_ORANGE, + EL_SP_PORT_RIGHT, + EL_SP_PORT_DOWN, + EL_SP_PORT_LEFT, + EL_SP_PORT_UP, + EL_SP_GRAVITY_PORT_RIGHT, + EL_SP_GRAVITY_PORT_DOWN, + EL_SP_GRAVITY_PORT_LEFT, + EL_SP_GRAVITY_PORT_UP, + EL_SP_SNIKSNAK, + EL_SP_DISK_YELLOW, + EL_SP_TERMINAL, + EL_SP_DISK_RED, + EL_SP_PORT_VERTICAL, + EL_SP_PORT_HORIZONTAL, + EL_SP_PORT_ANY, + EL_SP_ELECTRON, + EL_SP_BUGGY_BASE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_HARDWARE_BASE_1, + EL_SP_HARDWARE_GREEN, + EL_SP_HARDWARE_BLUE, + EL_SP_HARDWARE_RED, + EL_SP_HARDWARE_YELLOW, + EL_SP_HARDWARE_BASE_2, + EL_SP_HARDWARE_BASE_3, + EL_SP_HARDWARE_BASE_4, + EL_SP_HARDWARE_BASE_5, + EL_SP_HARDWARE_BASE_6, + EL_SP_CHIP_TOP, + EL_SP_CHIP_BOTTOM, + /* additional elements that appeared in newer Supaplex levels */ + EL_INVISIBLE_WALL, + /* more than one murphy in a level results in an inactive clone */ + EL_SP_MURPHY_CLONE, + -1 + }; + + static int ep_has_content[] = + { + EL_YAMYAM, + EL_AMOEBA_WET, + EL_AMOEBA_DRY, + EL_AMOEBA_FULL, + EL_BD_AMOEBA, + -1 }; - static int ep_belt_switch_num = SIZEOF_ARRAY_INT(ep_belt_switch); static int ep_tube[] = { - EL_TUBE_ANY, - EL_TUBE_VERTICAL, - EL_TUBE_HORIZONTAL, - EL_TUBE_VERTICAL_LEFT, - EL_TUBE_VERTICAL_RIGHT, - EL_TUBE_HORIZONTAL_UP, - EL_TUBE_HORIZONTAL_DOWN, EL_TUBE_LEFT_UP, EL_TUBE_LEFT_DOWN, EL_TUBE_RIGHT_UP, - EL_TUBE_RIGHT_DOWN + EL_TUBE_RIGHT_DOWN, + EL_TUBE_HORIZONTAL, + EL_TUBE_HORIZONTAL_UP, + EL_TUBE_HORIZONTAL_DOWN, + EL_TUBE_VERTICAL, + EL_TUBE_VERTICAL_LEFT, + EL_TUBE_VERTICAL_RIGHT, + EL_TUBE_ANY, + -1 }; - static int ep_tube_num = SIZEOF_ARRAY_INT(ep_tube); - static int ep_em_slippery_wall[] = + static struct { + int *elements; + int property; + } element_properties[] = + { + { ep_amoebalive, EP_AMOEBALIVE }, + { ep_amoeboid, EP_AMOEBOID }, + { ep_can_be_crumbled, EP_CAN_BE_CRUMBLED }, + { ep_pforte, EP_PFORTE }, + { ep_solid, EP_SOLID }, + { ep_indestructible, EP_INDESTRUCTIBLE }, + { ep_slippery, EP_SLIPPERY }, + { ep_enemy, EP_ENEMY }, + { ep_mauer, EP_MAUER }, + { ep_can_fall, EP_CAN_FALL }, + { ep_can_smash, EP_CAN_SMASH }, + { ep_can_change, EP_CAN_CHANGE }, + { ep_can_move, EP_CAN_MOVE }, + { ep_could_move, EP_COULD_MOVE }, + { ep_dont_touch, EP_DONT_TOUCH }, + { ep_dont_go_to, EP_DONT_GO_TO }, + { ep_food_dark_yamyam, EP_FOOD_DARK_YAMYAM }, + { ep_bd_element, EP_BD_ELEMENT }, + { ep_sb_element, EP_SB_ELEMENT }, + { ep_gem, EP_GEM }, + { ep_inactive, EP_INACTIVE }, + { ep_explosive, EP_EXPLOSIVE }, + { ep_food_penguin, EP_FOOD_PENGUIN }, + { ep_pushable, EP_PUSHABLE }, + { ep_player, EP_PLAYER }, + { ep_walkable_over, EP_WALKABLE_OVER }, + { ep_walkable_through, EP_WALKABLE_THROUGH }, + { ep_walkable_under, EP_WALKABLE_UNDER }, + { ep_passable_over, EP_PASSABLE_OVER }, + { ep_passable_through, EP_PASSABLE_THROUGH }, + { ep_passable_under, EP_PASSABLE_UNDER }, + + { ep_diggable, EP_DIGGABLE }, + { ep_collectible, EP_COLLECTIBLE }, + { ep_over_player, EP_OVER_PLAYER }, + { ep_active_bomb, EP_ACTIVE_BOMB }, + { ep_belt, EP_BELT }, + { ep_belt_active, EP_BELT_ACTIVE }, + { ep_belt_switch, EP_BELT_SWITCH }, + { ep_sp_element, EP_SP_ELEMENT }, + { ep_has_content, EP_HAS_CONTENT }, + { ep_tube, EP_TUBE }, + { NULL, -1 } }; - static int ep_em_slippery_wall_num = SIZEOF_ARRAY_INT(ep_em_slippery_wall); - static int ep_can_be_crumbled[] = - { - EL_SAND, - EL_LANDMINE, - EL_TRAP, - EL_TRAP_ACTIVE - }; - static int ep_can_be_crumbled_num = SIZEOF_ARRAY_INT(ep_can_be_crumbled); - - static long ep1_bit[] = - { - EP_BIT_AMOEBALIVE, - EP_BIT_AMOEBOID, - EP_BIT_SCHLUESSEL, - EP_BIT_PFORTE, - EP_BIT_SOLID, - EP_BIT_INDESTRUCTIBLE, - EP_BIT_SLIPPERY, - EP_BIT_ENEMY, - EP_BIT_MAUER, - EP_BIT_CAN_FALL, - EP_BIT_CAN_SMASH, - EP_BIT_CAN_CHANGE, - EP_BIT_CAN_MOVE, - EP_BIT_COULD_MOVE, - EP_BIT_DONT_TOUCH, - EP_BIT_DONT_GO_TO, - EP_BIT_MAMPF2, - EP_BIT_BD_ELEMENT, - EP_BIT_SB_ELEMENT, - EP_BIT_GEM, - EP_BIT_INACTIVE, - EP_BIT_EXPLOSIVE, - EP_BIT_MAMPF3, - EP_BIT_PUSHABLE, - EP_BIT_PLAYER, - EP_BIT_HAS_CONTENT, - EP_BIT_EATABLE, - EP_BIT_SP_ELEMENT, - EP_BIT_QUICK_GATE, - EP_BIT_OVER_PLAYER, - EP_BIT_ACTIVE_BOMB - }; - static long ep2_bit[] = - { - EP_BIT_BELT, - EP_BIT_BELT_ACTIVE, - EP_BIT_BELT_SWITCH, - EP_BIT_TUBE, - EP_BIT_EM_SLIPPERY_WALL, - EP_BIT_CAN_BE_CRUMBLED - }; - static int *ep1_array[] = - { - ep_amoebalive, - ep_amoeboid, - ep_schluessel, - ep_pforte, - ep_solid, - ep_indestructible, - ep_slippery, - ep_enemy, - ep_mauer, - ep_can_fall, - ep_can_smash, - ep_can_change, - ep_can_move, - ep_could_move, - ep_dont_touch, - ep_dont_go_to, - ep_mampf2, - ep_bd_element, - ep_sb_element, - ep_gem, - ep_inactive, - ep_explosive, - ep_mampf3, - ep_pushable, - ep_player, - ep_has_content, - ep_eatable, - ep_sp_element, - ep_quick_gate, - ep_over_player, - ep_active_bomb - }; - static int *ep2_array[] = - { - ep_belt, - ep_belt_active, - ep_belt_switch, - ep_tube, - ep_em_slippery_wall, - ep_can_be_crumbled - }; - static int *ep1_num[] = - { - &ep_amoebalive_num, - &ep_amoeboid_num, - &ep_schluessel_num, - &ep_pforte_num, - &ep_solid_num, - &ep_indestructible_num, - &ep_slippery_num, - &ep_enemy_num, - &ep_mauer_num, - &ep_can_fall_num, - &ep_can_smash_num, - &ep_can_change_num, - &ep_can_move_num, - &ep_could_move_num, - &ep_dont_touch_num, - &ep_dont_go_to_num, - &ep_mampf2_num, - &ep_bd_element_num, - &ep_sb_element_num, - &ep_gem_num, - &ep_inactive_num, - &ep_explosive_num, - &ep_mampf3_num, - &ep_pushable_num, - &ep_player_num, - &ep_has_content_num, - &ep_eatable_num, - &ep_sp_element_num, - &ep_quick_gate_num, - &ep_over_player_num, - &ep_active_bomb_num - }; - static int *ep2_num[] = - { - &ep_belt_num, - &ep_belt_active_num, - &ep_belt_switch_num, - &ep_tube_num, - &ep_em_slippery_wall_num, - &ep_can_be_crumbled_num +#if 0 + static int active_properties[] = + { + EP_AMOEBALIVE, + EP_AMOEBOID, + EP_PFORTE, + EP_SOLID, + EP_ENEMY, + EP_MAUER, + EP_CAN_FALL, + EP_CAN_SMASH, + EP_CAN_CHANGE, + EP_CAN_MOVE, + EP_COULD_MOVE, + EP_DONT_TOUCH, + EP_DONT_GO_TO, + EP_GEM, + EP_EXPLOSIVE, + EP_PUSHABLE, + EP_PLAYER, + EP_HAS_CONTENT, + EP_DIGGABLE, + EP_PASSABLE_THROUGH, + EP_OVER_PLAYER, + EP_ACTIVE_BOMB, + + EP_BELT, + EP_BELT_ACTIVE, + EP_BELT_SWITCH, + EP_WALKABLE_UNDER, + EP_EM_SLIPPERY_WALL, + EP_CAN_BE_CRUMBLED, }; - static int num_properties1 = SIZEOF_ARRAY(ep1_num, int *); - static int num_properties2 = SIZEOF_ARRAY(ep2_num, int *); +#endif + + /* always start with reliable default values (no properties) */ + for (i=0; i