/* * send informations about a player too all connected players * last_change: the player will not be send if (send_to_p_nr == bman.p_nr) */ void net_game_send_player (int p_nr) { int p; if (GT_MP_PTPM) { for (p = 0; p < MAX_PLAYERS; p++) if (PS_IS_netplayer (players[p].state) && p != bman.p_nr && p != bman.p2_nr && p != p_nr) send_playerdata (&players[p].net.addr, p_nr, &players[p_nr]); } else if (p_nr == bman.p_nr || p_nr == bman.p2_nr) { for (p = 0; p < MAX_PLAYERS; p++) if (NET_CANSEND (p)) send_playerdata (&players[p].net.addr, p_nr, &players[p_nr]); } };
void game_loop () { SDL_Event event; int done = 0, eventstate; if (GT_MP) net_game_fillsockaddr (); if ( SDL_InitSubSystem ( SDL_INIT_JOYSTICK ) < 0 ) { fprintf ( stderr, "Unable to initialize Joystick: %s\n", SDL_GetError() ); } printf ( "%i joysticks found\n", SDL_NumJoysticks () ); menu = NULL; bman.updatestatusbar = 1; // force an update timestamp = SDL_GetTicks (); // needed for time sync. d_gamedetail ("GAME START"); gfx_blitupdaterectclear (); draw_logo (); draw_field (); SDL_Flip (gfx.screen); draw_players (); if (bman.p_nr >= 0 && bman.p_nr < MAX_PLAYERS) { players[bman.p_nr].ready = 1; if (GT_MP_PTPS) send_playerdata (&players[bman.p_servnr].net.addr, bman.p_nr, &players[bman.p_nr]); } if (bman.p2_nr >= 0 && bman.p2_nr < MAX_PLAYERS) { players[bman.p2_nr].ready = 1; if (GT_MP_PTPS) send_playerdata (&players[bman.p_servnr].net.addr, bman.p2_nr, &players[bman.p2_nr]); } fire_init(); while (!done && (bman.state == GS_running || bman.state == GS_ready)) { SDL_JoystickUpdate (); if ((eventstate = SDL_PollEvent (&event)) != 0) switch (event.type) { case (SDL_QUIT): done = 1; bman.state = GS_quit; } /* * input handling */ keyb_loop (&event); game_keys_loop (); if (GT_MP) chat_loop (&event); if ((!IS_LPLAYER2) && (!chat.active)) chat_setactive (1, 1); restore_players_screen (); player_check (bman.p_nr); if (IS_LPLAYER2) player_check (bman.p2_nr); dead_playerani (); special_loop (); player_move (bman.p_nr); if (IS_LPLAYER2) player_move (bman.p2_nr); if (GT_MP) { player_calcpos (); network_loop (); } if (bman.state == GS_running) single_loop (); bomb_loop (); /* wind_loop (); SOON */ fire_loop (); field_loop (); flitems_loop (); draw_players (); game_draw_info (); // will set the var bman.player_nr /* check if there is only one player left and the game is in multiplayer mode and if there the last dieing animation is done */ if (game_check_endgame () && bman.timeout >= 0.0f) bman.timeout = 0.0f; if ((GT_SP || GT_MP_PTPM) && bman.timeout < -GAME_OVERTIMEOUT) { d_printf ("GAME: Game Over\n"); done = 1; } stonelist_draw (); /* if there is any menu displayed do so */ if (menu != NULL) game_menu_loop (&event, eventstate); gfx_blitdraw (); s_calctimesync (); bman.timeout -= timediff; } if (menu != NULL) { menu_delete (menu); menu = NULL; } gfx_blitdraw (); chat_show (-1, -1, -1, -1); draw_logo (); gfx_blitupdaterectclear (); SDL_Flip (gfx.screen); d_gamedetail ("GAME END"); d_printf ("done = %d\n", done); };