X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Finit.c;h=c591c0db5634dd3f660c7c404c2e9aac58cbc7a2;hb=8be31c2781126204470171aff7af45713ec42e9e;hp=09804ee18381b0a84750a64338267125b2aa6a5d;hpb=2fe139696892ee39f804b5c7315b8f0977ab01ec;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 09804ee1..c591c0db 100644 --- a/src/init.c +++ b/src/init.c @@ -14,6 +14,7 @@ #include #include "init.h" +#include "events.h" #include "misc.h" #include "sound.h" #include "screens.h" @@ -40,9 +41,12 @@ struct IconFileInfo char *picturemask_filename; }; +#ifndef USE_SDL_LIBRARY static int sound_process_id = 0; +#endif -static void InitLevelAndPlayerInfo(void); +static void InitPlayerInfo(void); +static void InitLevelInfo(void); static void InitNetworkServer(void); static void InitDisplay(void); static void InitSound(void); @@ -55,15 +59,23 @@ static void InitElementProperties(void); void OpenAll(int argc, char *argv[]) { +#if defined(MSDOS) || defined(WIN32) + initErrorFile(); +#endif + if (options.serveronly) { +#ifdef WIN32 + Error(ERR_WARN, "networking not supported in Windows version"); +#else NetworkServer(options.server_port, options.serveronly); +#endif /* never reached */ exit(0); } - InitLevelAndPlayerInfo(); + InitPlayerInfo(); InitCounter(); InitSound(); @@ -77,19 +89,23 @@ void OpenAll(int argc, char *argv[]) InitDisplay(); InitWindow(argc, argv); +#ifndef USE_SDL_LIBRARY XMapWindow(display, window); - XFlush(display); + FlushDisplay(); +#endif InitGfx(); - InitElementProperties(); - InitGadgets(); + InitElementProperties(); /* initializes IS_CHAR() for el2gfx() */ + + InitLevelInfo(); + InitGadgets(); /* needs to know number of level series */ DrawMainMenu(); InitNetworkServer(); } -void InitLevelAndPlayerInfo() +void InitPlayerInfo() { int i; @@ -104,21 +120,26 @@ void InitLevelAndPlayerInfo() local_player->connected = TRUE; - LoadLevelInfo(); /* global level info */ - LoadSetup(); /* global setup info */ - LoadLevelSetup(); /* info about last played level */ + LoadSetup(); /* global setup info */ +} + +void InitLevelInfo() +{ + LoadLevelInfo(); /* global level info */ + LoadLevelSetup_LastSeries(); /* last played series info */ + LoadLevelSetup_SeriesInfo(); /* last played level info */ } void InitNetworkServer() { -#ifndef MSDOS +#if !defined(MSDOS) && !defined(WIN32) int nr_wanted; #endif if (!options.network) return; -#ifndef MSDOS +#if !defined(MSDOS) && !defined(WIN32) nr_wanted = Request("Choose player", REQ_PLAYER | REQ_STAY_CLOSED); if (!ConnectToServer(options.server_host, options.server_port)) @@ -139,7 +160,32 @@ void InitSound() if (sound_status == SOUND_OFF) return; -#ifndef MSDOS +#ifdef USE_SDL_LIBRARY + /* initialize SDL audio */ + + if (SDL_Init(SDL_INIT_AUDIO) < 0) + { + Error(ERR_WARN, "SDL_Init() failed: %s", SDL_GetError()); + sound_status = SOUND_OFF; + return; + } + + if (Mix_OpenAudio(22050, AUDIO_S16, 2, 512) < 0) + { + Error(ERR_WARN, "Mix_OpenAudio() failed: %s", SDL_GetError()); + sound_status = SOUND_OFF; + return; + } + + Mix_Volume(-1, SDL_MIX_MAXVOLUME / 4); + Mix_VolumeMusic(SDL_MIX_MAXVOLUME / 4); + + sound_status = SOUND_AVAILABLE; + sound_loops_allowed = TRUE; + +#else /* !USE_SDL_LIBRARY */ + +#if !defined(MSDOS) && !defined(WIN32) if (access(sound_device_name, W_OK) != 0) { Error(ERR_WARN, "cannot access sound device - no sounds"); @@ -165,28 +211,32 @@ void InitSound() */ #endif -#else /* MSDOS */ +#else /* MSDOS || WIN32 */ sound_loops_allowed = TRUE; /* setup.sound_loops_on = TRUE; */ -#endif /* MSDOS */ +#endif /* MSDOS || WIN32 */ +#endif /* !USE_SDL_LIBRARY */ for(i=0; i= SDL_NumJoysticks()) + joystick_nr = -1; + + /* misuse joystick file descriptor variable to store joystick number */ + stored_player[i].joystick_fd = joystick_nr; + + /* this allows subsequent calls to 'InitJoysticks' for re-initialization */ + if (Check_SDL_JoystickOpened(joystick_nr)) + Close_SDL_Joystick(joystick_nr); + + if (!setup.input[i].use_joystick) + continue; + + if (!Open_SDL_Joystick(joystick_nr)) + { + Error(ERR_WARN, "cannot open joystick %d", joystick_nr); + continue; + } + + joystick_status = JOYSTICK_AVAILABLE; + } + +#else /* !USE_SDL_JOYSTICK */ + #ifndef MSDOS for (i=0; i=0; i++) + { + for(j=0; jformat, 0x00, 0x00, 0x00)); + if ((tile_masked[tile] = SDL_DisplayFormat(sdl_image_tmp)) == NULL) + Error(ERR_EXIT, "SDL_DisplayFormat() failed: %s", SDL_GetError()); + + SDL_FreeSurface(sdl_image_tmp); + + BlitBitmap(src_bitmap, tile_masked[tile], src_x,src_y, TILEX,TILEY, 0,0); + } + } + +#else /* !USE_SDL_LIBRARY */ + pix[PIX_DB_BACK] = XCreatePixmap(display, window, WIN_XSIZE,WIN_YSIZE, XDefaultDepth(display,screen)); @@ -646,7 +855,7 @@ void InitGfx() if (!pix[PIX_DB_BACK] || !pix[PIX_DB_DOOR]) Error(ERR_EXIT, "cannot create additional pixmaps"); - for(i=0; ipicture_filename) @@ -708,6 +922,26 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) debug_print_timestamp(1, NULL); /* initialize timestamp function */ #endif +#ifdef USE_SDL_LIBRARY + /* load image to temporary surface */ + if ((sdl_image_tmp = IMG_Load(filename)) == NULL) + Error(ERR_EXIT, "IMG_Load() failed: %s", SDL_GetError()); + + /* create native non-transparent surface for current image */ + if ((pix[pos] = SDL_DisplayFormat(sdl_image_tmp)) == NULL) + Error(ERR_EXIT, "SDL_DisplayFormat() failed: %s", SDL_GetError()); + + /* create native transparent surface for current image */ + SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY, + SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00)); + if ((pix_masked[pos] = SDL_DisplayFormat(sdl_image_tmp)) == NULL) + Error(ERR_EXIT, "SDL_DisplayFormat() failed: %s", SDL_GetError()); + + /* free temporary surface */ + SDL_FreeSurface(sdl_image_tmp); + +#else /* !USE_SDL_LIBRARY */ + #ifdef USE_XPM_LIBRARY xpm_att[pos].valuemask = XpmCloseness; @@ -764,8 +998,15 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) if (!pix[pos]) Error(ERR_EXIT, "cannot get graphics for '%s'", pic->picture_filename); + + /* setting pix_masked[] to pix[] allows BlitBitmapMasked() to always + use pix_masked[], although they are the same when not using SDL */ + pix_masked[pos] = pix[pos]; + +#endif /* !USE_SDL_LIBRARY */ } +#ifndef USE_SDL_LIBRARY /* zugehörige Maske laden (wenn vorhanden) */ if (pic->picture_with_mask) { @@ -807,6 +1048,7 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) if (!clipmask[pos]) Error(ERR_EXIT, "cannot get clipmask for '%s'", pic->picture_filename); } +#endif /* !USE_SDL_LIBRARY */ } void InitGadgets() @@ -815,6 +1057,7 @@ void InitGadgets() CreateGameButtons(); CreateTapeButtons(); CreateToolButtons(); + CreateScreenGadgets(); } void InitElementProperties() @@ -872,7 +1115,20 @@ void InitElementProperties() EL_EM_GATE_3X, EL_EM_GATE_4X, EL_SWITCHGATE_OPEN, - EL_SWITCHGATE_CLOSED + EL_SWITCHGATE_CLOSED, + EL_TIMEGATE_OPEN, + EL_TIMEGATE_CLOSED, + EL_TUBE_CROSS, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERT_LEFT, + EL_TUBE_VERT_RIGHT, + EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZ_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN }; static int ep_pforte_num = sizeof(ep_pforte)/sizeof(int); @@ -884,6 +1140,7 @@ void InitElementProperties() EL_MAUER_X, EL_MAUER_Y, EL_MAUER_XY, + EL_BD_WALL, EL_FELSBODEN, EL_AUSGANG_ZU, EL_AUSGANG_ACT, @@ -895,14 +1152,14 @@ void InitElementProperties() EL_AMOEBE_BD, EL_MORAST_VOLL, EL_MORAST_LEER, - EL_SIEB_INAKTIV, - EL_SIEB_LEER, - EL_SIEB_VOLL, - EL_SIEB_TOT, - EL_SIEB2_INAKTIV, - EL_SIEB2_LEER, - EL_SIEB2_VOLL, - EL_SIEB2_TOT, + EL_MAGIC_WALL_OFF, + EL_MAGIC_WALL_EMPTY, + EL_MAGIC_WALL_FULL, + EL_MAGIC_WALL_DEAD, + EL_MAGIC_WALL_BD_OFF, + EL_MAGIC_WALL_BD_EMPTY, + EL_MAGIC_WALL_BD_FULL, + EL_MAGIC_WALL_BD_DEAD, EL_LIFE, EL_LIFE_ASYNC, EL_BADEWANNE1, @@ -929,20 +1186,24 @@ void InitElementProperties() EL_SP_TERMINAL, EL_SP_EXIT, EL_INVISIBLE_STEEL, - EL_BELT1_SWITCH_L, - EL_BELT1_SWITCH_M, - EL_BELT1_SWITCH_R, - EL_BELT2_SWITCH_L, - EL_BELT2_SWITCH_M, - EL_BELT2_SWITCH_R, - EL_BELT3_SWITCH_L, - EL_BELT3_SWITCH_M, - EL_BELT3_SWITCH_R, - EL_BELT4_SWITCH_L, - EL_BELT4_SWITCH_M, - EL_BELT4_SWITCH_R, + EL_BELT1_SWITCH_LEFT, + EL_BELT1_SWITCH_MIDDLE, + EL_BELT1_SWITCH_RIGHT, + EL_BELT2_SWITCH_LEFT, + EL_BELT2_SWITCH_MIDDLE, + EL_BELT2_SWITCH_RIGHT, + EL_BELT3_SWITCH_LEFT, + EL_BELT3_SWITCH_MIDDLE, + EL_BELT3_SWITCH_RIGHT, + EL_BELT4_SWITCH_LEFT, + EL_BELT4_SWITCH_MIDDLE, + EL_BELT4_SWITCH_RIGHT, + EL_SWITCHGATE_SWITCH_1, + EL_SWITCHGATE_SWITCH_2, EL_LIGHT_SWITCH_OFF, EL_LIGHT_SWITCH_ON, + EL_TIMEGATE_SWITCH_OFF, + EL_TIMEGATE_SWITCH_ON, EL_SIGN_EXCLAMATION, EL_SIGN_RADIOACTIVITY, EL_SIGN_STOP, @@ -955,7 +1216,33 @@ void InitElementProperties() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEEL_SLANTED + EL_STEEL_SLANTED, + EL_EMC_STEEL_WALL_1, + EL_EMC_STEEL_WALL_2, + EL_EMC_STEEL_WALL_3, + EL_EMC_STEEL_WALL_4, + EL_EMC_WALL_1, + EL_EMC_WALL_2, + EL_EMC_WALL_3, + EL_EMC_WALL_4, + EL_EMC_WALL_5, + EL_EMC_WALL_6, + EL_EMC_WALL_7, + EL_EMC_WALL_8, + EL_CRYSTAL, + EL_WALL_PEARL, + EL_WALL_CRYSTAL, + EL_TUBE_CROSS, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERT_LEFT, + EL_TUBE_VERT_RIGHT, + EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZ_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN }; static int ep_solid_num = sizeof(ep_solid)/sizeof(int); @@ -986,6 +1273,8 @@ void InitElementProperties() EL_EM_GATE_4X, EL_SWITCHGATE_OPEN, EL_SWITCHGATE_CLOSED, + EL_TIMEGATE_OPEN, + EL_TIMEGATE_CLOSED, EL_SP_HARD_GRAY, EL_SP_HARD_GREEN, EL_SP_HARD_BLUE, @@ -998,18 +1287,18 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_INVISIBLE_STEEL, - EL_BELT1_SWITCH_L, - EL_BELT1_SWITCH_M, - EL_BELT1_SWITCH_R, - EL_BELT2_SWITCH_L, - EL_BELT2_SWITCH_M, - EL_BELT2_SWITCH_R, - EL_BELT3_SWITCH_L, - EL_BELT3_SWITCH_M, - EL_BELT3_SWITCH_R, - EL_BELT4_SWITCH_L, - EL_BELT4_SWITCH_M, - EL_BELT4_SWITCH_R, + EL_BELT1_SWITCH_LEFT, + EL_BELT1_SWITCH_MIDDLE, + EL_BELT1_SWITCH_RIGHT, + EL_BELT2_SWITCH_LEFT, + EL_BELT2_SWITCH_MIDDLE, + EL_BELT2_SWITCH_RIGHT, + EL_BELT3_SWITCH_LEFT, + EL_BELT3_SWITCH_MIDDLE, + EL_BELT3_SWITCH_RIGHT, + EL_BELT4_SWITCH_LEFT, + EL_BELT4_SWITCH_MIDDLE, + EL_BELT4_SWITCH_RIGHT, EL_LIGHT_SWITCH_OFF, EL_LIGHT_SWITCH_ON, EL_SIGN_EXCLAMATION, @@ -1024,14 +1313,32 @@ void InitElementProperties() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEEL_SLANTED + EL_STEEL_SLANTED, + EL_EMC_STEEL_WALL_1, + EL_EMC_STEEL_WALL_2, + EL_EMC_STEEL_WALL_3, + EL_EMC_STEEL_WALL_4, + EL_CRYSTAL, + EL_TUBE_CROSS, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERT_LEFT, + EL_TUBE_VERT_RIGHT, + EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZ_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN }; static int ep_massive_num = sizeof(ep_massive)/sizeof(int); static int ep_slippery[] = { EL_FELSBODEN, + EL_BD_WALL, EL_FELSBROCKEN, + EL_BD_ROCK, EL_EDELSTEIN, EL_EDELSTEIN_BD, EL_EDELSTEIN_GELB, @@ -1057,7 +1364,9 @@ void InitElementProperties() EL_SP_CHIP_UPPER, EL_SP_CHIP_LOWER, EL_SPEED_PILL, - EL_STEEL_SLANTED + EL_STEEL_SLANTED, + EL_PEARL, + EL_CRYSTAL }; static int ep_slippery_num = sizeof(ep_slippery)/sizeof(int); @@ -1105,6 +1414,7 @@ void InitElementProperties() EL_MAUER_Y, EL_MAUER_XY, EL_MAUERND, + EL_BD_WALL, EL_SP_CHIP_SINGLE, EL_SP_CHIP_LEFT, EL_SP_CHIP_RIGHT, @@ -1124,13 +1434,26 @@ void InitElementProperties() EL_SP_TERMINAL, EL_SP_EXIT, EL_INVISIBLE_STEEL, - EL_STEEL_SLANTED + EL_STEEL_SLANTED, + EL_EMC_STEEL_WALL_1, + EL_EMC_STEEL_WALL_2, + EL_EMC_STEEL_WALL_3, + EL_EMC_STEEL_WALL_4, + EL_EMC_WALL_1, + EL_EMC_WALL_2, + EL_EMC_WALL_3, + EL_EMC_WALL_4, + EL_EMC_WALL_5, + EL_EMC_WALL_6, + EL_EMC_WALL_7, + EL_EMC_WALL_8 }; static int ep_mauer_num = sizeof(ep_mauer)/sizeof(int); static int ep_can_fall[] = { EL_FELSBROCKEN, + EL_BD_ROCK, EL_EDELSTEIN, EL_EDELSTEIN_BD, EL_EDELSTEIN_GELB, @@ -1141,19 +1464,24 @@ void InitElementProperties() EL_KOKOSNUSS, EL_TROPFEN, EL_MORAST_VOLL, - EL_SIEB_VOLL, - EL_SIEB2_VOLL, + EL_MAGIC_WALL_FULL, + EL_MAGIC_WALL_BD_FULL, EL_ZEIT_VOLL, EL_ZEIT_LEER, EL_SP_ZONK, EL_SP_INFOTRON, - EL_SP_DISK_ORANGE + EL_SP_DISK_ORANGE, + EL_PEARL, + EL_CRYSTAL, + EL_SPRING, + EL_DX_SUPABOMB }; static int ep_can_fall_num = sizeof(ep_can_fall)/sizeof(int); static int ep_can_smash[] = { EL_FELSBROCKEN, + EL_BD_ROCK, EL_EDELSTEIN, EL_EDELSTEIN_BD, EL_EDELSTEIN_GELB, @@ -1175,13 +1503,18 @@ void InitElementProperties() EL_ZEIT_LEER, EL_SP_ZONK, EL_SP_INFOTRON, - EL_SP_DISK_ORANGE + EL_SP_DISK_ORANGE, + EL_PEARL, + EL_CRYSTAL, + EL_SPRING, + EL_DX_SUPABOMB }; static int ep_can_smash_num = sizeof(ep_can_smash)/sizeof(int); static int ep_can_change[] = { EL_FELSBROCKEN, + EL_BD_ROCK, EL_EDELSTEIN, EL_EDELSTEIN_BD, EL_EDELSTEIN_GELB, @@ -1201,38 +1534,40 @@ void InitElementProperties() EL_MAMPFER2, EL_ROBOT, EL_PACMAN, - EL_MAULWURF, + EL_MOLE, EL_PINGUIN, EL_SCHWEIN, EL_DRACHE, EL_SONDE, EL_SP_SNIKSNAK, - EL_SP_ELECTRON + EL_SP_ELECTRON, + EL_BALLOON, + EL_SPRING_MOVING }; static int ep_can_move_num = sizeof(ep_can_move)/sizeof(int); static int ep_could_move[] = { - EL_KAEFER_R, - EL_KAEFER_O, - EL_KAEFER_L, - EL_KAEFER_U, - EL_FLIEGER_R, - EL_FLIEGER_O, - EL_FLIEGER_L, - EL_FLIEGER_U, - EL_BUTTERFLY_R, - EL_BUTTERFLY_O, - EL_BUTTERFLY_L, - EL_BUTTERFLY_U, - EL_FIREFLY_R, - EL_FIREFLY_O, - EL_FIREFLY_L, - EL_FIREFLY_U, - EL_PACMAN_R, - EL_PACMAN_O, - EL_PACMAN_L, - EL_PACMAN_U + EL_KAEFER_RIGHT, + EL_KAEFER_UP, + EL_KAEFER_LEFT, + EL_KAEFER_DOWN, + EL_FLIEGER_RIGHT, + EL_FLIEGER_UP, + EL_FLIEGER_LEFT, + EL_FLIEGER_DOWN, + EL_BUTTERFLY_RIGHT, + EL_BUTTERFLY_UP, + EL_BUTTERFLY_LEFT, + EL_BUTTERFLY_DOWN, + EL_FIREFLY_RIGHT, + EL_FIREFLY_UP, + EL_FIREFLY_LEFT, + EL_FIREFLY_DOWN, + EL_PACMAN_RIGHT, + EL_PACMAN_UP, + EL_PACMAN_LEFT, + EL_PACMAN_DOWN }; static int ep_could_move_num = sizeof(ep_could_move)/sizeof(int); @@ -1260,6 +1595,7 @@ void InitElementProperties() EL_SP_SNIKSNAK, EL_SP_ELECTRON, EL_SP_BUG_ACTIVE, + EL_TRAP_ACTIVE, EL_LANDMINE }; static int ep_dont_go_to_num = sizeof(ep_dont_go_to)/sizeof(int); @@ -1285,7 +1621,9 @@ void InitElementProperties() EL_EDELSTEIN_GELB, EL_EDELSTEIN_ROT, EL_EDELSTEIN_LILA, - EL_DIAMANT + EL_DIAMANT, + EL_PEARL, + EL_CRYSTAL }; static int ep_mampf2_num = sizeof(ep_mampf2)/sizeof(int); @@ -1294,9 +1632,11 @@ void InitElementProperties() EL_LEERRAUM, EL_ERDREICH, EL_FELSBODEN, + EL_BD_WALL, EL_FELSBROCKEN, + EL_BD_ROCK, EL_EDELSTEIN_BD, - EL_SIEB2_INAKTIV, + EL_MAGIC_WALL_BD_OFF, EL_AUSGANG_ZU, EL_AUSGANG_AUF, EL_BETON, @@ -1345,6 +1685,7 @@ void InitElementProperties() EL_LEERRAUM, EL_ERDREICH, EL_MAUERWERK, + EL_BD_WALL, EL_FELSBODEN, EL_SCHLUESSEL, EL_BETON, @@ -1397,10 +1738,10 @@ void InitElementProperties() EL_BADEWANNE3, EL_BADEWANNE4, EL_BADEWANNE5, - EL_SIEB_INAKTIV, - EL_SIEB_TOT, - EL_SIEB2_INAKTIV, - EL_SIEB2_TOT, + EL_MAGIC_WALL_OFF, + EL_MAGIC_WALL_DEAD, + EL_MAGIC_WALL_BD_OFF, + EL_MAGIC_WALL_BD_DEAD, EL_AMOEBA2DIAM, EL_BLOCKED, EL_SP_EMPTY, @@ -1436,18 +1777,18 @@ void InitElementProperties() EL_SP_HARD_BASE6, EL_SP_EXIT, EL_INVISIBLE_STEEL, - EL_BELT1_SWITCH_L, - EL_BELT1_SWITCH_M, - EL_BELT1_SWITCH_R, - EL_BELT2_SWITCH_L, - EL_BELT2_SWITCH_M, - EL_BELT2_SWITCH_R, - EL_BELT3_SWITCH_L, - EL_BELT3_SWITCH_M, - EL_BELT3_SWITCH_R, - EL_BELT4_SWITCH_L, - EL_BELT4_SWITCH_M, - EL_BELT4_SWITCH_R, + EL_BELT1_SWITCH_LEFT, + EL_BELT1_SWITCH_MIDDLE, + EL_BELT1_SWITCH_RIGHT, + EL_BELT2_SWITCH_LEFT, + EL_BELT2_SWITCH_MIDDLE, + EL_BELT2_SWITCH_RIGHT, + EL_BELT3_SWITCH_LEFT, + EL_BELT3_SWITCH_MIDDLE, + EL_BELT3_SWITCH_RIGHT, + EL_BELT4_SWITCH_LEFT, + EL_BELT4_SWITCH_MIDDLE, + EL_BELT4_SWITCH_RIGHT, EL_SIGN_EXCLAMATION, EL_SIGN_RADIOACTIVITY, EL_SIGN_STOP, @@ -1460,7 +1801,19 @@ void InitElementProperties() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEEL_SLANTED + EL_STEEL_SLANTED, + EL_EMC_STEEL_WALL_1, + EL_EMC_STEEL_WALL_2, + EL_EMC_STEEL_WALL_3, + EL_EMC_STEEL_WALL_4, + EL_EMC_WALL_1, + EL_EMC_WALL_2, + EL_EMC_WALL_3, + EL_EMC_WALL_4, + EL_EMC_WALL_5, + EL_EMC_WALL_6, + EL_EMC_WALL_7, + EL_EMC_WALL_8 }; static int ep_inactive_num = sizeof(ep_inactive)/sizeof(int); @@ -1477,7 +1830,7 @@ void InitElementProperties() EL_DYNABOMB_SZ, EL_DYNABOMB_XL, EL_KAEFER, - EL_MAULWURF, + EL_MOLE, EL_PINGUIN, EL_SCHWEIN, EL_DRACHE, @@ -1486,7 +1839,8 @@ void InitElementProperties() EL_SP_DISK_ORANGE, EL_SP_DISK_YELLOW, EL_SP_SNIKSNAK, - EL_SP_ELECTRON + EL_SP_ELECTRON, + EL_DX_SUPABOMB }; static int ep_explosive_num = sizeof(ep_explosive)/sizeof(int); @@ -1497,13 +1851,16 @@ void InitElementProperties() EL_EDELSTEIN_GELB, EL_EDELSTEIN_ROT, EL_EDELSTEIN_LILA, - EL_DIAMANT + EL_DIAMANT, + EL_PEARL, + EL_CRYSTAL }; static int ep_mampf3_num = sizeof(ep_mampf3)/sizeof(int); static int ep_pushable[] = { EL_FELSBROCKEN, + EL_BD_ROCK, EL_BOMBE, EL_KOKOSNUSS, EL_ZEIT_LEER, @@ -1512,7 +1869,10 @@ void InitElementProperties() EL_SONDE, EL_SP_ZONK, EL_SP_DISK_ORANGE, - EL_SP_DISK_YELLOW + EL_SP_DISK_YELLOW, + EL_BALLOON, + EL_SPRING, + EL_DX_SUPABOMB }; static int ep_pushable_num = sizeof(ep_pushable)/sizeof(int); @@ -1541,6 +1901,7 @@ void InitElementProperties() EL_ERDREICH, EL_SP_BASE, EL_SP_BUG, + EL_TRAP_INACTIVE, EL_SAND_INVISIBLE }; static int ep_eatable_num = sizeof(ep_eatable)/sizeof(int); @@ -1588,7 +1949,9 @@ void InitElementProperties() EL_SP_CHIP_UPPER, EL_SP_CHIP_LOWER, /* additional elements that appeared in newer Supaplex levels */ - EL_UNSICHTBAR + EL_UNSICHTBAR, + /* more than one murphy in a level results in an inactive clone */ + EL_SP_MURPHY_CLONE }; static int ep_sp_element_num = sizeof(ep_sp_element)/sizeof(int); @@ -1613,7 +1976,8 @@ void InitElementProperties() EL_SP_PORT_X, EL_SP_PORT_Y, EL_SP_PORT_XY, - EL_SWITCHGATE_OPEN + EL_SWITCHGATE_OPEN, + EL_TIMEGATE_OPEN }; static int ep_quick_gate_num = sizeof(ep_quick_gate)/sizeof(int); @@ -1629,7 +1993,18 @@ void InitElementProperties() EL_SP_PORT2_DOWN, EL_SP_PORT_X, EL_SP_PORT_Y, - EL_SP_PORT_XY + EL_SP_PORT_XY, + EL_TUBE_CROSS, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERT_LEFT, + EL_TUBE_VERT_RIGHT, + EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZ_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN }; static int ep_over_player_num = sizeof(ep_over_player)/sizeof(int); @@ -1662,21 +2037,37 @@ void InitElementProperties() static int ep_belt_switch[] = { - EL_BELT1_SWITCH_L, - EL_BELT1_SWITCH_M, - EL_BELT1_SWITCH_R, - EL_BELT2_SWITCH_L, - EL_BELT2_SWITCH_M, - EL_BELT2_SWITCH_R, - EL_BELT3_SWITCH_L, - EL_BELT3_SWITCH_M, - EL_BELT3_SWITCH_R, - EL_BELT4_SWITCH_L, - EL_BELT4_SWITCH_M, - EL_BELT4_SWITCH_R, + EL_BELT1_SWITCH_LEFT, + EL_BELT1_SWITCH_MIDDLE, + EL_BELT1_SWITCH_RIGHT, + EL_BELT2_SWITCH_LEFT, + EL_BELT2_SWITCH_MIDDLE, + EL_BELT2_SWITCH_RIGHT, + EL_BELT3_SWITCH_LEFT, + EL_BELT3_SWITCH_MIDDLE, + EL_BELT3_SWITCH_RIGHT, + EL_BELT4_SWITCH_LEFT, + EL_BELT4_SWITCH_MIDDLE, + EL_BELT4_SWITCH_RIGHT, }; static int ep_belt_switch_num = sizeof(ep_belt_switch)/sizeof(int); + static int ep_tube[] = + { + EL_TUBE_CROSS, + EL_TUBE_VERTICAL, + EL_TUBE_HORIZONTAL, + EL_TUBE_VERT_LEFT, + EL_TUBE_VERT_RIGHT, + EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZ_DOWN, + EL_TUBE_LEFT_UP, + EL_TUBE_LEFT_DOWN, + EL_TUBE_RIGHT_UP, + EL_TUBE_RIGHT_DOWN + }; + static int ep_tube_num = sizeof(ep_tube)/sizeof(int); + static long ep1_bit[] = { EP_BIT_AMOEBALIVE, @@ -1714,7 +2105,8 @@ void InitElementProperties() static long ep2_bit[] = { EP_BIT_BELT, - EP_BIT_BELT_SWITCH + EP_BIT_BELT_SWITCH, + EP_BIT_TUBE }; static int *ep1_array[] = { @@ -1753,7 +2145,8 @@ void InitElementProperties() static int *ep2_array[] = { ep_belt, - ep_belt_switch + ep_belt_switch, + ep_tube }; static int *ep1_num[] = { @@ -1792,7 +2185,8 @@ void InitElementProperties() static int *ep2_num[] = { &ep_belt_num, - &ep_belt_switch_num + &ep_belt_switch_num, + &ep_tube_num }; static int num_properties1 = sizeof(ep1_num)/sizeof(int *); static int num_properties2 = sizeof(ep2_num)/sizeof(int *); @@ -1818,14 +2212,19 @@ void CloseAllAndExit(int exit_value) { int i; +#ifdef USE_SDL_LIBRARY + StopSounds(); + FreeSounds(NUM_SOUNDS); +#else if (sound_process_id) { StopSounds(); kill(sound_process_id, SIGTERM); FreeSounds(NUM_SOUNDS); } +#endif - for(i=0; i