When starting, leaving or changing a level in any way, use more ordered approach to set Game_wind visible or invisible. Fixing timer-issues after level-change and makes hiding of Game_wind obsolete for certain messageboxes; Moved GameTime and weapon timer variables out of reset_time since this function is not appropriate for this and is not needed between levels anymore due to window management handling start/stop_time properly

This commit is contained in:
zicodxx 2010-06-27 11:28:26 +00:00
parent ef4e9e1e17
commit 4e3bf92435
4 changed files with 23 additions and 15 deletions

View file

@ -1,5 +1,9 @@
D1X-Rebirth Changelog
20100627
--------
main/game.c, main/game.h, main/gameseq.c: When starting, leaving or changing a level in any way, use more ordered approach to set Game_wind visible or invisible. Fixing timer-issues after level-change and makes hiding of Game_wind obsolete for certain messageboxes; Moved GameTime and weapon timer variables out of reset_time since this function is not appropriate for this and is not needed between levels anymore due to window management handling start/stop_time properly
20100625
--------
main/gamecntl.c: Implemented kill_and_so_forth via DEL+SHIFT+B for easier debugging

View file

@ -454,7 +454,6 @@ void FixedStepCalc()
void reset_time()
{
GameTime = Next_flare_fire_time = Last_laser_fired_time = Next_laser_fire_time = Next_missile_fire_time = 0;
last_timer_value = timer_get_fixed_seconds();
}

View file

@ -42,6 +42,7 @@ extern int FixedStep; //fixed time bytes stored here
extern fix Next_laser_fire_time; // Time at which player can next fire his selected laser.
extern fix Last_laser_fired_time;
extern fix Next_missile_fire_time; // Time at which player can next fire his selected missile.
extern fix Next_flare_fire_time;
extern fix Laser_delay_time; // Delay between laser fires.
extern int Cheats_enabled;

View file

@ -338,7 +338,7 @@ void init_player_stats_level()
Player_is_dead = 0; // Added by RH
Players[Player_num].homing_object_dist = -F1_0; // Added by RH
Last_laser_fired_time = Next_laser_fire_time = GameTime; // added by RH, solved demo playback bug
Next_flare_fire_time = Last_laser_fired_time = Next_laser_fire_time = Next_missile_fire_time = GameTime; // added by RH, solved demo playback bug
init_gauges();
}
@ -687,7 +687,9 @@ void LoadLevel(int level_num)
gr_use_palette_table( "palette.256" );
show_boxed_message(TXT_LOADING, 0);
timer_delay2(1);
#ifdef RELEASE
timer_delay(F1_0);
#endif
#ifdef NETWORK
my_segments_checksum = netmisc_calc_checksum(Segments, sizeof(segment)*(Highest_segment_index+1));
@ -878,6 +880,9 @@ void PlayerFinishedLevel(int secret_flag)
int rval;
int was_multi = 0;
if (Game_wind)
window_set_visible(Game_wind, 0);
//credit the player for hostages
Players[Player_num].hostages_rescued_total += Players[Player_num].hostages_on_board;
@ -939,6 +944,9 @@ void PlayerFinishedLevel(int secret_flag)
}
else if (rval && Game_wind)
window_close(Game_wind);
if (Game_wind)
window_set_visible(Game_wind, 1);
}
@ -950,14 +958,11 @@ void PlayerFinishedLevel(int secret_flag)
// Return true if game over.
int AdvanceLevel(int secret_flag)
{
window_set_visible(Game_wind, 0); // suspend the game, including drawing
Control_center_destroyed = 0;
#ifdef EDITOR
if (PLAYING_BUILTIN_MISSION)
{
window_set_visible(Game_wind, 1);
return 0; //not a real level
}
#endif
@ -971,9 +976,6 @@ int AdvanceLevel(int secret_flag)
result = multi_endlevel(&secret_flag); // Wait for other players to reach this point
if (result) // failed to sync
{
if (Game_wind)
window_set_visible(Game_wind, 1);
return (Current_level_num == Last_level);
}
}
@ -1021,9 +1023,6 @@ int AdvanceLevel(int secret_flag)
key_flush();
if (Game_wind)
window_set_visible(Game_wind, 1);
return 0;
}
@ -1037,14 +1036,15 @@ died_in_mine_message(void)
return;
gr_set_current_canvas(NULL);
window_set_visible(Game_wind, 0);
nm_messagebox(NULL, 1, TXT_OK, TXT_DIED_IN_MINE);
}
//called when the player has died
void DoPlayerDead()
{
if (Game_wind)
window_set_visible(Game_wind, 0);
reset_palette_add();
gr_palette_load (gr_palette);
@ -1137,6 +1137,8 @@ void DoPlayerDead()
StartLevel(1);
}
if (Game_wind)
window_set_visible(Game_wind, 1);
}
//called when the player is starting a new level for normal game mode and restore state
@ -1262,6 +1264,8 @@ void StartNewLevel(int level_num)
{
hide_menus();
GameTime = 0;
load_custom_data(get_level_file(level_num));
if (!(Game_mode & GM_MULTI)) {
@ -1390,7 +1394,7 @@ void StartLevel(int random)
ai_reset_all_paths();
ai_init_boss_for_ship();
reset_time();
// reset_time(); Time is stopped and should be resumed soon. You shall be obsolete!
reset_rear_view();
Auto_fire_fusion_cannon_time = 0;