Пример #1
0
void frontnet_return_to_session_menu(struct GuiButton *gbtn)
{
    if ( LbNetwork_Stop() )
    {
        ERRORLOG("LbNetwork_Stop() failed");
        return;
    }
    if ( setup_network_service(net_service_index_selected) )
        frontend_set_state(FeSt_NET_SESSION);
    else
        frontend_set_state(FeSt_MAIN_MENU);
}
Пример #2
0
void frontend_load_game(struct GuiButton *gbtn)
{
  int i;
  i = frontend_load_game_button_to_index(gbtn);
  if (i < 0)
    return;
  game.numfield_15 = i;
  if (is_save_game_loadable(i))
  {
    frontend_set_state(FeSt_LOAD_GAME);
  } else
  {
    save_catalogue_slot_disable(i);
    if (!initialise_load_game_slots())
      frontend_set_state(FeSt_MAIN_MENU);
  }
}
Пример #3
0
void frontnet_service_select(struct GuiButton *gbtn)
{
    int srvidx;
    srvidx = (long)(gbtn->content) + net_service_scroll_offset - 45;
    if ( ((game.system_flags & GSF_AllowOnePlayer) != 0)
            && (srvidx+1 >= net_number_of_services) )
    {
        fe_network_active = 0;
        frontend_set_state(FeSt_NETLAND_VIEW);
    } else if (srvidx <= 0)
    {
        frontend_set_state(FeSt_NET_SERIAL);
    } else
    {
        setup_network_service(srvidx);
    }
}
Пример #4
0
void frontnet_return_to_main_menu(struct GuiButton *gbtn)
{
  if ( LbNetwork_Stop() )
  {
    ERRORLOG("LbNetwork_Stop() failed");
    return;
  }
  frontend_set_state(FeSt_MAIN_MENU);
}
Пример #5
0
void frontnet_session_join(struct GuiButton *gbtn)
{
    long plyr_num;
    plyr_num = network_session_join();
    if (plyr_num < 0)
        return;
    frontend_set_player_number(plyr_num);
    frontend_set_state(FeSt_NET_START);
}
Пример #6
0
void frontnet_session_create(struct GuiButton *gbtn)
{
  struct TbNetworkSessionNameEntry *nsname;
  unsigned long plyr_num;
  void *conn_options;
  char *text;
  char *txpos;
  long i,idx;
  idx = 0;
  for (i=0; i < net_number_of_sessions; i++)
  {
      nsname = net_session[i];
      if (nsname == NULL)
        continue;
      text = buf_sprintf("%s",nsname->text);
      txpos = strchr(text, '\'');
      if (txpos != NULL)
        *txpos = '\0';
      if (strcmp(text, net_player_name) != 0)
        idx++;
  }
  if (idx > 0)
    text = buf_sprintf("%s (%d)", net_player_name, idx+1);
  else
    text = buf_sprintf("%s", net_player_name);
  switch (net_service_index_selected)
  {
  case 1:
      modem_dev.field_0 = 0;
      modem_dev.field_4 = 0;
      strcpy(modem_dev.field_58, net_config_info.str_join);
      modem_dev.field_AC = modem_initialise_callback;
      modem_dev.field_B0 = modem_connect_callback;
      conn_options = &modem_dev;
      break;
  default:
      conn_options = NULL;
      break;
  }
  if (LbNetwork_Create(text, net_player_name, &plyr_num, conn_options))
  {
    if (net_service_index_selected == 1)
      process_network_error(modem_dev.field_A8);
    else
      process_network_error(-801);
    return;
  }
  frontend_set_player_number(plyr_num);
  fe_computer_players = 0;
  frontend_set_state(FeSt_NET_START);
}
Пример #7
0
short setup_network_service(int srvidx)
{
  struct ServiceInitData *init_data;
  long maxplayrs;

  switch (srvidx)
  {
  case 0:
      maxplayrs = 2;
      init_data = &net_serial_data;
      set_flag_byte(&game.flags_font,FFlg_unk10,true);
      SYNCMSG("Initializing %d-players serial network",maxplayrs);
      break;
  case 1:
      maxplayrs = 2;
      init_data = &net_modem_data;
      set_flag_byte(&game.flags_font,FFlg_unk10,true);
      SYNCMSG("Initializing %d-players modem network",maxplayrs);
      break;
  case 2:
      maxplayrs = 4;
      init_data = NULL;
      set_flag_byte(&game.flags_font,FFlg_unk10,false);
      SYNCMSG("Initializing %d-players IPX network",maxplayrs);
      break;
  default:
      maxplayrs = 4;
      init_data = NULL;
      set_flag_byte(&game.flags_font,FFlg_unk10,false);
      SYNCMSG("Initializing %d-players type %d network",maxplayrs,srvidx);
      break;
  }
  LbMemorySet(&net_player_info[0], 0, sizeof(struct TbNetworkPlayerInfo));
  if ( LbNetwork_Init(srvidx, maxplayrs, &net_screen_packet,
      sizeof(struct ScreenPacket), &net_player_info[0], init_data) )
  {
    if (srvidx != 0)
      process_network_error(-800);
    return 0;
  }
  net_service_index_selected = srvidx;
  if ((game.flags_font & FFlg_unk10) != 0)
    LbNetwork_ChangeExchangeTimeout(10);
  frontend_set_state(FeSt_NET_SESSION);
  return 1;
}
Пример #8
0
void frontbirthday_draw(void)
{
    frontend_copy_background();
    LbTextSetWindow(70, 70, 500, 340);
    LbTextSetFont(frontstory_font);
    lbDisplay.DrawFlags = Lb_SPRITE_OUTLINE;
    const char *name=get_team_birthday();
    if ( name != NULL )
    {
        unsigned short line_pos;
        line_pos = LbTextLineHeight();
        LbTextDraw(0, 170-line_pos, get_string(GUIStr_HappyBirthday));
        LbTextDraw(0, 170, name);
    } else
    {
        frontend_set_state(FeSt_INTRO);
    }
}
Пример #9
0
void frontend_quit_high_score_table(struct GuiButton *gbtn)
{
    FrontendMenuState nstate;
    nstate = get_menu_state_when_back_from_substate(FeSt_HIGH_SCORES);
    frontend_set_state(nstate);
}
Пример #10
0
void fronttorture_input(void)
{
    struct PlayerInfo *player;
    struct Packet *pckt;
    long x,y;
    PlayerNumber plyr_idx;
    long door_id;
    clear_packets();
    player = get_my_player();
    pckt = get_packet(my_player_number);
    // Get inputs and create packet
    if (player->victory_state == VicS_WonLevel)
    {
        if (left_button_clicked)
        {
            torture_left_button = 1;
            left_button_clicked = 0;
        }
        if ((lbKeyOn[KC_SPACE]) || (lbKeyOn[KC_RETURN]) || (lbKeyOn[KC_ESCAPE]))
        {
            lbKeyOn[KC_SPACE] = 0;
            lbKeyOn[KC_RETURN] = 0;
            lbKeyOn[KC_ESCAPE] = 0;
            pckt->action |= 0x01;
        }
        if (torture_left_button)
            pckt->action |= 0x02;
        if (left_button_held)
            pckt->action |= 0x04;
        pckt->actn_par1 = GetMouseX();
        pckt->actn_par2 = GetMouseY();
    }
    // Exchange packet with other players
    if ((game.system_flags & GSF_NetworkActive) != 0)
    {
        if (LbNetwork_Exchange(pckt))
            ERRORLOG("LbNetwork_Exchange failed");
    }
    // Determine the controlling player and get his mouse coords
    for (plyr_idx=0; plyr_idx < PLAYERS_COUNT; plyr_idx++)
    {
        player = get_player(plyr_idx);
        pckt = get_packet(plyr_idx);
        if ((pckt->action != 0) && (player->victory_state == VicS_WonLevel))
            break;
    }
    if (plyr_idx < PLAYERS_COUNT)
    {
        x = pckt->actn_par1;
        y = pckt->actn_par2;
    } else
    {
        plyr_idx = my_player_number;
        player = get_player(plyr_idx);
        pckt = get_packet(plyr_idx);
        x = 0;
        y = 0;
    }
    if ((pckt->action & 0x01) != 0)
    {
        frontend_set_state(FeSt_LEVEL_STATS);
        if ((game.system_flags & GSF_NetworkActive) != 0)
            LbNetwork_Stop();
        return;
    }
    // Get active door
    door_id = torture_door_over_point(x,y);
    if ((torture_door_selected != -1) && (torture_door_selected != door_id))
        door_id = -1;
    // Make the action
    if (door_id == -1)
      torture_left_button = 0;
    switch (torture_state.action)
    {
    case 0:
        if (door_id != -1)
        {
          torture_state.action = 1;
          torture_sprite_direction = 1;
          torture_door_selected = door_id;
          torture_sprite_frame = 3;
          torture_end_sprite = 7;
        }
        break;
    case 1:
        if (torture_sprite_frame == torture_end_sprite)
        {
          if (door_id == -1)
          {
            torture_state.action = 2;
            torture_sprite_frame = 8;
            torture_end_sprite = 4;
            torture_sprite_direction = -1;
          } else
          if ((pckt->action & (0x02|0x04)) != 0)
          {
            torture_state.action = 3;
            torture_left_button = 0;
            torture_sprite_frame = 7;
            torture_end_sprite = 11;
            torture_sprite_direction = 1;
            torture_play_sound(torture_door_selected, true);
          }
        }
        break;
    case 2:
        if (torture_sprite_frame == torture_end_sprite)
        {
          torture_state.action = 0;
          torture_door_selected = -1;
        }
        break;
    case 3:
        if (torture_sprite_frame == torture_end_sprite)
        {
          if (((pckt->action & 0x04) == 0) || (door_id == -1))
          {
            torture_state.action = 4;
            torture_sprite_frame = 12;
            torture_end_sprite = 8;
            torture_sprite_direction = -1;
            torture_play_sound(torture_door_selected, false);
          }
        }
        break;
    case 4:
        if (torture_sprite_frame == torture_end_sprite)
        {
          torture_state.action = 1;
          torture_sprite_frame = 7;
          torture_end_sprite = 7;
        }
        break;
    }
}