diff --git a/CHANGELOG.txt b/CHANGELOG.txt index f0f2427b0..a30868d3f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20110328 +-------- +main/endlevel.c, main/newdemo.c: Properly record the event of reset_rear_view() while switching levels to make it work right when rewinding as well; Properly record Countdown seconds for each newdemo frame instead of second change to get display showing up right while playback and still preserving backwards compability; Suspend Game_wind when playing endlevel movie while demo playback + 20110327 -------- main/physics.c: Another rework for anti-stuck-bumping: Execute after calculation of velocity and add fvi check to make sure we deal with an actual wall collision diff --git a/main/endlevel.c b/main/endlevel.c index 1a63a5302..40c9b660d 100644 --- a/main/endlevel.c +++ b/main/endlevel.c @@ -294,12 +294,18 @@ void start_endlevel_sequence() int i; int movie_played = MOVIE_NOT_PLAYED; + reset_rear_view(); //turn off rear view if set - NOTE: make sure this happens before we pause demo recording!! + if (Newdemo_state == ND_STATE_RECORDING) // stop demo recording Newdemo_state = ND_STATE_PAUSED; if (Newdemo_state == ND_STATE_PLAYBACK) { // don't do this if in playback mode if (PLAYING_BUILTIN_MISSION) // only play movie for built-in mission + { + window_set_visible(Game_wind, 0); // suspend the game, including drawing start_endlevel_movie(); + window_set_visible(Game_wind, 1); + } strcpy(last_palette_loaded,""); //force palette load next time return; } @@ -317,8 +323,6 @@ void start_endlevel_sequence() Players[Player_num].homing_object_dist = -F1_0; // Turn off homing sound. - reset_rear_view(); //turn off rear view if set - #ifdef NETWORK if (Game_mode & GM_MULTI) { multi_send_endlevel_start(0); diff --git a/main/newdemo.c b/main/newdemo.c index 5d8177838..502052b44 100644 --- a/main/newdemo.c +++ b/main/newdemo.c @@ -197,7 +197,6 @@ static sbyte nd_record_v_no_space; static sbyte nd_record_v_objs[MAX_OBJECTS]; static sbyte nd_record_v_viewobjs[MAX_OBJECTS]; static sbyte nd_record_v_rendering[32]; -static int nd_record_v_countdown_seconds_left = 0; static int nd_record_v_player_energy = -1; static fix nd_record_v_player_afterburner = -1; static int nd_record_v_player_shields = -1; @@ -910,7 +909,6 @@ void newdemo_record_start_demo() nd_write_int(Players[Player_num].flags); // be sure players flags are set nd_write_byte((sbyte)Primary_weapon); nd_write_byte((sbyte)Secondary_weapon); - nd_record_v_countdown_seconds_left = 0; nd_record_v_start_frame = nd_record_v_frame_number = 0; nd_record_v_juststarted=1; newdemo_set_new_level(Current_level_num); @@ -1142,12 +1140,11 @@ void newdemo_record_wall_toggle( int segnum, int side ) void newdemo_record_control_center_destroyed() { - if (nd_record_v_countdown_seconds_left == Countdown_seconds_left) + if (!nd_record_v_recordframe) return; stop_time(); nd_write_byte( ND_EVENT_CONTROL_CENTER_DESTROYED ); nd_write_int( Countdown_seconds_left ); - nd_record_v_countdown_seconds_left = Countdown_seconds_left; start_time(); } @@ -1462,7 +1459,6 @@ void newdemo_set_new_level(int level_num) segment *seg; stop_time(); - newdemo_record_restore_rearview(); // This is actually switched while loading the new level - not ingame, so do it here. nd_write_byte(ND_EVENT_NEW_LEVEL); nd_write_byte((sbyte)level_num); nd_write_byte((sbyte)Current_level_num);