Restructure endlevel.c for merging
This commit is contained in:
parent
4469ff36c0
commit
1c754aa55e
|
@ -102,16 +102,16 @@ object *endlevel_camera;
|
||||||
|
|
||||||
#define FLY_SPEED i2f(50)
|
#define FLY_SPEED i2f(50)
|
||||||
|
|
||||||
#define FLY_ACCEL i2f(5)
|
static void do_endlevel_flythrough(int n);
|
||||||
|
|
||||||
fix cur_fly_speed,desired_fly_speed;
|
|
||||||
|
|
||||||
static void generate_starfield();
|
|
||||||
static void draw_stars();
|
static void draw_stars();
|
||||||
static int find_exit_side(object *obj);
|
static int find_exit_side(object *obj);
|
||||||
static void do_endlevel_flythrough(int n);
|
static void generate_starfield();
|
||||||
static void start_endlevel_flythrough(int n,object *obj,fix speed);
|
static void start_endlevel_flythrough(int n,object *obj,fix speed);
|
||||||
|
|
||||||
|
#define FLY_ACCEL i2f(5)
|
||||||
|
|
||||||
|
static fix cur_fly_speed,desired_fly_speed;
|
||||||
|
|
||||||
grs_bitmap *satellite_bitmap,*station_bitmap,*terrain_bitmap; //!!*exit_bitmap,
|
grs_bitmap *satellite_bitmap,*station_bitmap,*terrain_bitmap; //!!*exit_bitmap,
|
||||||
vms_vector satellite_pos,satellite_upvec;
|
vms_vector satellite_pos,satellite_upvec;
|
||||||
//!!grs_bitmap **exit_bitmap_list[1];
|
//!!grs_bitmap **exit_bitmap_list[1];
|
||||||
|
@ -202,10 +202,6 @@ static int endlevel_data_loaded=0;
|
||||||
|
|
||||||
void start_endlevel_sequence()
|
void start_endlevel_sequence()
|
||||||
{
|
{
|
||||||
#ifndef NDEBUG
|
|
||||||
int last_segnum;
|
|
||||||
#endif
|
|
||||||
int exit_side,tunnel_length;
|
|
||||||
|
|
||||||
reset_rear_view(); //turn off rear view if set - NOTE: make sure this happens before we pause demo recording!!
|
reset_rear_view(); //turn off rear view if set - NOTE: make sure this happens before we pause demo recording!!
|
||||||
|
|
||||||
|
@ -230,6 +226,10 @@ void start_endlevel_sequence()
|
||||||
PlayerFinishedLevel(0); //don't do special sequence
|
PlayerFinishedLevel(0); //don't do special sequence
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#ifndef NDEBUG
|
||||||
|
int last_segnum;
|
||||||
|
#endif
|
||||||
|
int exit_side,tunnel_length;
|
||||||
|
|
||||||
{
|
{
|
||||||
int segnum,old_segnum,entry_side,i;
|
int segnum,old_segnum,entry_side,i;
|
||||||
|
@ -401,10 +401,10 @@ static void get_angs_to_object(vms_angvec *av,const vms_vector *targ_pos,vms_vec
|
||||||
void do_endlevel_frame()
|
void do_endlevel_frame()
|
||||||
{
|
{
|
||||||
static fix timer;
|
static fix timer;
|
||||||
|
static fix bank_rate;
|
||||||
vms_vector save_last_pos;
|
vms_vector save_last_pos;
|
||||||
static fix explosion_wait1=0;
|
static fix explosion_wait1=0;
|
||||||
static fix explosion_wait2=0;
|
static fix explosion_wait2=0;
|
||||||
static fix bank_rate;
|
|
||||||
static fix ext_expl_halflife;
|
static fix ext_expl_halflife;
|
||||||
|
|
||||||
save_last_pos = ConsoleObject->last_pos; //don't let move code change this
|
save_last_pos = ConsoleObject->last_pos; //don't let move code change this
|
||||||
|
@ -506,8 +506,8 @@ void do_endlevel_frame()
|
||||||
|
|
||||||
//create little explosion on wall
|
//create little explosion on wall
|
||||||
|
|
||||||
vm_vec_copy_scale(&tpnt,&ConsoleObject->orient.rvec,(d_rand()-D_RAND_MAX/2)*100);
|
vm_vec_copy_scale(&tpnt,&ConsoleObject->orient.rvec,(d_rand()-D_RAND_MAX/2)*100);
|
||||||
vm_vec_scale_add2(&tpnt,&ConsoleObject->orient.uvec,(d_rand()-D_RAND_MAX/2)*100);
|
vm_vec_scale_add2(&tpnt,&ConsoleObject->orient.uvec,(d_rand()-D_RAND_MAX/2)*100);
|
||||||
vm_vec_add2(&tpnt,&ConsoleObject->pos);
|
vm_vec_add2(&tpnt,&ConsoleObject->pos);
|
||||||
|
|
||||||
if (Endlevel_sequence == EL_FLYTHROUGH)
|
if (Endlevel_sequence == EL_FLYTHROUGH)
|
||||||
|
@ -898,14 +898,14 @@ static void render_external_scene(fix eye_offset)
|
||||||
|
|
||||||
vms_vector stars[MAX_STARS];
|
vms_vector stars[MAX_STARS];
|
||||||
|
|
||||||
void generate_starfield()
|
static void generate_starfield()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0;i<MAX_STARS;i++) {
|
for (i=0;i<MAX_STARS;i++) {
|
||||||
|
|
||||||
stars[i].x = (d_rand() - D_RAND_MAX/2) << 14;
|
stars[i].x = (d_rand() - D_RAND_MAX/2) << 14;
|
||||||
stars[i].z = (d_rand() - D_RAND_MAX/2) << 14;
|
stars[i].z = (d_rand() - D_RAND_MAX/2) << 14;
|
||||||
stars[i].y = (d_rand()/2) << 14;
|
stars[i].y = (d_rand()/2) << 14;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,11 +114,7 @@ static void draw_stars();
|
||||||
static int find_exit_side(object *obj);
|
static int find_exit_side(object *obj);
|
||||||
static void generate_starfield();
|
static void generate_starfield();
|
||||||
static void start_endlevel_flythrough(int n,object *obj,fix speed);
|
static void start_endlevel_flythrough(int n,object *obj,fix speed);
|
||||||
static void start_rendered_endlevel_sequence();
|
|
||||||
|
|
||||||
#ifdef D2_OEM
|
|
||||||
static const char movie_table[] = { 'a','a','a','a','d','d','d','d' };
|
|
||||||
#else
|
|
||||||
static const char movie_table[] = { 'a','b','c',
|
static const char movie_table[] = { 'a','b','c',
|
||||||
'a',
|
'a',
|
||||||
'd','f','d','f',
|
'd','f','d','f',
|
||||||
|
@ -127,21 +123,17 @@ static const char movie_table[] = { 'a','b','c',
|
||||||
'm','o','m','o',
|
'm','o','m','o',
|
||||||
'p','q','p','q'
|
'p','q','p','q'
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#define N_MOVIES (sizeof(movie_table) / sizeof(*movie_table))
|
#define N_MOVIES (sizeof(movie_table) / sizeof(*movie_table))
|
||||||
|
|
||||||
#ifdef D2_OEM
|
|
||||||
static const char movie_table_secret[] = {'a','d'};
|
|
||||||
#else
|
|
||||||
static const char movie_table_secret[] = {'a','d','g','j','m','p'};
|
static const char movie_table_secret[] = {'a','d','g','j','m','p'};
|
||||||
#endif
|
|
||||||
#define N_MOVIES_SECRET (sizeof(movie_table_secret) / sizeof(*movie_table_secret))
|
#define N_MOVIES_SECRET (sizeof(movie_table_secret) / sizeof(*movie_table_secret))
|
||||||
|
static int endlevel_movie_played = MOVIE_NOT_PLAYED;
|
||||||
|
|
||||||
|
|
||||||
#define FLY_ACCEL i2f(5)
|
#define FLY_ACCEL i2f(5)
|
||||||
|
|
||||||
fix cur_fly_speed,desired_fly_speed;
|
static fix cur_fly_speed,desired_fly_speed;
|
||||||
|
|
||||||
grs_bitmap *satellite_bitmap,*station_bitmap,*terrain_bitmap; //!!*exit_bitmap,
|
grs_bitmap *satellite_bitmap,*station_bitmap,*terrain_bitmap; //!!*exit_bitmap,
|
||||||
vms_vector satellite_pos,satellite_upvec;
|
vms_vector satellite_pos,satellite_upvec;
|
||||||
|
@ -186,11 +178,7 @@ static int matt_find_connect_side(int seg0,int seg1)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(D2_OEM) || defined(COMPILATION)
|
|
||||||
#define MOVIE_REQUIRED 0
|
|
||||||
#else
|
|
||||||
#define MOVIE_REQUIRED 1
|
#define MOVIE_REQUIRED 1
|
||||||
#endif
|
|
||||||
|
|
||||||
//returns movie played status. see movie.h
|
//returns movie played status. see movie.h
|
||||||
static int start_endlevel_movie()
|
static int start_endlevel_movie()
|
||||||
|
@ -229,14 +217,10 @@ static int start_endlevel_movie()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void free_endlevel_data()
|
||||||
free_endlevel_data()
|
|
||||||
{
|
{
|
||||||
if (terrain_bm_instance.bm_data)
|
gr_free_bitmap_data (&terrain_bm_instance);
|
||||||
d_free(terrain_bm_instance.bm_data);
|
gr_free_bitmap_data (&satellite_bm_instance);
|
||||||
|
|
||||||
if (satellite_bm_instance.bm_data)
|
|
||||||
d_free(satellite_bm_instance.bm_data);
|
|
||||||
|
|
||||||
free_light_table();
|
free_light_table();
|
||||||
free_height_array();
|
free_height_array();
|
||||||
|
@ -265,23 +249,21 @@ void init_endlevel()
|
||||||
|
|
||||||
generate_starfield();
|
generate_starfield();
|
||||||
|
|
||||||
terrain_bm_instance.bm_data = satellite_bm_instance.bm_data = NULL;
|
gr_init_bitmap_data (&terrain_bm_instance);
|
||||||
|
gr_init_bitmap_data (&satellite_bm_instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
object external_explosion;
|
object external_explosion;
|
||||||
int ext_expl_playing,mine_destroyed;
|
int ext_expl_playing,mine_destroyed;
|
||||||
|
|
||||||
vms_angvec exit_angles={-0xa00,0,0};
|
static vms_angvec exit_angles={-0xa00,0,0};
|
||||||
|
|
||||||
vms_matrix surface_orient;
|
vms_matrix surface_orient;
|
||||||
|
|
||||||
int endlevel_data_loaded=0;
|
static int endlevel_data_loaded=0;
|
||||||
int endlevel_movie_played = MOVIE_NOT_PLAYED;
|
|
||||||
|
|
||||||
void start_endlevel_sequence()
|
void start_endlevel_sequence()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
|
|
||||||
reset_rear_view(); //turn off rear view if set - NOTE: make sure this happens before we pause demo recording!!
|
reset_rear_view(); //turn off rear view if set - NOTE: make sure this happens before we pause demo recording!!
|
||||||
|
|
||||||
|
@ -303,7 +285,7 @@ void start_endlevel_sequence()
|
||||||
return; //don't start if dead!
|
return; //don't start if dead!
|
||||||
|
|
||||||
// Dematerialize Buddy!
|
// Dematerialize Buddy!
|
||||||
for (i=0; i<=Highest_object_index; i++)
|
for (int i=0; i<=Highest_object_index; i++)
|
||||||
if (Objects[i].type == OBJ_ROBOT)
|
if (Objects[i].type == OBJ_ROBOT)
|
||||||
if (Robot_info[get_robot_id(&Objects[i])].companion) {
|
if (Robot_info[get_robot_id(&Objects[i])].companion) {
|
||||||
object_create_explosion(Objects[i].segnum, &Objects[i].pos, F1_0*7/2, VCLIP_POWERUP_DISAPPEARANCE );
|
object_create_explosion(Objects[i].segnum, &Objects[i].pos, F1_0*7/2, VCLIP_POWERUP_DISAPPEARANCE );
|
||||||
|
@ -317,36 +299,29 @@ void start_endlevel_sequence()
|
||||||
multi_do_protocol_frame(1, 1);
|
multi_do_protocol_frame(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
window_set_visible(Game_wind, 0); // suspend the game, including drawing
|
|
||||||
|
|
||||||
if (PLAYING_BUILTIN_MISSION) // only play movie for built-in mission
|
if (PLAYING_BUILTIN_MISSION) // only play movie for built-in mission
|
||||||
if (!(Game_mode & GM_MULTI))
|
if (!(Game_mode & GM_MULTI))
|
||||||
endlevel_movie_played = start_endlevel_movie();
|
|
||||||
|
|
||||||
window_set_visible(Game_wind, 1);
|
|
||||||
|
|
||||||
if (!(Game_mode & GM_MULTI) && (endlevel_movie_played == MOVIE_NOT_PLAYED) && endlevel_data_loaded)
|
|
||||||
{ //don't have movie. Do rendered sequence, if available
|
|
||||||
int exit_models_loaded = 0;
|
|
||||||
|
|
||||||
if (Piggy_hamfile_version < 3)
|
|
||||||
exit_models_loaded = 1; // built-in for PC shareware
|
|
||||||
|
|
||||||
else
|
|
||||||
exit_models_loaded = load_exit_models();
|
|
||||||
|
|
||||||
if (exit_models_loaded)
|
|
||||||
{
|
{
|
||||||
start_rendered_endlevel_sequence();
|
window_set_visible(Game_wind, 0); // suspend the game, including drawing
|
||||||
return;
|
endlevel_movie_played = start_endlevel_movie();
|
||||||
|
window_set_visible(Game_wind, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(!(Game_mode & GM_MULTI) && (endlevel_movie_played == MOVIE_NOT_PLAYED) && endlevel_data_loaded))
|
||||||
|
{
|
||||||
|
PlayerFinishedLevel(0); //done with level
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
int exit_models_loaded = 0;
|
||||||
|
|
||||||
PlayerFinishedLevel(0); //done with level
|
if (Piggy_hamfile_version < 3)
|
||||||
}
|
exit_models_loaded = 1; // built-in for PC shareware
|
||||||
|
|
||||||
void start_rendered_endlevel_sequence()
|
else
|
||||||
{
|
exit_models_loaded = load_exit_models();
|
||||||
|
|
||||||
|
if (!exit_models_loaded)
|
||||||
|
return;
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
int last_segnum;
|
int last_segnum;
|
||||||
#endif
|
#endif
|
||||||
|
@ -511,7 +486,7 @@ void stop_endlevel_sequence()
|
||||||
//--unused-- vms_vector upvec = {0,f1_0,0};
|
//--unused-- vms_vector upvec = {0,f1_0,0};
|
||||||
|
|
||||||
//find the angle between the player's heading & the station
|
//find the angle between the player's heading & the station
|
||||||
static void get_angs_to_object(vms_angvec *av,vms_vector *targ_pos,vms_vector *cur_pos)
|
static void get_angs_to_object(vms_angvec *av,const vms_vector *targ_pos,vms_vector *cur_pos)
|
||||||
{
|
{
|
||||||
vms_vector tv;
|
vms_vector tv;
|
||||||
|
|
||||||
|
@ -628,8 +603,8 @@ void do_endlevel_frame()
|
||||||
|
|
||||||
//create little explosion on wall
|
//create little explosion on wall
|
||||||
|
|
||||||
vm_vec_copy_scale(&tpnt,&ConsoleObject->orient.rvec,(d_rand()-RAND_MAX/2)*100);
|
vm_vec_copy_scale(&tpnt,&ConsoleObject->orient.rvec,(d_rand()-D_RAND_MAX/2)*100);
|
||||||
vm_vec_scale_add2(&tpnt,&ConsoleObject->orient.uvec,(d_rand()-RAND_MAX/2)*100);
|
vm_vec_scale_add2(&tpnt,&ConsoleObject->orient.uvec,(d_rand()-D_RAND_MAX/2)*100);
|
||||||
vm_vec_add2(&tpnt,&ConsoleObject->pos);
|
vm_vec_add2(&tpnt,&ConsoleObject->pos);
|
||||||
|
|
||||||
if (Endlevel_sequence == EL_FLYTHROUGH)
|
if (Endlevel_sequence == EL_FLYTHROUGH)
|
||||||
|
@ -667,7 +642,8 @@ void do_endlevel_frame()
|
||||||
|
|
||||||
if (PLAYING_BUILTIN_MISSION && endlevel_movie_played != MOVIE_NOT_PLAYED)
|
if (PLAYING_BUILTIN_MISSION && endlevel_movie_played != MOVIE_NOT_PLAYED)
|
||||||
stop_endlevel_sequence();
|
stop_endlevel_sequence();
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
int objnum;
|
int objnum;
|
||||||
|
|
||||||
//songs_play_song( SONG_ENDLEVEL, 0 );
|
//songs_play_song( SONG_ENDLEVEL, 0 );
|
||||||
|
@ -942,7 +918,7 @@ void draw_exit_model()
|
||||||
|
|
||||||
int exit_point_bmx,exit_point_bmy;
|
int exit_point_bmx,exit_point_bmy;
|
||||||
|
|
||||||
fix satellite_size = i2f(400);
|
static fix satellite_size = i2f(400);
|
||||||
|
|
||||||
#define SATELLITE_DIST i2f(1024)
|
#define SATELLITE_DIST i2f(1024)
|
||||||
#define SATELLITE_WIDTH satellite_size
|
#define SATELLITE_WIDTH satellite_size
|
||||||
|
@ -1024,14 +1000,14 @@ static void render_external_scene(fix eye_offset)
|
||||||
|
|
||||||
vms_vector stars[MAX_STARS];
|
vms_vector stars[MAX_STARS];
|
||||||
|
|
||||||
void generate_starfield()
|
static void generate_starfield()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0;i<MAX_STARS;i++) {
|
for (i=0;i<MAX_STARS;i++) {
|
||||||
|
|
||||||
stars[i].x = (d_rand() - RAND_MAX/2) << 14;
|
stars[i].x = (d_rand() - D_RAND_MAX/2) << 14;
|
||||||
stars[i].z = (d_rand() - RAND_MAX/2) << 14;
|
stars[i].z = (d_rand() - D_RAND_MAX/2) << 14;
|
||||||
stars[i].y = (d_rand()/2) << 14;
|
stars[i].y = (d_rand()/2) << 14;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1129,7 +1105,7 @@ static void endlevel_render_mine(fix eye_offset)
|
||||||
else
|
else
|
||||||
g3_set_view_matrix(&Viewer_eye,&Viewer->orient,Render_zoom);
|
g3_set_view_matrix(&Viewer_eye,&Viewer->orient,Render_zoom);
|
||||||
|
|
||||||
render_mine(start_seg_num,eye_offset, 0);
|
render_mine(start_seg_num,eye_offset,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void render_endlevel_frame(fix eye_offset)
|
void render_endlevel_frame(fix eye_offset)
|
||||||
|
@ -1451,7 +1427,7 @@ try_again:
|
||||||
if ((p=strchr(line,';'))!=NULL)
|
if ((p=strchr(line,';'))!=NULL)
|
||||||
*p = 0; //cut off comment
|
*p = 0; //cut off comment
|
||||||
|
|
||||||
for (p=line+strlen(line);p>line && isspace(*p);*p--=0);
|
for (p=line+strlen(line)-1;p>line && isspace(*p);*p--=0);
|
||||||
for (p=line;isspace(*p);p++);
|
for (p=line;isspace(*p);p++);
|
||||||
|
|
||||||
if (!*p) //empty line
|
if (!*p) //empty line
|
||||||
|
@ -1463,10 +1439,7 @@ try_again:
|
||||||
int iff_error;
|
int iff_error;
|
||||||
ubyte pal[768];
|
ubyte pal[768];
|
||||||
|
|
||||||
if (terrain_bm_instance.bm_data)
|
gr_free_bitmap_data (&terrain_bm_instance);
|
||||||
d_free(terrain_bm_instance.bm_data);
|
|
||||||
|
|
||||||
Assert(terrain_bm_instance.bm_data == NULL);
|
|
||||||
|
|
||||||
iff_error = iff_read_bitmap(p,&terrain_bm_instance,BM_LINEAR,pal);
|
iff_error = iff_read_bitmap(p,&terrain_bm_instance,BM_LINEAR,pal);
|
||||||
if (iff_error != IFF_NO_ERROR) {
|
if (iff_error != IFF_NO_ERROR) {
|
||||||
|
@ -1504,8 +1477,7 @@ try_again:
|
||||||
int iff_error;
|
int iff_error;
|
||||||
ubyte pal[768];
|
ubyte pal[768];
|
||||||
|
|
||||||
if (satellite_bm_instance.bm_data)
|
gr_free_bitmap_data (&satellite_bm_instance);
|
||||||
d_free(satellite_bm_instance.bm_data);
|
|
||||||
|
|
||||||
iff_error = iff_read_bitmap(p,&satellite_bm_instance,BM_LINEAR,pal);
|
iff_error = iff_read_bitmap(p,&satellite_bm_instance,BM_LINEAR,pal);
|
||||||
if (iff_error != IFF_NO_ERROR) {
|
if (iff_error != IFF_NO_ERROR) {
|
||||||
|
|
Loading…
Reference in a new issue