X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=32b2cb8e3d6504c2f426e26ba65b554695b3c855;hb=cd9add1d9479d1938d05ca9df4f31c3f99bd5f3e;hp=7c877f2dc26e56e4464d294744fa6d6138ace8a2;hpb=ab939d25272479b99688fb27fd9c09dbbe05b2bb;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 7c877f2d..32b2cb8e 100644 --- a/src/init.c +++ b/src/init.c @@ -26,6 +26,9 @@ #include "cartoons.h" #include "config.h" +#include "conf_e2g.c" /* include auto-generated data structure definitions */ + + static char *image_filename[NUM_PICTURES] = { "RocksScreen.pcx", @@ -556,8 +559,7 @@ void InitGadgets() void InitElementInfo() { - int i, j; - +#if 0 static struct { int element; @@ -575,7 +577,6 @@ void InitElementInfo() { EL_EXIT_OPENING, GFX_AUSGANG_ACT }, { EL_EXIT_OPEN, GFX_AUSGANG_AUF }, { EL_SP_EXIT_OPEN, GFX_SP_EXIT }, - { EL_PLAYER, GFX_SPIELFIGUR }, { EL_PLAYER1, GFX_SPIELER1 }, { EL_PLAYER2, GFX_SPIELER2 }, { EL_PLAYER3, GFX_SPIELER3 }, @@ -610,7 +611,7 @@ void InitElementInfo() { EL_AMOEBA_DROP, GFX_TROPFEN }, { EL_BOMB, GFX_BOMBE }, { EL_MAGIC_WALL, GFX_MAGIC_WALL_OFF }, - { EL_MAGIC_WALL_EMPTY, GFX_MAGIC_WALL_EMPTY }, + { EL_MAGIC_WALL_ACTIVE, GFX_MAGIC_WALL_EMPTY }, { EL_MAGIC_WALL_EMPTYING, GFX_MAGIC_WALL_EMPTY }, { EL_MAGIC_WALL_FULL, GFX_MAGIC_WALL_FULL }, { EL_MAGIC_WALL_DEAD, GFX_MAGIC_WALL_DEAD }, @@ -653,6 +654,7 @@ void InitElementInfo() { EL_PACMAN_LEFT, GFX_PACMAN_LEFT }, { EL_PACMAN_DOWN, GFX_PACMAN_DOWN }, { EL_INVISIBLE_WALL, GFX_UNSICHTBAR }, + { EL_INVISIBLE_WALL_ACTIVE, GFX_UNSICHTBAR_ON }, { EL_WALL_EMERALD, GFX_ERZ_EDEL }, { EL_WALL_DIAMOND, GFX_ERZ_DIAM }, { EL_LAMP, GFX_BIRNE_AUS }, @@ -673,14 +675,14 @@ void InitElementInfo() { EL_WALL_EMERALD_PURPLE, GFX_ERZ_EDEL_LILA }, { EL_DARK_YAMYAM, GFX_MAMPFER2 }, { EL_BD_MAGIC_WALL, GFX_MAGIC_WALL_BD_OFF }, - { EL_BD_MAGIC_WALL_EMPTY, GFX_MAGIC_WALL_BD_EMPTY }, + { EL_BD_MAGIC_WALL_ACTIVE, GFX_MAGIC_WALL_BD_EMPTY }, { EL_BD_MAGIC_WALL_EMPTYING, GFX_MAGIC_WALL_BD_EMPTY }, { EL_BD_MAGIC_WALL_FULL, GFX_MAGIC_WALL_BD_FULL }, { EL_BD_MAGIC_WALL_DEAD, GFX_MAGIC_WALL_BD_DEAD }, - { EL_DYNABOMB_ACTIVE_1, GFX_DYNABOMB }, - { EL_DYNABOMB_ACTIVE_2, GFX_DYNABOMB }, - { EL_DYNABOMB_ACTIVE_3, GFX_DYNABOMB }, - { EL_DYNABOMB_ACTIVE_4, GFX_DYNABOMB }, + { EL_DYNABOMB_PLAYER1_ACTIVE, GFX_DYNABOMB }, + { EL_DYNABOMB_PLAYER2_ACTIVE, GFX_DYNABOMB }, + { EL_DYNABOMB_PLAYER3_ACTIVE, GFX_DYNABOMB }, + { EL_DYNABOMB_PLAYER4_ACTIVE, GFX_DYNABOMB }, { EL_DYNABOMB_NR, GFX_DYNABOMB_NR }, { EL_DYNABOMB_SZ, GFX_DYNABOMB_SZ }, { EL_DYNABOMB_XL, GFX_DYNABOMB_XL }, @@ -701,6 +703,7 @@ void InitElementInfo() { EL_SP_BUGGY_BASE_ACTIVE, GFX_SP_BUG_ACTIVE }, { EL_SP_ZONK, GFX_SP_ZONK }, { EL_INVISIBLE_STEELWALL, GFX_INVISIBLE_STEEL }, + { EL_INVISIBLE_STEELWALL_ACTIVE, GFX_INVISIBLE_STEEL_ON }, { EL_BLACK_ORB, GFX_BLACK_ORB }, { EL_EM_GATE1, GFX_EM_GATE_1 }, { EL_EM_GATE2, GFX_EM_GATE_2 }, @@ -735,24 +738,36 @@ void InitElementInfo() { EL_CONVEYOR_BELT1_LEFT, GFX_BELT1_LEFT }, { EL_CONVEYOR_BELT1_MIDDLE, GFX_BELT1_MIDDLE }, { EL_CONVEYOR_BELT1_RIGHT, GFX_BELT1_RIGHT }, + { EL_CONVEYOR_BELT1_LEFT_ACTIVE, GFX_BELT1_LEFT }, + { EL_CONVEYOR_BELT1_MIDDLE_ACTIVE, GFX_BELT1_MIDDLE }, + { EL_CONVEYOR_BELT1_RIGHT_ACTIVE, GFX_BELT1_RIGHT }, { EL_CONVEYOR_BELT1_SWITCH_LEFT, GFX_BELT1_SWITCH_LEFT }, { EL_CONVEYOR_BELT1_SWITCH_MIDDLE, GFX_BELT1_SWITCH_MIDDLE }, { EL_CONVEYOR_BELT1_SWITCH_RIGHT, GFX_BELT1_SWITCH_RIGHT }, { EL_CONVEYOR_BELT2_LEFT, GFX_BELT2_LEFT }, { EL_CONVEYOR_BELT2_MIDDLE, GFX_BELT2_MIDDLE }, { EL_CONVEYOR_BELT2_RIGHT, GFX_BELT2_RIGHT }, + { EL_CONVEYOR_BELT2_LEFT_ACTIVE, GFX_BELT2_LEFT }, + { EL_CONVEYOR_BELT2_MIDDLE_ACTIVE, GFX_BELT2_MIDDLE }, + { EL_CONVEYOR_BELT2_RIGHT_ACTIVE, GFX_BELT2_RIGHT }, { EL_CONVEYOR_BELT2_SWITCH_LEFT, GFX_BELT2_SWITCH_LEFT }, { EL_CONVEYOR_BELT2_SWITCH_MIDDLE, GFX_BELT2_SWITCH_MIDDLE }, { EL_CONVEYOR_BELT2_SWITCH_RIGHT, GFX_BELT2_SWITCH_RIGHT }, { EL_CONVEYOR_BELT3_LEFT, GFX_BELT3_LEFT }, { EL_CONVEYOR_BELT3_MIDDLE, GFX_BELT3_MIDDLE }, { EL_CONVEYOR_BELT3_RIGHT, GFX_BELT3_RIGHT }, + { EL_CONVEYOR_BELT3_LEFT_ACTIVE, GFX_BELT3_LEFT }, + { EL_CONVEYOR_BELT3_MIDDLE_ACTIVE, GFX_BELT3_MIDDLE }, + { EL_CONVEYOR_BELT3_RIGHT_ACTIVE, GFX_BELT3_RIGHT }, { EL_CONVEYOR_BELT3_SWITCH_LEFT, GFX_BELT3_SWITCH_LEFT }, { EL_CONVEYOR_BELT3_SWITCH_MIDDLE, GFX_BELT3_SWITCH_MIDDLE }, { EL_CONVEYOR_BELT3_SWITCH_RIGHT, GFX_BELT3_SWITCH_RIGHT }, { EL_CONVEYOR_BELT4_LEFT, GFX_BELT4_LEFT }, { EL_CONVEYOR_BELT4_MIDDLE, GFX_BELT4_MIDDLE }, { EL_CONVEYOR_BELT4_RIGHT, GFX_BELT4_RIGHT }, + { EL_CONVEYOR_BELT4_LEFT_ACTIVE, GFX_BELT4_LEFT }, + { EL_CONVEYOR_BELT4_MIDDLE_ACTIVE, GFX_BELT4_MIDDLE }, + { EL_CONVEYOR_BELT4_RIGHT_ACTIVE, GFX_BELT4_RIGHT }, { EL_CONVEYOR_BELT4_SWITCH_LEFT, GFX_BELT4_SWITCH_LEFT }, { EL_CONVEYOR_BELT4_SWITCH_MIDDLE, GFX_BELT4_SWITCH_MIDDLE }, { EL_CONVEYOR_BELT4_SWITCH_RIGHT, GFX_BELT4_SWITCH_RIGHT }, @@ -778,6 +793,7 @@ void InitElementInfo() { EL_MOLE_DOWN, GFX_MOLE_DOWN }, { EL_STEELWALL_SLANTED, GFX_STEEL_SLANTED }, { EL_INVISIBLE_SAND, GFX_SAND_INVISIBLE }, + { EL_INVISIBLE_SAND_ACTIVE, GFX_SAND_INVISIBLE_ON }, { EL_DX_UNKNOWN_15, GFX_DX_UNKNOWN_15 }, { EL_DX_UNKNOWN_42, GFX_DX_UNKNOWN_42 }, { EL_TIMEGATE_OPEN, GFX_TIMEGATE_OPEN }, @@ -905,21 +921,33 @@ void InitElementInfo() -1, -1 } }; +#endif - /* always start with reliable default values */ + int i, act, dir; + + /* set values to -1 to identify later as "uninitialized" values */ for(i=0; i -1) @@ -961,6 +991,73 @@ void InitElementInfo() element_info[element].has_direction_graphic[GFX_ACTION_DEFAULT] = TRUE; i++; } +#else + + i = 0; + while (element_to_graphic[i].element > -1) + { + int element = element_to_graphic[i].element; + int direction = element_to_graphic[i].direction; + int action = element_to_graphic[i].action; + int graphic = element_to_graphic[i].graphic; + + if (action > -1) + action = graphics_action_mapping[action]; + else + action = GFX_ACTION_DEFAULT; + + if (direction > -1) + { + direction = MV_DIR_BIT(direction); + + element_info[element].direction_graphic[action][direction] = graphic; + } + else + element_info[element].graphic[action] = graphic; + + i++; + } + + /* now set all '-1' values to element specific default values */ + for(i=0; i 1) + new_graphic_info[i].anim_mode = ANIM_LOOP; else - new_graphic_info[i].anim_mode = ANIM_NORMAL; + new_graphic_info[i].anim_mode = ANIM_NONE; - /* additionally, animation can be either pingpong or pingpong2 layout */ - if (parameter[GFX_ARG_PINGPONG]) - new_graphic_info[i].anim_mode |= ANIM_PINGPONG; - else if (parameter[GFX_ARG_PINGPONG2]) - new_graphic_info[i].anim_mode |= ANIM_PINGPONG2; + /* set additional flag to play animation frames in reverse order */ + if (parameter[GFX_ARG_MODE_REVERSE]) + new_graphic_info[i].anim_mode |= ANIM_REVERSE; /* animation synchronized with global frame counter, not move position */ new_graphic_info[i].anim_global_sync = parameter[GFX_ARG_GLOBAL_SYNC]; - - new_graphic_info[i].anim_vertical = parameter[GFX_ARG_VERTICAL]; } #if 0 @@ -1140,13 +1250,13 @@ void InitElementProperties() EL_QUICKSAND_FILLING, EL_QUICKSAND_EMPTYING, EL_MAGIC_WALL, - EL_MAGIC_WALL_EMPTY, + EL_MAGIC_WALL_ACTIVE, EL_MAGIC_WALL_EMPTYING, EL_MAGIC_WALL_FILLING, EL_MAGIC_WALL_FULL, EL_MAGIC_WALL_DEAD, EL_BD_MAGIC_WALL, - EL_BD_MAGIC_WALL_EMPTY, + EL_BD_MAGIC_WALL_ACTIVE, EL_BD_MAGIC_WALL_EMPTYING, EL_BD_MAGIC_WALL_FULL, EL_BD_MAGIC_WALL_FILLING, @@ -1179,6 +1289,9 @@ void InitElementProperties() EL_SP_EXIT_CLOSED, EL_SP_EXIT_OPEN, EL_INVISIBLE_STEELWALL, + EL_INVISIBLE_STEELWALL_ACTIVE, + EL_INVISIBLE_WALL, + EL_INVISIBLE_WALL_ACTIVE, EL_CONVEYOR_BELT1_SWITCH_LEFT, EL_CONVEYOR_BELT1_SWITCH_MIDDLE, EL_CONVEYOR_BELT1_SWITCH_RIGHT, @@ -1284,6 +1397,7 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_INVISIBLE_STEELWALL, + EL_INVISIBLE_STEELWALL_ACTIVE, EL_CONVEYOR_BELT1_SWITCH_LEFT, EL_CONVEYOR_BELT1_SWITCH_MIDDLE, EL_CONVEYOR_BELT1_SWITCH_RIGHT, @@ -1457,6 +1571,9 @@ void InitElementProperties() EL_SP_EXIT_CLOSED, EL_SP_EXIT_OPEN, EL_INVISIBLE_STEELWALL, + EL_INVISIBLE_STEELWALL_ACTIVE, + EL_INVISIBLE_WALL, + EL_INVISIBLE_WALL_ACTIVE, EL_STEELWALL_SLANTED, EL_EMC_STEELWALL1, EL_EMC_STEELWALL2, @@ -1663,7 +1780,7 @@ void InitElementProperties() EL_EXIT_CLOSED, EL_EXIT_OPEN, EL_STEELWALL, - EL_PLAYER, + EL_PLAYER1, EL_BD_FIREFLY, EL_BD_FIREFLY_1, EL_BD_FIREFLY_2, @@ -1686,7 +1803,7 @@ void InitElementProperties() EL_SOKOBAN_OBJECT, EL_SOKOBAN_FIELD_EMPTY, EL_SOKOBAN_FIELD_FULL, - EL_PLAYER, + EL_PLAYER1, EL_INVISIBLE_STEELWALL }; static int ep_sb_element_num = SIZEOF_ARRAY_INT(ep_sb_element); @@ -1739,7 +1856,9 @@ void InitElementProperties() EL_EM_GATE3_GRAY, EL_EM_GATE4_GRAY, EL_DYNAMITE, + EL_INVISIBLE_STEELWALL, EL_INVISIBLE_WALL, + EL_INVISIBLE_SAND, EL_LAMP, EL_LAMP_ACTIVE, EL_WALL_EMERALD, @@ -1796,7 +1915,6 @@ void InitElementProperties() EL_SP_HARD_BASE4, EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, - EL_INVISIBLE_STEELWALL, EL_CONVEYOR_BELT1_SWITCH_LEFT, EL_CONVEYOR_BELT1_SWITCH_MIDDLE, EL_CONVEYOR_BELT1_SWITCH_RIGHT, @@ -1842,10 +1960,10 @@ void InitElementProperties() EL_BOMB, EL_DYNAMITE_ACTIVE, EL_DYNAMITE, - EL_DYNABOMB_ACTIVE_1, - EL_DYNABOMB_ACTIVE_2, - EL_DYNABOMB_ACTIVE_3, - EL_DYNABOMB_ACTIVE_4, + EL_DYNABOMB_PLAYER1_ACTIVE, + EL_DYNABOMB_PLAYER2_ACTIVE, + EL_DYNABOMB_PLAYER3_ACTIVE, + EL_DYNABOMB_PLAYER4_ACTIVE, EL_DYNABOMB_NR, EL_DYNABOMB_SZ, EL_DYNABOMB_XL, @@ -1898,7 +2016,6 @@ void InitElementProperties() static int ep_player[] = { - EL_PLAYER, EL_PLAYER1, EL_PLAYER2, EL_PLAYER3, @@ -1922,7 +2039,8 @@ void InitElementProperties() EL_SP_BASE, EL_SP_BUGGY_BASE, EL_TRAP, - EL_INVISIBLE_SAND + EL_INVISIBLE_SAND, + EL_INVISIBLE_SAND_ACTIVE }; static int ep_eatable_num = SIZEOF_ARRAY_INT(ep_eatable); @@ -2032,10 +2150,10 @@ void InitElementProperties() static int ep_active_bomb[] = { EL_DYNAMITE_ACTIVE, - EL_DYNABOMB_ACTIVE_1, - EL_DYNABOMB_ACTIVE_2, - EL_DYNABOMB_ACTIVE_3, - EL_DYNABOMB_ACTIVE_4 + EL_DYNABOMB_PLAYER1_ACTIVE, + EL_DYNABOMB_PLAYER2_ACTIVE, + EL_DYNABOMB_PLAYER3_ACTIVE, + EL_DYNABOMB_PLAYER4_ACTIVE }; static int ep_active_bomb_num = SIZEOF_ARRAY_INT(ep_active_bomb); @@ -2056,6 +2174,23 @@ void InitElementProperties() }; static int ep_belt_num = SIZEOF_ARRAY_INT(ep_belt); + static int ep_belt_active[] = + { + EL_CONVEYOR_BELT1_LEFT_ACTIVE, + EL_CONVEYOR_BELT1_MIDDLE_ACTIVE, + EL_CONVEYOR_BELT1_RIGHT_ACTIVE, + EL_CONVEYOR_BELT2_LEFT_ACTIVE, + EL_CONVEYOR_BELT2_MIDDLE_ACTIVE, + EL_CONVEYOR_BELT2_RIGHT_ACTIVE, + EL_CONVEYOR_BELT3_LEFT_ACTIVE, + EL_CONVEYOR_BELT3_MIDDLE_ACTIVE, + EL_CONVEYOR_BELT3_RIGHT_ACTIVE, + EL_CONVEYOR_BELT4_LEFT_ACTIVE, + EL_CONVEYOR_BELT4_MIDDLE_ACTIVE, + EL_CONVEYOR_BELT4_RIGHT_ACTIVE, + }; + static int ep_belt_active_num = SIZEOF_ARRAY_INT(ep_belt_active); + static int ep_belt_switch[] = { EL_CONVEYOR_BELT1_SWITCH_LEFT, @@ -2126,6 +2261,7 @@ void InitElementProperties() static long ep2_bit[] = { EP_BIT_BELT, + EP_BIT_BELT_ACTIVE, EP_BIT_BELT_SWITCH, EP_BIT_TUBE }; @@ -2166,6 +2302,7 @@ void InitElementProperties() static int *ep2_array[] = { ep_belt, + ep_belt_active, ep_belt_switch, ep_tube }; @@ -2206,6 +2343,7 @@ void InitElementProperties() static int *ep2_num[] = { &ep_belt_num, + &ep_belt_active_num, &ep_belt_switch_num, &ep_tube_num };