X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=4b871020796012f2e968bc92d2320d76c497826f;hb=9cfd3853252303df85d4fb925993448788d03483;hp=37c0a1fefc624d78356d5d39a6a53a7cfb9ff34e;hpb=40a487dcc5d3028343ff9123a72b8b3839a42861;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 37c0a1fe..4b871020 100644 --- a/src/init.c +++ b/src/init.c @@ -17,19 +17,15 @@ #include "misc.h" #include "sound.h" #include "screens.h" +#include "editor.h" #include "tools.h" #include "files.h" #include "joystick.h" #include "image.h" +#include "pcx.h" #include "network.h" #include "netserv.h" -#ifdef DEBUG - -#define DEBUG_TIMING - -#endif - struct PictureFileInfo { char *picture_filename; @@ -71,6 +67,7 @@ void OpenAll(int argc, char *argv[]) InitSoundServer(); InitJoysticks(); InitRND(NEW_RANDOMIZE); + InitLevelEditorGadgets(); signal(SIGINT, CloseAllAndExit); signal(SIGTERM, CloseAllAndExit); @@ -104,30 +101,32 @@ void InitLevelAndPlayerInfo() local_player->connected = TRUE; - if (!LoadLevelInfo()) /* global level info */ - Error(ERR_EXIT, NULL); - + LoadLevelInfo(); /* global level info */ LoadSetup(); /* global setup info */ LoadLevelSetup(); /* info about last played level */ } void InitNetworkServer() { +#ifndef MSDOS int nr_wanted; +#endif if (!options.network) return; +#ifndef MSDOS nr_wanted = Request("Choose player", REQ_PLAYER | REQ_STAY_CLOSED); if (!ConnectToServer(options.server_host, options.server_port)) - Error(ERR_EXIT, "cannot connect to multiplayer server"); + Error(ERR_EXIT, "cannot connect to network game server"); - SendToServer_Nickname(setup.alias_name); + SendToServer_PlayerName(setup.player_name); SendToServer_ProtocolVersion(); if (nr_wanted) SendToServer_NrWanted(nr_wanted); +#endif } void InitSound() @@ -163,20 +162,21 @@ void InitSound() */ #endif -#else +#else /* MSDOS */ sound_loops_allowed = TRUE; /* setup.sound_loops_on = TRUE; */ -#endif +#endif /* MSDOS */ for(i=0; i= num_joysticks) + joystick_nr = -1; + + /* misuse joystick file descriptor variable to store joystick number */ + stored_player[i].joystick_fd = joystick_nr; + } #endif } void InitDisplay() { +#ifndef MSDOS XVisualInfo vinfo_template, *vinfo; int num_visuals; +#endif unsigned int depth; /* connect to X server */ @@ -279,6 +306,7 @@ void InitDisplay() depth = DefaultDepth(display, screen); cmap = DefaultColormap(display, screen); +#ifndef MSDOS /* look for good enough visual */ vinfo_template.screen = screen; vinfo_template.class = (depth == 8 ? PseudoColor : TrueColor); @@ -303,29 +331,33 @@ void InitDisplay() printf("Sorry, cannot get appropriate visual.\n"); exit(-1); } +#endif } void InitWindow(int argc, char *argv[]) { unsigned int border_width = 4; + XGCValues gc_values; + unsigned long gc_valuemask; +#ifndef MSDOS + XTextProperty windowName, iconName; Pixmap icon_pixmap, iconmask_pixmap; - unsigned int icon_width,icon_height; - int icon_hot_x,icon_hot_y; + unsigned int icon_width, icon_height; + int icon_hot_x, icon_hot_y; char icon_filename[256]; XSizeHints size_hints; XWMHints wm_hints; XClassHint class_hints; - XTextProperty windowName, iconName; - XGCValues gc_values; - unsigned long gc_valuemask; char *window_name = WINDOWTITLE_STRING; char *icon_name = WINDOWTITLE_STRING; long window_event_mask; Atom proto_atom = None, delete_atom = None; +#endif int screen_width, screen_height; int win_xpos = WIN_XPOS, win_ypos = WIN_YPOS; unsigned long pen_fg = WhitePixel(display,screen); unsigned long pen_bg = BlackPixel(display,screen); + const int width = WIN_XSIZE, height = WIN_YSIZE; #ifndef MSDOS static struct IconFileInfo icon_pic = @@ -338,9 +370,6 @@ void InitWindow(int argc, char *argv[]) screen_width = XDisplayWidth(display, screen); screen_height = XDisplayHeight(display, screen); - width = WIN_XSIZE; - height = WIN_YSIZE; - win_xpos = (screen_width - width) / 2; win_ypos = (screen_height - height) / 2; @@ -446,6 +475,7 @@ void InitGfx() { "Door", TRUE }, { "Heroes", TRUE }, { "Toons", TRUE }, + { "More", TRUE }, { "Font", FALSE }, { "Font2", FALSE } }; @@ -456,6 +486,7 @@ void InitGfx() { "RocksDoor", TRUE }, { "RocksHeroes", TRUE }, { "RocksToons", TRUE }, + { "RocksMore", TRUE }, { "RocksFont", FALSE }, { "RocksFont2", FALSE } }; @@ -502,9 +533,8 @@ void InitGfx() { -1, 0 } }; -#ifdef DEBUG_TIMING - long count1, count2; - count1 = Counter(); +#if DEBUG_TIMING + debug_print_timestamp(0, NULL); /* initialize timestamp function */ #endif LoadGfx(PIX_SMALLFONT,&pic[PIX_SMALLFONT]); @@ -513,19 +543,17 @@ void InitGfx() #ifdef MSDOS DrawInitText("MSDOS version done by Guido Schulz",210,FC_BLUE); rest(200); -#endif MSDOS +#endif /* MSDOS */ DrawInitText("Loading graphics:",120,FC_GREEN); for(i=0; ipicture_filename) { @@ -658,19 +682,18 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) #ifdef MSDOS rest(100); -#endif MSDOS +#endif /* MSDOS */ -#ifdef DEBUG_TIMING - count1 = Counter(); +#if DEBUG_TIMING + debug_print_timestamp(1, NULL); /* initialize timestamp function */ #endif -#ifdef XPM_INCLUDE_FILE +#ifdef USE_XPM_LIBRARY xpm_att[pos].valuemask = XpmCloseness; xpm_att[pos].closeness = 20000; xpm_err = XpmReadFileToPixmap(display,window,filename, &pix[pos],&shapemask,&xpm_att[pos]); - switch(xpm_err) { case XpmOpenFailed: @@ -685,17 +708,15 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) break; } -#ifdef DEBUG_TIMING - count2 = Counter(); - printf("XPM LOADING %s IN %.2f SECONDS\n", - filename,(float)(count2-count1)/1000.0); +#if DEBUG_TIMING + printf("LOADING XPM FILE %s:", filename); + debug_print_timestamp(1, ""); #endif -#else - - pcx_err = Read_PCX_to_Pixmaps(display, window, gc, filename, - &pix[pos], &clipmask[pos]); +#else /* !USE_XPM_LIBRARY */ + pcx_err = Read_PCX_to_Pixmap(display, window, gc, filename, + &pix[pos], &clipmask[pos]); switch(pcx_err) { case PCX_Success: @@ -714,13 +735,12 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) break; } -#ifdef DEBUG_TIMING - count2 = Counter(); - printf("PCX LOADING %s IN %.2f SECONDS\n", - filename,(float)(count2-count1)/1000.0); +#if DEBUG_TIMING + printf("SUMMARY LOADING PCX FILE %s:", filename); + debug_print_timestamp(1, ""); #endif -#endif +#endif /* !USE_XPM_LIBRARY */ if (!pix[pos]) Error(ERR_EXIT, "cannot get graphics for '%s'", pic->picture_filename); @@ -729,21 +749,19 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) /* zugehörige Maske laden (wenn vorhanden) */ if (pic->picture_with_mask) { - -#ifdef XPM_INCLUDE_FILE +#ifdef USE_XPM_LIBRARY sprintf(basefilename, "%s%s", pic->picture_filename, picturemask_ext); DrawInitText(basefilename, 150, FC_YELLOW); sprintf(filename, "%s/%s/%s", options.base_directory, GRAPHICS_DIRECTORY, basefilename); -#ifdef DEBUG_TIMING - count1 = Counter(); +#if DEBUG_TIMING + debug_print_timestamp(1, NULL); /* initialize timestamp function */ #endif xbm_err = XReadBitmapFile(display,window,filename, &width,&height,&clipmask[pos],&hot_x,&hot_y); - switch(xbm_err) { case BitmapSuccess: @@ -759,13 +777,12 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) break; } -#ifdef DEBUG_TIMING - count2 = Counter(); - printf("XBM LOADING %s IN %.2f SECONDS\n", - filename,(float)(count2-count1)/1000.0); +#if DEBUG_TIMING + printf("LOADING XBM FILE %s:", filename); + debug_print_timestamp(1, ""); #endif -#endif +#endif /* USE_XPM_LIBRARY */ if (!clipmask[pos]) Error(ERR_EXIT, "cannot get clipmask for '%s'", pic->picture_filename); @@ -848,7 +865,25 @@ void InitElementProperties() EL_BADEWANNE2, EL_BADEWANNE3, EL_BADEWANNE4, - EL_BADEWANNE5 + EL_BADEWANNE5, + EL_SP_CHIP_SINGLE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, + EL_SP_HARD_GRAY, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE1, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, + EL_SP_TERMINAL, + EL_SP_EXIT }; static int ep_solid_num = sizeof(ep_solid)/sizeof(int); @@ -868,7 +903,18 @@ void InitElementProperties() EL_PFORTE1X, EL_PFORTE2X, EL_PFORTE3X, - EL_PFORTE4X + EL_PFORTE4X, + EL_SP_HARD_GRAY, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE1, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, }; static int ep_massiv_num = sizeof(ep_massiv)/sizeof(int); @@ -892,7 +938,13 @@ void InitElementProperties() EL_BIRNE_AUS, EL_BADEWANNE1, EL_BADEWANNE2, - EL_SONDE + EL_SONDE, + EL_SP_ZONK, + EL_SP_CHIP_SINGLE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, }; static int ep_slippery_num = sizeof(ep_slippery)/sizeof(int); @@ -905,7 +957,9 @@ void InitElementProperties() EL_MAMPFER, EL_MAMPFER2, EL_ROBOT, - EL_PACMAN + EL_PACMAN, + EL_SP_SNIKSNAK, + EL_SP_ELECTRON }; static int ep_enemy_num = sizeof(ep_enemy)/sizeof(int); @@ -929,7 +983,25 @@ void InitElementProperties() EL_MAUER_X, EL_MAUER_Y, EL_MAUER_XY, - EL_MAUERND + EL_MAUERND, + EL_SP_CHIP_SINGLE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, + EL_SP_HARD_GRAY, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE1, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, + EL_SP_TERMINAL, + EL_SP_EXIT }; static int ep_mauer_num = sizeof(ep_mauer)/sizeof(int); @@ -949,7 +1021,10 @@ void InitElementProperties() EL_SIEB_VOLL, EL_SIEB2_VOLL, EL_ZEIT_VOLL, - EL_ZEIT_LEER + EL_ZEIT_LEER, + EL_SP_ZONK, + EL_SP_INFOTRON, + EL_SP_DISK_ORANGE }; static int ep_can_fall_num = sizeof(ep_can_fall)/sizeof(int); @@ -970,7 +1045,10 @@ void InitElementProperties() EL_KOKOSNUSS, EL_TROPFEN, EL_ZEIT_VOLL, - EL_ZEIT_LEER + EL_ZEIT_LEER, + EL_SP_ZONK, + EL_SP_INFOTRON, + EL_SP_DISK_ORANGE }; static int ep_can_smash_num = sizeof(ep_can_smash)/sizeof(int); @@ -1000,7 +1078,9 @@ void InitElementProperties() EL_PINGUIN, EL_SCHWEIN, EL_DRACHE, - EL_SONDE + EL_SONDE, + EL_SP_SNIKSNAK, + EL_SP_ELECTRON }; static int ep_can_move_num = sizeof(ep_can_move)/sizeof(int); @@ -1049,7 +1129,10 @@ void InitElementProperties() EL_ROBOT, EL_PACMAN, EL_TROPFEN, - EL_SALZSAEURE + EL_SALZSAEURE, + EL_SP_SNIKSNAK, + EL_SP_ELECTRON, + EL_SP_BUG }; static int ep_dont_go_to_num = sizeof(ep_dont_go_to)/sizeof(int); @@ -1123,7 +1206,8 @@ void InitElementProperties() EL_EDELSTEIN_GELB, EL_EDELSTEIN_ROT, EL_EDELSTEIN_LILA, - EL_DIAMANT + EL_DIAMANT, + EL_SP_INFOTRON }; static int ep_gem_num = sizeof(ep_gem)/sizeof(int); @@ -1175,7 +1259,41 @@ void InitElementProperties() EL_SIEB_TOT, EL_SIEB2_TOT, EL_AMOEBA2DIAM, - EL_BLOCKED + EL_BLOCKED, + EL_SP_EMPTY, + EL_SP_BASE, + EL_SP_PORT1_RIGHT, + EL_SP_PORT1_DOWN, + EL_SP_PORT1_LEFT, + EL_SP_PORT1_UP, + EL_SP_PORT2_RIGHT, + EL_SP_PORT2_DOWN, + EL_SP_PORT2_LEFT, + EL_SP_PORT2_UP, + EL_SP_PORT_X, + EL_SP_PORT_Y, + EL_SP_PORT_XY, + EL_SP_DISK_RED, + EL_SP_DISK_YELLOW, + EL_SP_TERMINAL, + EL_SP_CHIP_SINGLE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, + EL_SP_HARD_GRAY, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE1, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, + EL_SP_TERMINAL, + EL_SP_EXIT }; static int ep_inactive_num = sizeof(ep_inactive)/sizeof(int); @@ -1193,7 +1311,12 @@ void InitElementProperties() EL_PINGUIN, EL_SCHWEIN, EL_DRACHE, - EL_SONDE + EL_SONDE, + EL_SP_DISK_RED, + EL_SP_DISK_ORANGE, + EL_SP_DISK_YELLOW, + EL_SP_SNIKSNAK, + EL_SP_ELECTRON }; static int ep_explosive_num = sizeof(ep_explosive)/sizeof(int); @@ -1216,7 +1339,10 @@ void InitElementProperties() EL_ZEIT_LEER, EL_SOKOBAN_FELD_VOLL, EL_SOKOBAN_OBJEKT, - EL_SONDE + EL_SONDE, + EL_SP_ZONK, + EL_SP_DISK_ORANGE, + EL_SP_DISK_YELLOW }; static int ep_pushable_num = sizeof(ep_pushable)/sizeof(int); @@ -1230,6 +1356,16 @@ void InitElementProperties() }; static int ep_player_num = sizeof(ep_player)/sizeof(int); + static int ep_has_content[] = + { + EL_MAMPFER, + EL_AMOEBE_NASS, + EL_AMOEBE_NORM, + EL_AMOEBE_VOLL, + EL_AMOEBE_BD + }; + static int ep_has_content_num = sizeof(ep_has_content)/sizeof(int); + static long ep_bit[] = { EP_BIT_AMOEBALIVE, @@ -1256,7 +1392,8 @@ void InitElementProperties() EP_BIT_EXPLOSIVE, EP_BIT_MAMPF3, EP_BIT_PUSHABLE, - EP_BIT_PLAYER + EP_BIT_PLAYER, + EP_BIT_HAS_CONTENT }; static int *ep_array[] = { @@ -1284,7 +1421,8 @@ void InitElementProperties() ep_explosive, ep_mampf3, ep_pushable, - ep_player + ep_player, + ep_has_content }; static int *ep_num[] = { @@ -1312,7 +1450,8 @@ void InitElementProperties() &ep_explosive_num, &ep_mampf3_num, &ep_pushable_num, - &ep_player_num + &ep_player_num, + &ep_has_content_num }; static int num_properties = sizeof(ep_num)/sizeof(int *); @@ -1341,8 +1480,8 @@ void CloseAllAndExit(int exit_value) { if (pix[i]) { -#ifdef XPM_INCLUDE_FILE - if (i