#include "netserv.h"
#ifdef DEBUG
-/*
+
#define DEBUG_TIMING
-*/
+
#endif
struct PictureFileInfo
InitCounter();
InitSound();
InitSoundServer();
- InitJoystick();
+ InitJoysticks();
InitRND(NEW_RANDOMIZE);
signal(SIGINT, CloseAllAndExit);
{
int i;
- /* initialize local setup */
- setup.sound_on = TRUE;
- setup.sound_loops_on = FALSE;
- setup.sound_music_on = FALSE;
- setup.sound_simple_on = FALSE;
- setup.toons_on = TRUE;
- setup.direct_draw_on = FALSE;
- setup.scroll_delay_on = FALSE;
- setup.soft_scrolling_on = TRUE;
- setup.fading_on = FALSE;
- setup.autorecord_on = FALSE;
- setup.quick_doors = FALSE;
- for (i=0; i<MAX_PLAYERS; i++)
- {
- setup.input[i].use_joystick = FALSE;
- setup.input[i].joystick_nr = 0;
- setup.input[i].joy.snap = (i == 0 ? JOY_BUTTON_1 : 0);
- setup.input[i].joy.bomb = (i == 0 ? JOY_BUTTON_2 : 0);
- setup.input[i].key.left = (i == 0 ? DEFAULT_KEY_LEFT : KEY_UNDEFINDED);
- setup.input[i].key.right = (i == 0 ? DEFAULT_KEY_RIGHT : KEY_UNDEFINDED);
- setup.input[i].key.up = (i == 0 ? DEFAULT_KEY_UP : KEY_UNDEFINDED);
- setup.input[i].key.down = (i == 0 ? DEFAULT_KEY_DOWN : KEY_UNDEFINDED);
- setup.input[i].key.snap = (i == 0 ? DEFAULT_KEY_SNAP : KEY_UNDEFINDED);
- setup.input[i].key.bomb = (i == 0 ? DEFAULT_KEY_BOMB : KEY_UNDEFINDED);
- }
-
/* choose default local player */
local_player = &stored_player[0];
- if (!LoadLevelInfo()) /* global level info */
- Error(ERR_EXIT, NULL);
-
- LoadPlayerInfo(PLAYER_SETUP); /* global setup info */
- LoadPlayerInfo(PLAYER_LEVEL); /* level specific info */
-
- /* after LoadPlayerInfo(), because it overwrites 'local_player' */
for (i=0; i<MAX_PLAYERS; i++)
{
+ stored_player[i].joystick_fd = -1; /* joystick device closed */
stored_player[i].connected = FALSE;
- stored_player[i].local = FALSE;
}
+
local_player->connected = TRUE;
- local_player->local = TRUE;
+
+ if (!LoadLevelInfo()) /* global level info */
+ Error(ERR_EXIT, NULL);
+
+ LoadSetup(); /* global setup info */
+ LoadLevelSetup(); /* info about last played level */
}
void InitNetworkServer()
if (!ConnectToServer(options.server_host, options.server_port))
Error(ERR_EXIT, "cannot connect to multiplayer server");
- SendToServer_Nickname(local_player->alias_name);
+ SendToServer_Nickname(setup.alias_name);
SendToServer_ProtocolVersion();
if (nr_wanted)
return;
#ifndef MSDOS
- if (access(sound_device_name,W_OK)<0)
+ if (access(sound_device_name, W_OK) != 0)
{
- Error(ERR_RETURN, "cannot access sound device - no sounds");
+ Error(ERR_WARN, "cannot access sound device - no sounds");
sound_status = SOUND_OFF;
return;
}
if ((sound_device = open(sound_device_name,O_WRONLY))<0)
{
- Error(ERR_RETURN, "cannot open sound device - no sounds");
+ Error(ERR_WARN, "cannot open sound device - no sounds");
sound_status = SOUND_OFF;
return;
}
#ifdef VOXWARE
sound_loops_allowed = TRUE;
+
+ /*
setup.sound_loops_on = TRUE;
+ */
+
#endif
#else
sound_loops_allowed = TRUE;
+
+ /*
setup.sound_loops_on = TRUE;
+ */
+
#endif
for(i=0; i<NUM_SOUNDS; i++)
#ifndef MSDOS
if (pipe(sound_pipe)<0)
{
- Error(ERR_RETURN, "cannot create pipe - no sounds");
+ Error(ERR_WARN, "cannot create pipe - no sounds");
sound_status = SOUND_OFF;
return;
}
if ((sound_process_id = fork()) < 0)
{
- Error(ERR_RETURN, "cannot create sound server process - no sounds");
+ Error(ERR_WARN, "cannot create sound server process - no sounds");
sound_status = SOUND_OFF;
return;
}
#endif
}
-void InitJoystick()
+void InitJoysticks()
{
- int joystick_nr = setup.input[0].joystick_nr;
+ int i;
if (global_joystick_status == JOYSTICK_OFF)
return;
+ joystick_status = JOYSTICK_OFF;
+
#ifndef MSDOS
- if (access(joystick_device_name[joystick_nr], R_OK) < 0)
+ for (i=0; i<MAX_PLAYERS; i++)
{
- Error(ERR_RETURN, "cannot access joystick device '%s'",
- joystick_device_name[joystick_nr]);
- joystick_status = JOYSTICK_OFF;
- return;
- }
+ char *device_name = setup.input[i].joy.device_name;
- if ((joystick_device =
- open(joystick_device_name[joystick_nr], O_RDONLY)) < 0)
- {
- Error(ERR_RETURN, "cannot open joystick device '%s'",
- joystick_device_name[joystick_nr]);
- joystick_status = JOYSTICK_OFF;
- return;
- }
+ /* this allows subsequent calls to 'InitJoysticks' for re-initialization */
+ if (stored_player[i].joystick_fd != -1)
+ {
+ close(stored_player[i].joystick_fd);
+ stored_player[i].joystick_fd = -1;
+ }
- joystick_status = JOYSTICK_AVAILABLE;
- LoadJoystickData();
+ if (!setup.input[i].use_joystick)
+ continue;
+
+ if (access(device_name, R_OK) != 0)
+ {
+ Error(ERR_WARN, "cannot access joystick device '%s'", device_name);
+ continue;
+ }
+
+ if ((stored_player[i].joystick_fd = open(device_name, O_RDONLY)) < 0)
+ {
+ Error(ERR_WARN, "cannot open joystick device '%s'", device_name);
+ continue;
+ }
+
+ joystick_status = JOYSTICK_AVAILABLE;
+ }
#else
joystick_status = JOYSTICK_AVAILABLE;
#endif
XChangeProperty(display, window, proto_atom, XA_ATOM, 32,
PropModePrepend, (unsigned char *) &delete_atom, 1);
- sprintf(icon_filename,"%s/%s",GFX_PATH,icon_pic.picture_filename);
+ sprintf(icon_filename, "%s/%s/%s",
+ options.base_directory, GRAPHICS_DIRECTORY,
+ icon_pic.picture_filename);
XReadBitmapFile(display,window,icon_filename,
&icon_width,&icon_height,
&icon_pixmap,&icon_hot_x,&icon_hot_y);
if (!icon_pixmap)
Error(ERR_EXIT, "cannot read icon bitmap file '%s'", icon_filename);
- sprintf(icon_filename,"%s/%s",GFX_PATH,icon_pic.picturemask_filename);
+ sprintf(icon_filename, "%s/%s/%s",
+ options.base_directory, GRAPHICS_DIRECTORY,
+ icon_pic.picturemask_filename);
XReadBitmapFile(display,window,icon_filename,
&icon_width,&icon_height,
&iconmask_pixmap,&icon_hot_x,&icon_hot_y);
char *picturemask_ext = "Mask.xbm";
#else
int gif_err;
- char *picture_ext = ".gif";
+ char *picture_ext = ".pcx";
#endif
#ifdef DEBUG_TIMING
/* Grafik laden */
if (pic->picture_filename)
{
- sprintf(basefilename,"%s%s",pic->picture_filename,picture_ext);
- DrawInitText(basefilename,150,FC_YELLOW);
- sprintf(filename,"%s/%s",GFX_PATH,basefilename);
+ sprintf(basefilename, "%s%s", pic->picture_filename, picture_ext);
+ DrawInitText(basefilename, 150, FC_YELLOW);
+ sprintf(filename, "%s/%s/%s",
+ options.base_directory, GRAPHICS_DIRECTORY, basefilename);
#ifdef MSDOS
rest(100);
#ifdef XPM_INCLUDE_FILE
- sprintf(basefilename,"%s%s",pic->picture_filename,picturemask_ext);
- DrawInitText(basefilename,150,FC_YELLOW);
- sprintf(filename,"%s/%s",GFX_PATH,basefilename);
+ 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();