X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Finit.c;h=508a50af5580138576d56812052d4f5029ec8e14;hp=7af34951c4cc368fafcb1608b1a9d2f2eaaabffa;hb=5ae04ac2ef54f6f164a797c16c9782042cc2ce67;hpb=c3b01181bb715bd5f4e4b519a0df8efd90d3c9aa diff --git a/src/init.c b/src/init.c index 7af34951..508a50af 100644 --- a/src/init.c +++ b/src/init.c @@ -1101,16 +1101,12 @@ void InitElementProperties() -1 }; - 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 }; @@ -1665,7 +1661,7 @@ void InitElementProperties() -1 }; - static int ep_mampf2[] = + static int ep_food_dark_yamyam[] = { EL_SAND, EL_BUG, @@ -1908,7 +1904,7 @@ void InitElementProperties() -1 }; - static int ep_mampf3[] = + static int ep_food_penguin[] = { EL_EMERALD, EL_BD_DIAMOND, @@ -1949,17 +1945,19 @@ void InitElementProperties() -1 }; - 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_eatable[] = + static int ep_diggable[] = { EL_SAND, EL_SP_BASE, @@ -1968,60 +1966,47 @@ void InitElementProperties() EL_TRAP, EL_INVISIBLE_SAND, EL_INVISIBLE_SAND_ACTIVE, +#if 0 + EL_LANDMINE, + EL_SP_BUGGY_BASE_ACTIVE, +#endif -1 }; - static int ep_sp_element[] = + static int ep_collectible[] = { - EL_SP_EMPTY, - EL_SP_ZONK, - EL_SP_BASE, - EL_SP_MURPHY, + 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_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, + 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[] = + static int ep_walkable_through[] = { EL_EM_GATE_1, EL_EM_GATE_2, @@ -2035,13 +2020,13 @@ 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_SWITCHGATE_OPEN, EL_TIMEGATE_OPEN, -1 @@ -2136,7 +2121,7 @@ void InitElementProperties() -1 }; - static int ep_tube[] = + static int ep_walkable_under[] = { EL_TUBE_ANY, EL_TUBE_VERTICAL, @@ -2152,12 +2137,68 @@ void InitElementProperties() -1 }; - static int ep_can_be_crumbled[] = + 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_solid_new[] = { - EL_SAND, - EL_LANDMINE, - EL_TRAP, - EL_TRAP_ACTIVE, -1 }; @@ -2169,7 +2210,7 @@ void InitElementProperties() { { ep_amoebalive, EP_AMOEBALIVE }, { ep_amoeboid, EP_AMOEBOID }, - { ep_schluessel, EP_SCHLUESSEL }, + { ep_can_be_crumbled, EP_CAN_BE_CRUMBLED }, { ep_pforte, EP_PFORTE }, { ep_solid, EP_SOLID }, { ep_indestructible, EP_INDESTRUCTIBLE }, @@ -2183,29 +2224,66 @@ void InitElementProperties() { ep_could_move, EP_COULD_MOVE }, { ep_dont_touch, EP_DONT_TOUCH }, { ep_dont_go_to, EP_DONT_GO_TO }, - { ep_mampf2, EP_MAMPF2 }, + { 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_mampf3, EP_MAMPF3 }, + { ep_food_penguin, EP_FOOD_PENGUIN }, { ep_pushable, EP_PUSHABLE }, { ep_player, EP_PLAYER }, - { ep_has_content, EP_HAS_CONTENT }, - { ep_eatable, EP_EATABLE }, - { ep_sp_element, EP_SP_ELEMENT }, - { ep_quick_gate, EP_QUICK_GATE }, + { ep_walkable_over, EP_WALKABLE_OVER }, + { ep_diggable, EP_DIGGABLE }, + { ep_collectible, EP_COLLECTIBLE }, + { ep_walkable_through, EP_WALKABLE_THROUGH }, { 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_tube, EP_TUBE }, - { ep_can_be_crumbled, EP_CAN_BE_CRUMBLED }, + { ep_walkable_under, EP_WALKABLE_UNDER }, + { ep_sp_element, EP_SP_ELEMENT }, + { ep_has_content, EP_HAS_CONTENT }, + { ep_solid_new, EP_SOLID_NEW }, { NULL, -1 } }; +#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_WALKABLE_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, + }; +#endif + /* always start with reliable default values (no properties) */ for (i=0; i= 0; j++) + for (j=0; (element_properties[i].elements)[j] != -1; j++) SET_PROPERTY((element_properties[i].elements)[j], element_properties[i].property, TRUE); /* set properties of character elements */ for (i=EL_CHAR_START; i<=EL_CHAR_END; i++) - { - SET_PROPERTY(i, EP_CHAR, TRUE); SET_PROPERTY(i, EP_INACTIVE, TRUE); + +#if 0 + /* determine inactive elements (used for engine main loop optimization) */ + for (i=0; i < MAX_NUM_ELEMENTS; i++) + { + boolean active = FALSE; + + for (j=0; i < NUM_ELEMENT_PROPERTIES; j++) + { + if (HAS_PROPERTY(i, j)) + active = TRUE; + } + +#if 0 + if (!active) + SET_PROPERTY(i, EP_INACTIVE, TRUE); +#endif + } +#endif + +#if 0 + for (i=0; i < MAX_NUM_ELEMENTS; i++) + { + boolean element_is_solid = TRUE; + + if (IS_DIGGABLE(i) || + IS_COLLECTIBLE(i) || + CAN_FALL(i) || + CAN_MOVE(i) || + IS_PUSHABLE(i)) + element_is_solid = FALSE; + + if (IS_INDESTRUCTIBLE(i)) + element_is_solid = TRUE; + + if (element_is_solid != HAS_PROPERTY(i, EP_SOLID)) + printf("::: '%s' should %s solid\n", element_info[i].token_name, + (HAS_PROPERTY(i, EP_SOLID) ? "NOT be" : "be")); } +#endif } static void InitGlobal()