2006-03-20 16:43:15 +00:00
|
|
|
/*
|
|
|
|
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
|
|
|
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
|
|
|
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
|
|
|
|
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
|
|
|
|
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
|
|
|
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
|
|
|
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
|
|
|
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
|
|
|
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
|
|
|
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|
|
|
*/
|
2007-07-14 20:33:42 +00:00
|
|
|
|
|
|
|
/*
|
2006-03-20 16:43:15 +00:00
|
|
|
*
|
|
|
|
* main() for Inferno
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
static char copyright[] = "DESCENT COPYRIGHT (C) 1994,1995 PARALLAX SOFTWARE CORPORATION";
|
|
|
|
static char *__reference[2]={copyright,(char *)__reference};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2006-10-18 12:52:56 +00:00
|
|
|
#include <limits.h>
|
|
|
|
#include <SDL/SDL.h>
|
|
|
|
|
2008-04-24 14:27:54 +00:00
|
|
|
#if !defined(_MSC_VER) && !defined(macintosh)
|
2006-03-20 16:43:15 +00:00
|
|
|
#include <unistd.h>
|
|
|
|
#endif
|
2006-10-18 12:52:56 +00:00
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
#ifdef __MSDOS__
|
|
|
|
#include <time.h>
|
|
|
|
#endif
|
2006-10-18 12:52:56 +00:00
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
#ifdef _WIN32
|
2006-03-20 16:43:15 +00:00
|
|
|
#include <windows.h>
|
|
|
|
#endif
|
2006-10-18 12:52:56 +00:00
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
#if defined(_MSC_VER) && defined(_DEBUG)
|
|
|
|
#include <crtdbg.h>
|
|
|
|
#endif
|
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
#if !(defined(__APPLE__) && defined(__MACH__))
|
|
|
|
#include <physfs.h>
|
|
|
|
#else
|
|
|
|
#include <physfs/physfs.h>
|
|
|
|
#endif
|
|
|
|
|
2006-10-18 12:52:56 +00:00
|
|
|
#ifdef __MSDOS__
|
|
|
|
#include <conio.h>
|
|
|
|
#else
|
|
|
|
#define getch() getchar()
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef EDITOR
|
|
|
|
#include "editor/editor.h"
|
|
|
|
#include "editor/kdefs.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef QUICKSTART
|
|
|
|
#include "playsave.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef SCRIPT
|
|
|
|
#include "script.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef OGL
|
|
|
|
#include "ogl_init.h"
|
|
|
|
#endif
|
2006-03-20 16:43:15 +00:00
|
|
|
|
|
|
|
#include "gr.h"
|
|
|
|
#include "3d.h"
|
|
|
|
#include "inferno.h"
|
|
|
|
#include "error.h"
|
|
|
|
#include "game.h"
|
2006-10-18 12:52:56 +00:00
|
|
|
#include "segment.h" //for Side_to_verts
|
2006-03-20 16:43:15 +00:00
|
|
|
#include "u_mem.h"
|
|
|
|
#include "texmerge.h"
|
|
|
|
#include "menu.h"
|
|
|
|
#include "digi.h"
|
|
|
|
#include "args.h"
|
|
|
|
#include "titles.h"
|
|
|
|
#include "text.h"
|
|
|
|
#include "network.h"
|
|
|
|
#include "gamefont.h"
|
|
|
|
#include "kconfig.h"
|
|
|
|
#include "newmenu.h"
|
|
|
|
#include "desc_id.h"
|
|
|
|
#include "config.h"
|
|
|
|
#include "multi.h"
|
|
|
|
#include "songs.h"
|
|
|
|
#include "cfile.h"
|
|
|
|
#include "gameseq.h"
|
|
|
|
#include "timer.h"
|
|
|
|
#include "key.h"
|
|
|
|
#include "palette.h"
|
|
|
|
#include "bm.h"
|
|
|
|
#include "screens.h"
|
|
|
|
#include "hudmsg.h"
|
|
|
|
#include "playsave.h"
|
|
|
|
#include "gauges.h"
|
|
|
|
#include "physics.h"
|
|
|
|
#include "strutil.h"
|
|
|
|
#include "altsound.h"
|
|
|
|
#include "../texmap/scanline.h" //for select_tmap -MM
|
|
|
|
#include "vers_id.h"
|
2007-02-10 23:19:21 +00:00
|
|
|
#include "collide.h"
|
2007-04-04 17:17:53 +00:00
|
|
|
#include "newdemo.h"
|
2007-07-14 22:36:04 +00:00
|
|
|
#include "joy.h"
|
2008-04-06 20:23:28 +00:00
|
|
|
#include "console.h"
|
2006-03-20 16:43:15 +00:00
|
|
|
|
|
|
|
char desc_id_exit_num = 0;
|
2006-10-18 12:52:56 +00:00
|
|
|
int Function_mode=FMODE_MENU; //game or editor?
|
|
|
|
int Screen_mode=-1; //game screen or editor screen?
|
2006-03-20 16:43:15 +00:00
|
|
|
int descent_critical_error = 0;
|
|
|
|
unsigned int descent_critical_deverror = 0;
|
|
|
|
unsigned int descent_critical_errcode = 0;
|
2008-03-16 08:11:08 +00:00
|
|
|
|
|
|
|
int HiresGFXAvailable = 0;
|
|
|
|
|
2007-07-18 22:23:06 +00:00
|
|
|
void mem_init(void);
|
2008-11-14 16:56:40 +00:00
|
|
|
extern void arch_init(void);
|
2006-03-20 16:43:15 +00:00
|
|
|
|
|
|
|
#ifdef EDITOR
|
|
|
|
int Inferno_is_800x600_available = 0;
|
|
|
|
#endif
|
|
|
|
|
2006-10-18 12:52:56 +00:00
|
|
|
void show_commandline_help()
|
|
|
|
{
|
|
|
|
printf( "\n System Options:\n\n");
|
|
|
|
printf( " -fps %s\n", "Enable FPS indicator by default");
|
2008-04-21 18:39:49 +00:00
|
|
|
printf( " -nonicefps %s\n", "Don't free CPU-cycles");
|
2008-09-30 00:07:07 +00:00
|
|
|
printf( " -maxfps <n> %s\n", "Set maximum framerate (1-200)");
|
2008-02-24 14:41:27 +00:00
|
|
|
printf( " -hogdir <s> %s\n", "Set shared data directory to <dir>");
|
|
|
|
printf( " -nohogdir %s\n", "Don't try to use shared data directory");
|
|
|
|
printf( " -use_players_dir %s\n", "Put player files and saved games in Players subdirectory");
|
2006-10-18 12:52:56 +00:00
|
|
|
printf( " -lowmem %s\n", "Lowers animation detail for better performance with low memory");
|
2007-06-14 20:51:52 +00:00
|
|
|
printf( " -legacyhomers %s\n", "Activate original homing missiles (FPS and physics dependent)");
|
2007-07-15 21:22:07 +00:00
|
|
|
printf( " -pilot <s> %s\n", "Select this pilot-file automatically");
|
2007-07-14 20:33:42 +00:00
|
|
|
printf( " -autodemo %s\n", "Start in demo mode");
|
2007-10-06 14:50:19 +00:00
|
|
|
printf( " -notitles %s\n", "Skip title screens");
|
2007-07-15 21:22:07 +00:00
|
|
|
printf( " -window %s\n", "Run the game in a window");
|
2008-06-01 12:53:03 +00:00
|
|
|
printf( " -noredundancy %s\n", "Do not send messages when picking up redundant items");
|
2006-10-18 12:52:56 +00:00
|
|
|
|
|
|
|
printf( "\n Controls:\n\n");
|
2007-07-14 22:36:04 +00:00
|
|
|
printf( " -nomouse %s\n", "Deactivate mouse");
|
|
|
|
printf( " -nojoystick %s\n", "Deactivate joystick");
|
2006-10-18 12:52:56 +00:00
|
|
|
printf( " -mouselook %s\n", "Activate mouselook. Works in singleplayer only");
|
|
|
|
printf( " -grabmouse %s\n", "Keeps the mouse from wandering out of the window");
|
|
|
|
|
|
|
|
printf( "\n Sound:\n\n");
|
2007-07-14 22:36:04 +00:00
|
|
|
printf( " -nosound %s\n", "Disables sound output");
|
|
|
|
printf( " -nomusic %s\n", "Disables music output");
|
2007-10-13 23:49:07 +00:00
|
|
|
#ifdef USE_SDLMIXER
|
2008-05-01 21:40:34 +00:00
|
|
|
printf( " -nosdlmixer %s\n", "Disable Sound output via SDL_mixer");
|
2007-10-13 23:49:07 +00:00
|
|
|
printf( " -music_ext <s> %s\n", "Play music files with extension <s> (i.e. mp3, ogg)");
|
|
|
|
#endif // USE SDLMIXER
|
2006-10-18 12:52:56 +00:00
|
|
|
|
|
|
|
printf( "\n Graphics:\n\n");
|
2008-02-24 14:41:27 +00:00
|
|
|
printf( " -lowresfont %s\n", "Force to use LowRes fonts");
|
2006-10-18 12:52:56 +00:00
|
|
|
#ifdef OGL
|
2007-10-18 14:44:02 +00:00
|
|
|
printf( " -gl_fixedfont %s\n", "Do not scale fonts to current resolution");
|
2006-10-18 12:52:56 +00:00
|
|
|
#endif // OGL
|
|
|
|
|
|
|
|
#ifdef NETWORK
|
|
|
|
printf( "\n Multiplayer:\n\n");
|
2007-09-20 14:22:57 +00:00
|
|
|
printf( " -mprofile %s\n", "Enable multiplayer game profiles");
|
2007-01-26 11:15:18 +00:00
|
|
|
printf( " -playermessages %s\n", "View only messages from other players in multi - overrides -noredundancy");
|
2007-07-16 02:34:51 +00:00
|
|
|
printf( " -ipxnetwork <n> %s\n", "Use IPX network number <n>");
|
2007-07-15 21:22:07 +00:00
|
|
|
printf( " -ip_baseport <n> %s\n", "Use <n> as offset from normal port (allows multiple instances of d1x to be run on a single computer)");
|
2008-05-07 14:02:01 +00:00
|
|
|
printf( " -ip_relay %s\n", "Relay players with closed port over host (increases traffic and lag)");
|
2008-10-20 12:34:45 +00:00
|
|
|
printf( " -ip_hostaddr <n> %s\n", "Use <n> as host ip address");
|
2006-10-18 12:52:56 +00:00
|
|
|
#endif // NETWORK
|
|
|
|
|
2007-07-18 22:23:06 +00:00
|
|
|
#ifdef EDITOR
|
|
|
|
printf( "\n Editor:\n\n");
|
|
|
|
printf( " -nobm %s\n", "Don't load BITMAPS.TBL and BITMAPS.BIN - use internal data");
|
|
|
|
#endif // EDITOR
|
|
|
|
|
2008-10-30 10:45:13 +00:00
|
|
|
printf( "\n Debug (use only if you know what you're doing):\n\n");
|
2008-04-06 20:23:28 +00:00
|
|
|
printf( " -debug %s\n", "Enable very verbose output");
|
2007-07-18 20:13:17 +00:00
|
|
|
printf( " -verbose %s\n", "Shows initialization steps for tech support");
|
2006-10-18 12:52:56 +00:00
|
|
|
printf( " -norun %s\n", "Bail out after initialization");
|
2007-07-18 20:13:17 +00:00
|
|
|
printf( " -renderstats %s\n", "Enable renderstats info by default");
|
|
|
|
printf( " -text <s> %s\n", "Specify alternate .tex file");
|
2007-07-15 21:22:07 +00:00
|
|
|
printf( " -tmap <s> %s\n", "Select texmapper to use (c,fp,quad,i386,pent,ppro)");
|
2007-07-18 22:23:06 +00:00
|
|
|
printf( " -showmeminfo %s\n", "Show memory statistics");
|
2007-07-22 01:34:00 +00:00
|
|
|
printf( " -nodoublebuffer %s\n", "Disable Doublebuffering");
|
2007-07-22 20:40:39 +00:00
|
|
|
printf( " -bigpig %s\n", "Use uncompressed RLE bitmaps");
|
2007-07-18 20:13:17 +00:00
|
|
|
#ifdef OGL
|
|
|
|
printf( " -gl_oldtexmerge %s\n", "Use old texmerge, uses more ram, but _might_ be a bit faster");
|
2007-07-22 20:40:39 +00:00
|
|
|
printf( " -gl_16bpp %s\n", "Use 16Bpp Color Depth");
|
2007-07-23 18:13:49 +00:00
|
|
|
printf( " -gl_intensity4_ok <n> %s\n", "Override DbgGlIntensity4Ok - Default: 1");
|
|
|
|
printf( " -gl_luminance4_alpha4_ok <n> %s\n", "Override DbgGlLuminance4Alpha4Ok - Default: 1");
|
|
|
|
printf( " -gl_rgba2_ok <n> %s\n", "Override DbgGlRGBA2Ok - Default: 1");
|
|
|
|
printf( " -gl_readpixels_ok <n> %s\n", "Override DbgGlReadPixelsOk - Default: 1");
|
|
|
|
printf( " -gl_gettexlevelparam_ok <n> %s\n", "Override DbgGlGetTexLevelParamOk - Default: 1");
|
|
|
|
#else
|
2008-10-28 17:04:35 +00:00
|
|
|
printf( " -hwsurface %s\n", "Use SDL HW Surface");
|
|
|
|
printf( " -asyncblit %s\n", "Use queued blits over SDL. Can speed up rendering");
|
2006-10-18 12:52:56 +00:00
|
|
|
#endif // OGL
|
|
|
|
|
|
|
|
printf( "\n Help:\n\n");
|
|
|
|
printf( " -help, -h, -?, ? %s\n", "View this help screen");
|
|
|
|
printf( "\n\n");
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|
|
|
|
|
2008-04-08 12:51:21 +00:00
|
|
|
void error_messagebox(char *s)
|
|
|
|
{
|
|
|
|
error_init(NULL, NULL); // don't try to show a messagebox if there's an error with showing one!
|
|
|
|
nm_messagebox( TXT_SORRY, 1, TXT_OK, s );
|
|
|
|
}
|
|
|
|
|
2008-04-02 12:13:21 +00:00
|
|
|
int MacHog = 0; // using a Mac hogfile?
|
2007-08-27 23:01:34 +00:00
|
|
|
#define PROGNAME argv[0]
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
int main(int argc,char *argv[])
|
2006-03-20 16:43:15 +00:00
|
|
|
{
|
2007-07-18 22:23:06 +00:00
|
|
|
mem_init();
|
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
error_init(NULL, NULL);
|
|
|
|
PHYSFSX_init(argc, argv);
|
2008-04-06 20:23:28 +00:00
|
|
|
con_init(); // Initialise the console
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2006-10-18 12:52:56 +00:00
|
|
|
setbuf(stdout, NULL); // unbuffered output via printf
|
2006-10-15 23:35:30 +00:00
|
|
|
|
|
|
|
ReadConfigFile();
|
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
if (! cfile_init("descent.hog", 1))
|
|
|
|
Error("Could not find a valid hog file (descent.hog)\nPossible locations are:\n"
|
|
|
|
#if defined(__unix__) && !defined(__APPLE__)
|
|
|
|
"\t$HOME/.d1x-rebirth\n"
|
|
|
|
"\t" SHAREPATH "\n"
|
2007-01-19 14:27:21 +00:00
|
|
|
#else
|
2008-01-23 17:25:09 +00:00
|
|
|
"\tDirectory containing D1X\n"
|
2007-01-19 14:27:21 +00:00
|
|
|
#endif
|
2008-01-23 17:25:09 +00:00
|
|
|
"\tIn a subdirectory called 'Data'\n"
|
|
|
|
"Or use the -hogdir option to specify an alternate location.");
|
2008-02-24 14:41:27 +00:00
|
|
|
|
2008-04-02 12:13:21 +00:00
|
|
|
switch (cfile_size("descent.hog"))
|
|
|
|
{
|
|
|
|
case D1_MAC_SHARE_MISSION_HOGSIZE:
|
|
|
|
case D1_MAC_MISSION_HOGSIZE:
|
|
|
|
MacHog = 1; // used for fonts and the Automap
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
load_text();
|
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf(CON_NORMAL,DESCENT_VERSION "\n"
|
2006-03-20 16:43:15 +00:00
|
|
|
"This is a MODIFIED version of DESCENT which is NOT supported by Parallax or\n"
|
2007-01-19 14:27:21 +00:00
|
|
|
"Interplay. Use at your own risk! Copyright (c) 2005 Christian Beckhaeuser\n");
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf(CON_NORMAL,"Based on: DESCENT %s\n", VERSION_NAME);
|
|
|
|
con_printf(CON_NORMAL,"%s\n%s\n",TXT_COPYRIGHT,TXT_TRADEMARK);
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2007-07-18 20:13:17 +00:00
|
|
|
if (GameArg.SysShowCmdHelp) {
|
2006-10-18 12:52:56 +00:00
|
|
|
show_commandline_help();
|
2006-03-20 16:43:15 +00:00
|
|
|
set_exit_message("");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2007-08-27 23:01:34 +00:00
|
|
|
printf("\nType %s -help' for a list of command-line options.\n", PROGNAME);
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2007-07-18 20:13:17 +00:00
|
|
|
select_tmap(GameArg.DbgTexMap);
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2007-07-18 20:13:17 +00:00
|
|
|
if (GameArg.DbgVerbose)
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf(CON_VERBOSE,"%s", TXT_VERBOSE_1);
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2008-01-23 17:25:09 +00:00
|
|
|
{
|
|
|
|
char **i, **list;
|
|
|
|
|
|
|
|
list = PHYSFS_getSearchPath();
|
|
|
|
for (i = list; *i != NULL; i++)
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf(CON_VERBOSE, "PHYSFS: [%s] is in the search path.\n", *i);
|
2008-01-23 17:25:09 +00:00
|
|
|
PHYSFS_freeList(list);
|
|
|
|
|
|
|
|
list = PHYSFS_enumerateFiles("");
|
|
|
|
for (i = list; *i != NULL; i++)
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf(CON_DEBUG, "PHYSFS: * We've got [%s].\n", *i);
|
2008-01-23 17:25:09 +00:00
|
|
|
PHYSFS_freeList(list);
|
|
|
|
}
|
|
|
|
|
2008-06-01 22:22:34 +00:00
|
|
|
if (cfile_init("d1xrdata.zip", 0))
|
|
|
|
con_printf(CON_NORMAL, "Added d1xrdata.zip for additional content\n");
|
2008-04-06 20:23:28 +00:00
|
|
|
|
2008-11-14 16:56:40 +00:00
|
|
|
arch_init();
|
2006-12-12 21:47:17 +00:00
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
#ifdef _WIN32
|
|
|
|
freopen( "CON", "w", stdout );
|
|
|
|
freopen( "CON", "w", stderr );
|
|
|
|
#endif
|
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
#ifdef NETWORK
|
|
|
|
control_invul_time = 0;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Load the palette stuff. Returns non-zero if error.
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf( CON_DEBUG, "Going into graphics mode..." );
|
2007-07-26 23:56:00 +00:00
|
|
|
gr_set_mode(Game_screen_mode);
|
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf( CON_DEBUG, "\nInitializing palette system..." );
|
2006-03-20 16:43:15 +00:00
|
|
|
gr_use_palette_table( "PALETTE.256" );
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf( CON_DEBUG, "\nInitializing font system..." );
|
2006-08-13 15:52:49 +00:00
|
|
|
gamefont_init(); // must load after palette data loaded.
|
2006-03-20 16:43:15 +00:00
|
|
|
songs_play_song( SONG_TITLE, 1 );
|
|
|
|
|
2008-02-11 12:12:57 +00:00
|
|
|
gamedata_init();
|
2006-03-20 16:43:15 +00:00
|
|
|
|
2007-07-18 20:13:17 +00:00
|
|
|
if (GameArg.DbgNoRun)
|
2006-03-20 16:43:15 +00:00
|
|
|
return(0);
|
|
|
|
|
2008-04-08 12:51:21 +00:00
|
|
|
error_init(error_messagebox, NULL);
|
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf( CON_DEBUG, "\nInitializing texture caching system..." );
|
2007-07-14 20:33:42 +00:00
|
|
|
texmerge_init( 10 ); // 10 cache bitmaps
|
|
|
|
|
2008-04-06 20:23:28 +00:00
|
|
|
con_printf( CON_DEBUG, "\nRunning game...\n" );
|
2006-03-20 16:43:15 +00:00
|
|
|
set_screen_mode(SCREEN_MENU);
|
|
|
|
|
|
|
|
init_game();
|
|
|
|
|
|
|
|
Players[Player_num].callsign[0] = '\0';
|
2007-04-04 10:24:03 +00:00
|
|
|
|
2007-12-23 00:51:27 +00:00
|
|
|
if (!GameArg.SysNoTitles)
|
|
|
|
{
|
2008-02-21 10:32:34 +00:00
|
|
|
char publisher[16];
|
|
|
|
|
|
|
|
strcpy(publisher, "macplay.pcx"); // Mac Shareware
|
|
|
|
if (!PHYSFS_exists(publisher))
|
|
|
|
strcpy(publisher, "mplaycd.pcx"); // Mac Registered
|
|
|
|
if (!PHYSFS_exists(publisher))
|
|
|
|
strcpy(publisher, "iplogo1.pcx"); // PC. Only down here because it's lowres ;-)
|
|
|
|
|
|
|
|
show_title_screen( publisher, 1 );
|
2008-03-25 12:25:19 +00:00
|
|
|
show_title_screen( (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("logoh.pcx"))?"logoh.pcx":"logo.pcx"), 1 );
|
|
|
|
show_title_screen( (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("descenth.pcx"))?"descenth.pcx":"descent.pcx"), 1 );
|
2007-12-23 00:51:27 +00:00
|
|
|
}
|
|
|
|
|
2007-04-04 10:24:03 +00:00
|
|
|
key_flush();
|
2007-07-14 20:33:42 +00:00
|
|
|
|
|
|
|
if(GameArg.SysPilot)
|
2007-04-04 10:24:03 +00:00
|
|
|
{
|
2007-10-18 14:44:02 +00:00
|
|
|
char filename[32] = "";
|
2007-04-04 10:24:03 +00:00
|
|
|
int j;
|
2007-09-28 15:14:09 +00:00
|
|
|
|
|
|
|
if (GameArg.SysUsePlayersDir)
|
|
|
|
strcpy(filename, "Players/");
|
2007-10-18 14:44:02 +00:00
|
|
|
strncat(filename, GameArg.SysPilot, 12);
|
|
|
|
filename[8 + 12] = '\0'; // unfortunately strncat doesn't put the terminating 0 on the end if it reaches 'n'
|
|
|
|
for (j = GameArg.SysUsePlayersDir? 8 : 0; filename[j] != '\0'; j++) {
|
2007-04-04 10:24:03 +00:00
|
|
|
switch (filename[j]) {
|
|
|
|
case ' ':
|
|
|
|
filename[j] = '\0';
|
2006-10-10 09:53:25 +00:00
|
|
|
}
|
2006-10-18 12:52:56 +00:00
|
|
|
}
|
2007-05-10 09:34:27 +00:00
|
|
|
if(!strstr(filename,".plr")) // if player hasn't specified .plr extension in argument, add it
|
|
|
|
strcat(filename,".plr");
|
2007-10-18 14:44:02 +00:00
|
|
|
if(cfexist(filename))
|
2007-04-04 10:24:03 +00:00
|
|
|
{
|
|
|
|
strcpy(strstr(filename,".plr"),"\0");
|
2007-10-18 14:44:02 +00:00
|
|
|
strcpy(Players[Player_num].callsign, GameArg.SysUsePlayersDir? &filename[8] : filename);
|
2007-04-04 10:24:03 +00:00
|
|
|
read_player_file();
|
|
|
|
WriteConfigFile();
|
|
|
|
}
|
|
|
|
else //pilot doesn't exist. get pilot.
|
2007-10-18 14:44:02 +00:00
|
|
|
RegisterPlayer();
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|
2007-04-04 10:24:03 +00:00
|
|
|
else
|
2007-10-18 14:44:02 +00:00
|
|
|
RegisterPlayer();
|
|
|
|
|
2006-03-20 16:43:15 +00:00
|
|
|
|
|
|
|
Game_mode = GM_GAME_OVER;
|
|
|
|
|
|
|
|
while (Function_mode != FMODE_EXIT)
|
|
|
|
{
|
|
|
|
switch( Function_mode ) {
|
2008-04-06 20:23:28 +00:00
|
|
|
case FMODE_MENU:
|
|
|
|
DoMenu();
|
2006-03-20 16:43:15 +00:00
|
|
|
#ifdef EDITOR
|
2008-04-06 20:23:28 +00:00
|
|
|
if ( Function_mode == FMODE_EDITOR ) {
|
|
|
|
create_new_mine();
|
|
|
|
SetPlayerFromCurseg();
|
|
|
|
}
|
2007-04-04 10:24:03 +00:00
|
|
|
#endif
|
2006-03-20 16:43:15 +00:00
|
|
|
break;
|
2008-04-06 20:23:28 +00:00
|
|
|
case FMODE_GAME:
|
|
|
|
#ifdef EDITOR
|
|
|
|
keyd_editor_mode = 0;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
game();
|
|
|
|
|
|
|
|
if ( Function_mode == FMODE_MENU )
|
|
|
|
songs_play_song( SONG_TITLE, 1 );
|
|
|
|
break;
|
|
|
|
#ifdef EDITOR
|
|
|
|
case FMODE_EDITOR:
|
|
|
|
keyd_editor_mode = 1;
|
|
|
|
editor();
|
|
|
|
if ( Function_mode == FMODE_GAME ) {
|
|
|
|
Game_mode = GM_EDITOR;
|
|
|
|
editor_reset_stuff_on_level();
|
|
|
|
N_players = 1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
#endif
|
|
|
|
default:
|
|
|
|
Error("Invalid function mode %d",Function_mode);
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
WriteConfigFile();
|
2008-11-14 16:56:40 +00:00
|
|
|
#ifdef SHAREWARE
|
|
|
|
show_order_form();
|
2006-03-20 16:43:15 +00:00
|
|
|
#endif
|
|
|
|
|
2008-11-14 16:56:40 +00:00
|
|
|
con_printf( CON_DEBUG, "\nCleanup...\n" );
|
2008-04-08 12:51:21 +00:00
|
|
|
error_init(NULL, NULL); // clear error func (won't have newmenu stuff loaded)
|
2008-11-14 16:56:40 +00:00
|
|
|
close_game();
|
|
|
|
texmerge_close();
|
|
|
|
gamedata_close();
|
|
|
|
gamefont_close();
|
|
|
|
free_text();
|
|
|
|
args_exit();
|
2008-11-09 23:51:19 +00:00
|
|
|
newmenu_close();
|
2008-11-14 16:56:40 +00:00
|
|
|
free_mission();
|
2007-12-23 00:51:27 +00:00
|
|
|
|
2006-10-18 12:52:56 +00:00
|
|
|
return(0); //presumably successful exit
|
2006-03-20 16:43:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void quit_request()
|
|
|
|
{
|
2008-11-15 20:49:54 +00:00
|
|
|
set_warn_func(warn_printf);
|
2006-03-20 16:43:15 +00:00
|
|
|
exit(0);
|
|
|
|
}
|
2008-12-07 12:26:43 +00:00
|
|
|
|
|
|
|
void macintosh_quit()
|
|
|
|
{
|
|
|
|
Function_mode = FMODE_EXIT;
|
|
|
|
}
|