From 878989d9f36c407014e4b23e0612b17078bfd4d4 Mon Sep 17 00:00:00 2001 From: Martin Schaffner Date: Sun, 24 Oct 2004 12:46:49 +0000 Subject: [PATCH] move all mission stuff to mission.{c,h}, make mission structre memory allocated --- ChangeLog | 6 ++ main/gameseq.c | 11 +-- main/gameseq.h | 6 +- main/mission.c | 201 ++++++++++++++++++++++++------------------------- main/mission.h | 97 +++++++++++++----------- main/titles.c | 6 +- main/titles.h | 6 +- 7 files changed, 163 insertions(+), 170 deletions(-) diff --git a/ChangeLog b/ChangeLog index 350e379b..ab840954 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-10-24 Chris Taylor + + * main/gameseq.c, main/gameseq.h, main/mission.c, main/mission.h, + main/titles.c, main/titles.h: move all mission stuff to mission.{c,h}, + make mission structre memory allocated + 2004-10-23 Martin Schaffner * main/Makefile.am, main/inferno.c, main/credits.c, main/endlevel.c, diff --git a/main/gameseq.c b/main/gameseq.c index 3400e7ca..e115699e 100644 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -1,4 +1,4 @@ -/* $Id: gameseq.c,v 1.37 2004-10-09 15:59:28 schaffner Exp $ */ +/* $Id: gameseq.c,v 1.38 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -24,7 +24,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #ifdef RCS -char gameseq_rcsid[] = "$Id: gameseq.c,v 1.37 2004-10-09 15:59:28 schaffner Exp $"; +char gameseq_rcsid[] = "$Id: gameseq.c,v 1.38 2004-10-24 12:46:49 schaffner Exp $"; #endif #ifdef WINDOWS @@ -160,8 +160,6 @@ void filter_objects_from_level(); int Current_level_num=0,Next_level_num; char Current_level_name[LEVEL_NAME_LEN]; -int Last_level, Last_secret_level; - // Global variables describing the player int N_players=1; // Number of players ( >1 means a net game, eh?) int Player_num=0; // The player number who is on the console. @@ -992,8 +990,6 @@ void StartNewGame(int start_level) extern int network_endlevel_poll2( int nitems, newmenu_item * menus, int * key, int citem ); // network.c #endif -extern int N_secret_levels; - #define STARS_BACKGROUND ((MenuHires && cfexist("starsb.pcx"))?"starsb.pcx":cfexist("stars.pcx")?"stars.pcx":"starsb.pcx") // ----------------------------------------------------------------------------- @@ -1532,9 +1528,6 @@ void DoEndGame(void) longjmp( LeaveGame, 0 ); // Exit out of game loop } -//from which level each do you get to each secret level -int Secret_level_table[MAX_SECRET_LEVELS_PER_MISSION]; - //called to go to the next level (if there is one) //if secret_flag is true, advance to secret level, else next normal one // Return true if game over. diff --git a/main/gameseq.h b/main/gameseq.h index e57993c2..1dd719c4 100644 --- a/main/gameseq.h +++ b/main/gameseq.h @@ -1,4 +1,4 @@ -/* $Id: gameseq.h,v 1.4 2004-08-28 23:17:45 schaffner Exp $ */ +/* $Id: gameseq.h,v 1.5 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -30,10 +30,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define SUPER_SMARTBOMB 2 #define SUPER_SHOCKWAVE 3 -extern int Last_level, Last_secret_level; //set by mission code - -extern int Secret_level_table[MAX_SECRET_LEVELS_PER_MISSION]; - #define LEVEL_NAME_LEN 36 //make sure this is multiple of 4! // Current_level_num starts at 1 for the first level diff --git a/main/mission.c b/main/mission.c index fb0df630..6791c896 100644 --- a/main/mission.c +++ b/main/mission.c @@ -1,4 +1,4 @@ -/* $Id: mission.c,v 1.28 2004-10-23 19:15:46 schaffner Exp $ */ +/* $Id: mission.c,v 1.29 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -43,25 +43,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "config.h" #include "newmenu.h" #include "text.h" - -mle Mission_list[MAX_MISSIONS]; - -int Current_mission_num; -int N_secret_levels; // Made a global by MK for scoring purposes. August 1, 1995. -char *Current_mission_filename,*Current_mission_longname; - -int Builtin_mission_num; -char Builtin_mission_filename[9]; -int Builtin_mission_hogsize; - -int D1_Builtin_mission_num; -char D1_Builtin_mission_filename[9]; -int D1_Builtin_mission_hogsize; - -//this stuff should get defined elsewhere - -char Level_names[MAX_LEVELS_PER_MISSION][FILENAME_LEN]; -char Secret_level_names[MAX_SECRET_LEVELS_PER_MISSION][FILENAME_LEN]; +#include "u_mem.h" //values for d1 built-in mission #define BIM_LAST_LEVEL 27 @@ -69,21 +51,36 @@ char Secret_level_names[MAX_SECRET_LEVELS_PER_MISSION][FILENAME_LEN]; #define BIM_BRIEFING_FILE "briefing.tex" #define BIM_ENDING_FILE "endreg.tex" +//mission list entry +typedef struct mle { + char mission_name[MISSION_NAME_LEN+1]; + char filename[9]; // filename without extension + ubyte descent_version; // descent 1 or descent 2? + bool anarchy_only_flag; // if true, mission is anarchy only + int builtin_hogsize; // This is used to determine the version. Only for the built in mission. + ubyte location; // see defines below +} mle; + +//values that describe where a mission is located +#define ML_CURDIR 0 +#define ML_MISSIONDIR 1 +#define ML_CDROM 2 + +mle Mission_list[MAX_MISSIONS]; + +int num_missions = -1; + +Mission *Current_mission = NULL; // currently loaded mission + // // Special versions of mission routines for d1 builtins // -int load_mission_d1(int mission_num) +int load_mission_d1(void) { int i; - cfile_use_descent1_hogfile("descent.hog"); - - Current_mission_num = mission_num; - Current_mission_filename = Mission_list[mission_num].filename; - Current_mission_longname = Mission_list[mission_num].mission_name; - - switch (D1_Builtin_mission_hogsize) { + switch (cfile_size("descent.hog")) { case D1_SHAREWARE_MISSION_HOGSIZE: case D1_SHAREWARE_10_MISSION_HOGSIZE: N_secret_levels = 0; @@ -157,13 +154,13 @@ int load_mission_d1(int mission_num) // Special versions of mission routines for shareware // -int load_mission_shareware(int mission_num) +int load_mission_shareware(void) { - Current_mission_num = mission_num; - Current_mission_filename = Mission_list[mission_num].filename; - Current_mission_longname = Mission_list[mission_num].mission_name; - - switch (Builtin_mission_hogsize) { + strcpy(Current_mission->mission_name, SHAREWARE_MISSION_NAME); + Current_mission->descent_version = 2; + Current_mission->anarchy_only_flag = 0; + + switch (Current_mission->builtin_hogsize) { case MAC_SHARE_MISSION_HOGSIZE: N_secret_levels = 1; @@ -198,12 +195,12 @@ int load_mission_shareware(int mission_num) // Special versions of mission routines for Diamond/S3 version // -int load_mission_oem(int mission_num) +int load_mission_oem(void) { - Current_mission_num = mission_num; - Current_mission_filename = Mission_list[mission_num].filename; - Current_mission_longname = Mission_list[mission_num].mission_name; - + strcpy(Current_mission->mission_name, OEM_MISSION_NAME); + Current_mission->descent_version = 2; + Current_mission->anarchy_only_flag = 0; + N_secret_levels = 2; Last_level = 8; @@ -370,12 +367,14 @@ int read_mission_file(char *filename,int count,int location) void add_d1_builtin_mission_to_list(int *count) { + int size; + if (!cfexist("descent.hog")) return; - D1_Builtin_mission_hogsize = cfile_size("descent.hog"); + size = cfile_size("descent.hog"); - switch (D1_Builtin_mission_hogsize) { + switch (size) { case D1_SHAREWARE_MISSION_HOGSIZE: case D1_SHAREWARE_10_MISSION_HOGSIZE: case D1_MAC_SHARE_MISSION_HOGSIZE: @@ -390,7 +389,7 @@ void add_d1_builtin_mission_to_list(int *count) Mission_list[*count].anarchy_only_flag = 0; break; default: - Warning("Unknown D1 hogsize %d\n", D1_Builtin_mission_hogsize); + Warning("Unknown D1 hogsize %d\n", size); Int3(); // fall through case D1_MISSION_HOGSIZE: @@ -402,20 +401,20 @@ void add_d1_builtin_mission_to_list(int *count) break; } - strcpy(D1_Builtin_mission_filename, Mission_list[*count].filename); Mission_list[*count].descent_version = 1; Mission_list[*count].anarchy_only_flag = 0; ++(*count); } -void add_builtin_mission_to_list(int *count) +void add_builtin_mission_to_list(int *count, char *name) { - Builtin_mission_hogsize = cfile_size("descent2.hog"); - if (Builtin_mission_hogsize == -1) - Builtin_mission_hogsize = cfile_size("d2demo.hog"); + int size = cfile_size("descent2.hog"); + + if (size == -1) + size = cfile_size("d2demo.hog"); - switch (Builtin_mission_hogsize) { + switch (size) { case SHAREWARE_MISSION_HOGSIZE: case MAC_SHARE_MISSION_HOGSIZE: strcpy(Mission_list[*count].filename,SHAREWARE_MISSION_FILENAME); @@ -428,7 +427,7 @@ void add_builtin_mission_to_list(int *count) Mission_list[*count].anarchy_only_flag = 0; break; default: - Warning("Unknown hogsize %d, trying %s\n", Builtin_mission_hogsize, FULL_MISSION_FILENAME ".mn2"); + Warning("Unknown hogsize %d, trying %s\n", size, FULL_MISSION_FILENAME ".mn2"); Int3(); //fall through case FULL_MISSION_HOGSIZE: case FULL_10_MISSION_HOGSIZE: @@ -437,7 +436,8 @@ void add_builtin_mission_to_list(int *count) Error("Could not find required mission file <%s>", FULL_MISSION_FILENAME ".mn2"); } - strcpy(Builtin_mission_filename, Mission_list[*count].filename); + strcpy(name, Mission_list[*count].filename); + Mission_list[*count].builtin_hogsize = size; Mission_list[*count].descent_version = 2; Mission_list[*count].anarchy_only_flag = 0; ++(*count); @@ -484,6 +484,14 @@ void promote (char * mission_name, int * top_place, int num_missions) } } +void free_mission(void) +{ + // May become more complex with the editor + if (Current_mission) { + d_free(Current_mission); + } +} + //fills in the global list of missions. Returns the number of missions @@ -498,6 +506,7 @@ int build_mission_list(int anarchy_mode) static int num_missions=-1; int count = 0; int top_place; + char builtin_mission_filename[FILENAME_LEN]; //now search for levels on disk @@ -513,7 +522,7 @@ int build_mission_list(int anarchy_mode) //@@ return num_missions; //@@ } - add_builtin_mission_to_list(&count); //read built-in first + add_builtin_mission_to_list(&count, builtin_mission_filename); //read built-in first add_d1_builtin_mission_to_list(&count); add_missions_to_list(MISSION_DIR "*.mn2", &count, anarchy_mode); add_missions_to_list(MISSION_DIR "*.msn", &count, anarchy_mode); @@ -532,9 +541,7 @@ int build_mission_list(int anarchy_mode) // to top of mission list top_place = 0; promote("descent", &top_place, count); // original descent 1 mission - D1_Builtin_mission_num = top_place - 1; - promote(Builtin_mission_filename, &top_place, count); // d2 or d2demo - Builtin_mission_num = top_place - 1; + promote(builtin_mission_filename, &top_place, count); // d2 or d2demo promote("d2x", &top_place, count); // vertigo if (count > top_place) @@ -554,6 +561,8 @@ int build_mission_list(int anarchy_mode) num_missions = count; + atexit(free_mission); + return count; } @@ -568,35 +577,31 @@ int load_mission(int mission_num) { CFILE *mfile; char buf[80], *v; - int found_hogfile; + int found_hogfile; int enhanced_mission = 0; - if (mission_num == D1_Builtin_mission_num) { - cfile_use_descent1_hogfile("descent.hog"); - switch (D1_Builtin_mission_hogsize) { - default: - Int3(); // fall through - case D1_MISSION_HOGSIZE: - case D1_10_MISSION_HOGSIZE: - case D1_MAC_MISSION_HOGSIZE: - case D1_OEM_MISSION_HOGSIZE: - case D1_OEM_10_MISSION_HOGSIZE: - case D1_SHAREWARE_MISSION_HOGSIZE: - case D1_SHAREWARE_10_MISSION_HOGSIZE: - case D1_MAC_SHARE_MISSION_HOGSIZE: - return load_mission_d1(mission_num); - break; - } - } + if (Current_mission) + free_mission(); + Current_mission = d_malloc(sizeof(Mission)); + if (!Current_mission) return 0; + *(mle *) Current_mission = Mission_list[mission_num]; + + // for Descent 1 missions, load descent.hog + if (EMULATING_D1) { + if (!cfile_use_descent1_hogfile("descent.hog")) + Warning("descent.hog not available, this mission may be missing some files required for briefings and exit sequence\n"); + if (!stricmp(Current_mission_filename, D1_MISSION_FILENAME)) + return load_mission_d1(); + } - if (mission_num == Builtin_mission_num) { - switch (Builtin_mission_hogsize) { + if (PLAYING_BUILTIN_MISSION) { + switch (Current_mission->builtin_hogsize) { case SHAREWARE_MISSION_HOGSIZE: case MAC_SHARE_MISSION_HOGSIZE: - return load_mission_shareware(mission_num); + return load_mission_shareware(); break; case OEM_MISSION_HOGSIZE: - return load_mission_oem(mission_num); + return load_mission_oem(); break; default: Int3(); // fall through @@ -606,11 +611,9 @@ int load_mission(int mission_num) // continue on... (use d2.mn2 from hogfile) break; } - } - - Current_mission_num = mission_num; + } - mprintf(( 0, "Loading mission %d\n", mission_num )); + mprintf(( 0, "Loading mission %s\n", Current_mission_filename )); //read mission from file @@ -635,32 +638,27 @@ int load_mission(int mission_num) mfile = cfopen(buf,"rb"); if (mfile == NULL) { - Current_mission_num = -1; + free_mission(); return 0; //error! } - //for non-builtin missions, load HOG - if (strcmp(Mission_list[mission_num].filename, Builtin_mission_filename)) { - - strcpy(buf+strlen(buf)-4,".hog"); //change extension + //for non-builtin missions, load HOG + if (!PLAYING_BUILTIN_MISSION) { - found_hogfile = cfile_use_alternate_hogfile(buf); + strcpy(buf+strlen(buf)-4,".hog"); //change extension - #ifdef RELEASE //for release, require mission to be in hogfile - if (! found_hogfile) { - cfclose(mfile); - Current_mission_num = -1; - return 0; - } - #endif + found_hogfile = cfile_use_alternate_hogfile(buf); - // for Descent 1 missions, load descent.hog - if (Mission_list[mission_num].descent_version == 1 && strcmp(buf, "descent.hog")) - if (!cfile_use_descent1_hogfile("descent.hog")) - Warning("descent.hog not available, this mission may be missing some files required for briefings and exit sequence\n"); - } +#ifdef RELEASE //for release, require mission to be in hogfile + if (! found_hogfile) { + cfclose(mfile); + free_mission(); + return 0; + } +#endif + } - //init vars + //init vars Last_level = 0; Last_secret_level = 0; Briefing_text_filename[0] = 0; @@ -763,13 +761,10 @@ int load_mission(int mission_num) cfclose(mfile); if (Last_level <= 0) { - Current_mission_num = -1; //no valid mission loaded + free_mission(); //no valid mission loaded return 0; } - Current_mission_filename = Mission_list[Current_mission_num].filename; - Current_mission_longname = Mission_list[Current_mission_num].mission_name; - if (enhanced_mission) { char t[50]; extern void bm_read_extra_robots(); diff --git a/main/mission.h b/main/mission.h index 4b9f41ea..d255de50 100644 --- a/main/mission.h +++ b/main/mission.h @@ -1,4 +1,4 @@ -/* $Id: mission.h,v 1.21 2004-10-23 19:39:35 schaffner Exp $ */ +/* $Id: mission.h,v 1.22 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -55,57 +55,68 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define FULL_10_MISSION_HOGSIZE 7107354 // v1.0 #define MAC_FULL_MISSION_HOGSIZE 7110007 // v1.1 - 1.2 -//mission list entry -typedef struct mle { - char filename[9]; // path and filename without extension - char mission_name[MISSION_NAME_LEN+1]; - ubyte anarchy_only_flag; // if true, mission is anarchy only - ubyte location; // see defines below - ubyte descent_version; // descent 1 or descent 2? -} mle; - -//values that describe where a mission is located -#define ML_CURDIR 0 -#define ML_MISSIONDIR 1 -#define ML_CDROM 2 - //where the missions go -#ifndef EDITOR +#if 1 // ndef EDITOR #define MISSION_DIR "missions/" #else #define MISSION_DIR "./" #endif -extern mle Mission_list[MAX_MISSIONS]; - -extern int Current_mission_num, Builtin_mission_num; -extern char *Current_mission_filename,*Current_mission_longname; -extern char Builtin_mission_filename[9]; -extern int Builtin_mission_hogsize; - -#define is_SHAREWARE (Builtin_mission_hogsize == SHAREWARE_MISSION_HOGSIZE) -#define is_MAC_SHARE (Builtin_mission_hogsize == MAC_SHARE_MISSION_HOGSIZE) -#define is_D2_OEM (Builtin_mission_hogsize == OEM_MISSION_HOGSIZE) - -#define PLAYING_BUILTIN_MISSION (Current_mission_num == Builtin_mission_num) -#define EMULATING_D1 (Mission_list[Current_mission_num].descent_version == 1) -#define ANARCHY_ONLY_MISSION (Mission_list[Current_mission_num].anarchy_only_flag == 1) - -//arrays of name of the level files -extern char Level_names[MAX_LEVELS_PER_MISSION][FILENAME_LEN]; -extern char Secret_level_names[MAX_SECRET_LEVELS_PER_MISSION][FILENAME_LEN]; - -//fills in the global list of missions. Returns the number of missions -//in the list. If anarchy_mode is set, then also add anarchy-only missions. -//if there is only one mission, this function will call load_mission on it. -int build_mission_list(int anarchy_mode); - -//loads the named mission if exists. +typedef struct { + char mission_name[MISSION_NAME_LEN+1]; + char filename[9]; // filename + ubyte descent_version; // descent 1 or descent 2? + bool anarchy_only_flag; // if true, mission is only for anarchy + int builtin_hogsize; // the size of the hogfile for a builtin mission, and 0 for an add-on mission + char briefing_text_filename[FILENAME_LEN]; // name of briefing file + char ending_text_filename[FILENAME_LEN]; // name of ending file + ubyte last_level; + sbyte last_secret_level; + ubyte n_secret_levels; + ubyte secret_level_table[MAX_SECRET_LEVELS_PER_MISSION]; // originating level no for each secret level + // arrays of names of the level files + char level_names[MAX_LEVELS_PER_MISSION][FILENAME_LEN]; + char secret_level_names[MAX_SECRET_LEVELS_PER_MISSION][FILENAME_LEN]; +#if 0 //def EDITOR Support for multiple levels, briefings etc open at once + Window window; + Window attributes;// Window for changing them + ubyte enhanced; + void *briefing; + void *ending; + Level *level[MAX_LEVELS_PER_MISSION]; + Level *secLevel[MAX_SECRET_LEVELS_PER_MISSION]; + void *others[MAX_HOGFILES]; + char Other_file_names[MAX_HOGFILES][FILENAME_LEN]; +#endif +} Mission; + +extern Mission *Current_mission; // current mission + +#define Current_mission_longname Current_mission->mission_name +#define Current_mission_filename Current_mission->filename +#define Briefing_text_filename Current_mission->briefing_text_filename +#define Ending_text_filename Current_mission->ending_text_filename +#define Last_level Current_mission->last_level +#define Last_secret_level Current_mission->last_secret_level +#define N_secret_levels Current_mission->n_secret_levels +#define Secret_level_table Current_mission->secret_level_table +#define Level_names Current_mission->level_names +#define Secret_level_names Current_mission->secret_level_names + +#define is_SHAREWARE (Current_mission->builtin_hogsize == SHAREWARE_MISSION_HOGSIZE) +#define is_MAC_SHARE (Current_mission->builtin_hogsize == MAC_SHARE_MISSION_HOGSIZE) +#define is_D2_OEM (Current_mission->builtin_hogsize == OEM_MISSION_HOGSIZE) + +#define PLAYING_BUILTIN_MISSION (Current_mission->builtin_hogsize != 0) +#define EMULATING_D1 (Current_mission->descent_version == 1) +#define ANARCHY_ONLY_MISSION (Current_mission->anarchy_only_flag == 1) + +//loads the named mission if it exists. //Returns true if mission loaded ok, else false. -int load_mission_by_name(char *mission_name); +int load_mission_by_name (char *mission_name); //Handles creating and selecting from the mission list. //Returns 1 if a mission was loaded. -int select_mission(int anarchy_mode, char *message); +int select_mission (int anarchy_mode, char *message); #endif diff --git a/main/titles.c b/main/titles.c index 9d559123..b64fcd51 100644 --- a/main/titles.c +++ b/main/titles.c @@ -1,4 +1,4 @@ -/* $Id: titles.c,v 1.32 2004-10-23 17:42:13 schaffner Exp $ */ +/* $Id: titles.c,v 1.33 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -86,10 +86,6 @@ char RobotPlaying=0; #define MAX_BRIEFING_COLORS 7 //End D1X modification -// Descent 1 briefings -char Ending_text_filename[13] = "endreg.txt"; -char Briefing_text_filename[13] = "briefing.txt"; - #define SHAREWARE_ENDING_FILENAME "ending.tex" // Can be set by -noscreens command line option. Causes bypassing of all briefing screens. diff --git a/main/titles.h b/main/titles.h index 76e8058f..e01c20d9 100644 --- a/main/titles.h +++ b/main/titles.h @@ -1,4 +1,4 @@ -/* $Id: titles.h,v 1.4 2004-08-28 23:17:45 schaffner Exp $ */ +/* $Id: titles.h,v 1.5 2004-10-24 12:46:49 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -27,10 +27,6 @@ extern int Skip_briefing_screens; #define Skip_briefing_screens 0 #endif -// Descent 1 briefings -extern char Briefing_text_filename[13]; -extern char Ending_text_filename[13]; - extern int show_title_screen( char * filename, int allow_keys, int from_hog_only ); extern int show_briefing_screen( char * filename, int allow_keys ); extern void show_title_flick(char *name, int allow_keys ); -- 2.39.2