Cancel out do_controlcen_dead_frame() when not playing and only check triggers for playing players for further host-authority stuff; Made GameProcessFrame not cause endless loop by closing kmatrix over and over again due to game_leave_menus(); Also only close menus when level ends and when we die only the automap will close - otherwise menus can stay (user request)

This commit is contained in:
zicodxx 2012-05-25 12:14:28 +02:00
parent 4554227d1a
commit 1431d3bc35
4 changed files with 25 additions and 10 deletions

View file

@ -1,5 +1,9 @@
D2X-Rebirth Changelog
20120525
--------
main/cntrlcen.c, main/game.c, main/switch.c: Cancel out do_controlcen_dead_frame() when not playing and only check triggers for playing players for further host-authority stuff; Made GameProcessFrame not cause endless loop by closing kmatrix over and over again due to game_leave_menus(); Also only close menus when level ends and when we die only the automap will close - otherwise menus can stay (user request)
20120524
--------
main/gameseq.c, main/gameseq.h: in StartLevel() only call disable_matcens() and clear_transient_objects() in Singleplayer to keep consistency with remote clients

View file

@ -135,6 +135,9 @@ int Alan_pavlish_reactor_times[NDL] = {90, 60, 45, 35, 30};
// Called every frame. If control center been destroyed, then actually do something.
void do_controlcen_dead_frame(void)
{
if ((Game_mode & GM_MULTI) && (Players[Player_num].connected != CONNECT_PLAYING)) // if out of level already there's no need for this
return;
if ((Dead_controlcen_object_num != -1) && (Countdown_seconds_left > 0))
if (d_rand() < FrameTime*4)
create_small_fireball_on_object(&Objects[Dead_controlcen_object_num], F1_0, 1);

View file

@ -1321,7 +1321,6 @@ void game_leave_menus(void)
void GameProcessFrame(void)
{
fix player_shields = Players[Player_num].shields;
int was_fuelcen_destroyed = Control_center_destroyed;
int player_was_dead = Player_is_dead;
update_player_stats();
@ -1487,20 +1486,21 @@ void GameProcessFrame(void)
#endif
}
// Check if we have to close in-game menus for multiplayer
if (Endlevel_sequence || (Player_is_dead != player_was_dead) || ((Players[Player_num].shields < player_shields) && Players[Player_num].shields < 5))
game_leave_menus();
if ((Control_center_destroyed && !was_fuelcen_destroyed) || ((Control_center_destroyed) && (Countdown_seconds_left < 10)))
game_leave_menus();
omega_charge_frame();
slide_textures();
flicker_lights();
//if the player is taking damage, give up guided missile control
if (Players[Player_num].shields != player_shields)
release_guided_missile(Player_num);
omega_charge_frame();
slide_textures();
flicker_lights();
// Check if we have to close in-game menus for multiplayer
if ((Game_mode & GM_MULTI) && (Players[Player_num].connected == CONNECT_PLAYING))
{
if ( Endlevel_sequence || ((Control_center_destroyed) && (Countdown_seconds_left <= 1)) || // close menus when end of level...
(Automap_active && ((Player_is_dead != player_was_dead) || (Players[Player_num].shields<=0 && player_shields>0))) ) // close autmap when dying ...
game_leave_menus();
}
}
//!!extern int Goal_blue_segnum,Goal_red_segnum;

View file

@ -376,6 +376,11 @@ int check_trigger_sub(int trigger_num, int pnum,int shot)
{
trigger *trig = &Triggers[trigger_num];
if (pnum < 0 || pnum > MAX_PLAYERS)
return 1;
if ((Game_mode & GM_MULTI) && (Players[pnum].connected != CONNECT_PLAYING)) // as a host we may want to handle triggers for our clients. to do that properly we must check wether we (host) or client is actually playing.
return 1;
if (trig->flags & TF_DISABLED)
return 1; //1 means don't send trigger hit to other players
@ -550,6 +555,9 @@ void check_trigger(segment *seg, short side, short objnum,int shot)
//segment *csegp;
//short cside;
if ((Game_mode & GM_MULTI) && (Players[Player_num].connected != CONNECT_PLAYING)) // as a host we may want to handle triggers for our clients. so this function may be called when we are not playing.
return;
if ((objnum == Players[Player_num].objnum) || ((Objects[objnum].type == OBJ_ROBOT) && (Robot_info[Objects[objnum].id].companion))) {
if ( Newdemo_state == ND_STATE_RECORDING )