⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_main.c

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (!doomwaddir)	doomwaddir = ".";    // Commercial.    doom2wad = malloc(strlen(doomwaddir)+1+9+1);    sprintf(doom2wad, "%s/doom2.wad", doomwaddir);    // Retail.    doomuwad = malloc(strlen(doomwaddir)+1+8+1);    sprintf(doomuwad, "%s/doomu.wad", doomwaddir);        // Registered.    doomwad = malloc(strlen(doomwaddir)+1+8+1);    sprintf(doomwad, "%s/doom.wad", doomwaddir);        // Shareware.    doom1wad = malloc(strlen(doomwaddir)+1+9+1);    sprintf(doom1wad, "%s/doom1.wad", doomwaddir);     // Bug, dear Shawn.    // Insufficient malloc, caused spurious realloc errors.    plutoniawad = malloc(strlen(doomwaddir)+1+/*9*/12+1);    sprintf(plutoniawad, "%s/plutonia.wad", doomwaddir);    tntwad = malloc(strlen(doomwaddir)+1+9+1);    sprintf(tntwad, "%s/tnt.wad", doomwaddir);    // French stuff.    doom2fwad = malloc(strlen(doomwaddir)+1+10+1);    sprintf(doom2fwad, "%s/doom2f.wad", doomwaddir);    home = getenv("HOME");    if (!home)      home = ".";    sprintf(basedefault, "%s/.doomrc", home);    if (M_CheckParm ("-shdev"))    {	gamemode = shareware;	devparm = true;	D_AddFile (DEVDATA"doom1.wad");	D_AddFile (DEVMAPS"data_se/texture1.lmp");	D_AddFile (DEVMAPS"data_se/pnames.lmp");	strcpy (basedefault,DEVDATA"default.cfg");	return;    }    if (M_CheckParm ("-regdev"))    {	gamemode = registered;	devparm = true;	D_AddFile (DEVDATA"doom.wad");	D_AddFile (DEVMAPS"data_se/texture1.lmp");	D_AddFile (DEVMAPS"data_se/texture2.lmp");	D_AddFile (DEVMAPS"data_se/pnames.lmp");	strcpy (basedefault,DEVDATA"default.cfg");	return;    }    if (M_CheckParm ("-comdev"))    {	gamemode = commercial;	devparm = true;	/* I don't bother	if(plutonia)	    D_AddFile (DEVDATA"plutonia.wad");	else if(tnt)	    D_AddFile (DEVDATA"tnt.wad");	else*/	    D_AddFile (DEVDATA"doom2.wad");	    	D_AddFile (DEVMAPS"cdata/texture1.lmp");	D_AddFile (DEVMAPS"cdata/pnames.lmp");	strcpy (basedefault,DEVDATA"default.cfg");	return;    }    if ( !access (doom2fwad,R_OK) )    {	gamemode = commercial;	// C'est ridicule!	// Let's handle languages in config files, okay?	language = french;	printf("French version\n");	D_AddFile (doom2fwad);	return;    }    if ( !access (doom2wad,R_OK) )    {	gamemode = commercial;	D_AddFile (doom2wad);	return;    }    if ( !access (plutoniawad, R_OK ) )    {      gamemode = commercial;      D_AddFile (plutoniawad);      return;    }    if ( !access ( tntwad, R_OK ) )    {      gamemode = commercial;      D_AddFile (tntwad);      return;    }    if ( !access (doomuwad,R_OK) )    {      gamemode = retail;      D_AddFile (doomuwad);      return;    }    if ( !access (doomwad,R_OK) )    {      gamemode = registered;      D_AddFile (doomwad);      return;    }    if ( !access (doom1wad,R_OK) )    {      gamemode = shareware;      D_AddFile (doom1wad);      return;    }    printf("Game mode indeterminate.\n");    gamemode = indetermined;    // We don't abort. Let's see what the PWAD contains.    //exit(1);    //I_Error ("Game mode indeterminate\n");}//// Find a Response File//void FindResponseFile (void){    int             i;#define MAXARGVS        100	    for (i = 1;i < myargc;i++)	if (myargv[i][0] == '@')	{	    FILE *          handle;	    int             size;	    int             k;	    int             index;	    int             indexinfile;	    char    *infile;	    char    *file;	    char    *moreargs[20];	    char    *firstargv;				    // READ THE RESPONSE FILE INTO MEMORY	    handle = fopen (&myargv[i][1],"rb");	    if (!handle)	    {		printf ("\nNo such response file!");		exit(1);	    }	    printf("Found response file %s!\n",&myargv[i][1]);	    fseek (handle,0,SEEK_END);	    size = ftell(handle);	    fseek (handle,0,SEEK_SET);	    file = malloc (size);	    fread (file,size,1,handle);	    fclose (handle);				    // KEEP ALL CMDLINE ARGS FOLLOWING @RESPONSEFILE ARG	    for (index = 0,k = i+1; k < myargc; k++)		moreargs[index++] = myargv[k];				    firstargv = myargv[0];	    myargv = malloc(sizeof(char *)*MAXARGVS);	    memset(myargv,0,sizeof(char *)*MAXARGVS);	    myargv[0] = firstargv;				    infile = file;	    indexinfile = k = 0;	    indexinfile++;  // SKIP PAST ARGV[0] (KEEP IT)	    do	    {		myargv[indexinfile++] = infile+k;		while(k < size &&		      ((*(infile+k)>= ' '+1) && (*(infile+k)<='z')))		    k++;		*(infile+k) = 0;		while(k < size &&		      ((*(infile+k)<= ' ') || (*(infile+k)>'z')))		    k++;	    } while(k < size);				    for (k = 0;k < index;k++)		myargv[indexinfile++] = moreargs[k];	    myargc = indexinfile;		    // DISPLAY ARGS	    printf("%d command-line args:\n",myargc);	    for (k=1;k<myargc;k++)		printf("%s\n",myargv[k]);	    break;	}}//// D_DoomMain//void D_DoomMain (void){    int             p;    char                    file[256];    FindResponseFile ();	    IdentifyVersion ();	    setbuf (stdout, NULL);    modifiedgame = false;	    nomonsters = M_CheckParm ("-nomonsters");    respawnparm = M_CheckParm ("-respawn");    fastparm = M_CheckParm ("-fast");    devparm = M_CheckParm ("-devparm");    if (M_CheckParm ("-altdeath"))	deathmatch = 2;    else if (M_CheckParm ("-deathmatch"))	deathmatch = 1;    switch ( gamemode )    {      case retail:	sprintf (title,		 "                         "		 "The Ultimate DOOM Startup v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;      case shareware:	sprintf (title,		 "                            "		 "DOOM Shareware Startup v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;      case registered:	sprintf (title,		 "                            "		 "DOOM Registered Startup v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;      case commercial:	sprintf (title,		 "                         "		 "DOOM 2: Hell on Earth v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;/*FIXME       case pack_plut:	sprintf (title,		 "                   "		 "DOOM 2: Plutonia Experiment v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;      case pack_tnt:	sprintf (title,		 "                     "		 "DOOM 2: TNT - Evilution v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;*/      default:	sprintf (title,		 "                     "		 "Public DOOM - v%i.%i"		 "                           ",		 VERSION_NUM/100,VERSION_NUM%100);	break;    }        printf ("%s\n",title);    if (devparm)	printf(D_DEVSTR);        // turbo option    if ( (p=M_CheckParm ("-turbo")) )    {	int     scale = 200;	extern int forwardmove[2];	extern int sidemove[2];		if (p<myargc-1)	    scale = atoi (myargv[p+1]);	if (scale < 10)	    scale = 10;	if (scale > 400)	    scale = 400;	printf ("turbo scale: %i%%\n",scale);	forwardmove[0] = forwardmove[0]*scale/100;	forwardmove[1] = forwardmove[1]*scale/100;	sidemove[0] = sidemove[0]*scale/100;	sidemove[1] = sidemove[1]*scale/100;    }        // add any files specified on the command line with -file wadfile    // to the wad list    //    // convenience hack to allow -wart e m to add a wad file    // prepend a tilde to the filename so wadfile will be reloadable    p = M_CheckParm ("-wart");    if (p)    {	myargv[p][4] = 'p';     // big hack, change to -warp	// Map name handling.	switch (gamemode )	{	  case shareware:	  case retail:	  case registered:	    sprintf (file,"~"DEVMAPS"E%cM%c.wad",		     myargv[p+1][0], myargv[p+2][0]);	    printf("Warping to Episode %s, Map %s.\n",		   myargv[p+1],myargv[p+2]);	    break;	    	  case commercial:	  default:	    p = atoi (myargv[p+1]);	    if (p<10)	      sprintf (file,"~"DEVMAPS"cdata/map0%i.wad", p);	    else	      sprintf (file,"~"DEVMAPS"cdata/map%i.wad", p);	    break;	}	D_AddFile (file);    }	    p = M_CheckParm ("-file");    if (p)    {	// the parms after p are wadfile/lump names,	// until end of parms or another - preceded parm	modifiedgame = true;            // homebrew levels	while (++p != myargc && myargv[p][0] != '-')	    D_AddFile (myargv[p]);    }    p = M_CheckParm ("-playdemo");    if (!p)	p = M_CheckParm ("-timedemo");    if (p && p < myargc-1)    {	sprintf (file,"%s.lmp", myargv[p+1]);	D_AddFile (file);	printf("Playing demo %s.lmp.\n",myargv[p+1]);    }        // get skill / episode / map from parms    startskill = sk_medium;    startepisode = 1;    startmap = 1;    autostart = false;		    p = M_CheckParm ("-skill");    if (p && p < myargc-1)    {	startskill = myargv[p+1][0]-'1';	autostart = true;    }    p = M_CheckParm ("-episode");    if (p && p < myargc-1)    {	startepisode = myargv[p+1][0]-'0';	startmap = 1;	autostart = true;    }	    p = M_CheckParm ("-timer");    if (p && p < myargc-1 && deathmatch)    {	int     time;	time = atoi(myargv[p+1]);	printf("Levels will end after %d minute",time);	if (time>1)	    printf("s");	printf(".\n");    }    p = M_CheckParm ("-avg");    if (p && p < myargc-1 && deathmatch)	printf("Austin Virtual Gaming: Levels will end after 20 minutes\n");    p = M_CheckParm ("-warp");    if (p && p < myargc-1)    {	if (gamemode == commercial)	    startmap = atoi (myargv[p+1]);	else	{	    startepisode = myargv[p+1][0]-'0';	    startmap = myargv[p+2][0]-'0';	}	autostart = true;    }        // init subsystems    printf ("V_Init: allocate screens.\n");    V_Init ();    printf ("M_LoadDefaults: Load system defaults.\n");    M_LoadDefaults ();              // load before initing other systems    printf ("Z_Init: Init zone memory allocation daemon. \n");    Z_Init ();    printf ("W_Init: Init WADfiles.\n");    W_InitMultipleFiles (wadfiles);printf("added\n");        // Check for -file in shareware    if (modifiedgame)    {	// These are the lumps that will be checked in IWAD,	// if any one is not present, execution will be aborted.	char name[23][8]=	{	    "e2m1","e2m2","e2m3","e2m4","e2m5","e2m6","e2m7","e2m8","e2m9",	    "e3m1","e3m3","e3m3","e3m4","e3m5","e3m6","e3m7","e3m8","e3m9",	    "dphoof","bfgga0","heada1","cybra1","spida1d1"	};	int i;		if ( gamemode == shareware)	    I_Error("\nYou cannot -file with the shareware "		    "version. Register!");	// Check for fake IWAD with right name,	// but w/o all the lumps of the registered version. 	if (gamemode == registered)	    for (i = 0;i < 23; i++)		if (W_CheckNumForName(name[i])<0)		    I_Error("\nThis is not the registered version.");    }        // Iff additonal PWAD files are used, print modified banner    if (modifiedgame)    {	/*m*/printf (	    "===========================================================================\n"	    "ATTENTION:  This version of DOOM has been modified.  If you would like to\n"	    "get a copy of the original game, call 1-800-IDGAMES or see the readme file.\n"	    "        You will not receive technical support for modified games.\n"	    "                      press enter to continue\n"	    "===========================================================================\n"	    );	getchar ();    }	    // Check and print which version is executed.    switch ( gamemode )    {      case shareware:      case indetermined:	printf (	    "===========================================================================\n"	    "                                Shareware!\n"	    "===========================================================================\n"	);	break;      case registered:      case retail:      case commercial:	printf (	    "===========================================================================\n"	    "                 Commercial product - do not distribute!\n"	    "         Please report software piracy to the SPA: 1-800-388-PIR8\n"	    "===========================================================================\n"	);	break;	      default:	// Ouch.	break;    }    printf ("M_Init: Init miscellaneous info.\n");    M_Init ();    printf ("R_Init: Init DOOM refresh daemon - ");    R_Init ();    printf ("\nP_Init: Init Playloop state.\n");    P_Init ();    printf ("I_Init: Setting up machine state.\n");    I_Init ();    printf ("D_CheckNetGame: Checking network game status.\n");    D_CheckNetGame ();    printf ("S_Init: Setting up sound.\n");    S_Init (snd_SfxVolume /* *8 */, snd_MusicVolume /* *8*/ );    printf ("HU_Init: Setting up heads up display.\n");    HU_Init ();    printf ("ST_Init: Init status bar.\n");    ST_Init ();    // check for a driver that wants intermission stats    p = M_CheckParm ("-statcopy");    if (p && p<myargc-1)    {	// for statistics driver	extern  void*	statcopy;                            	statcopy = (void*)atoi(myargv[p+1]);	printf ("External statistics registered.\n");    }        // start the apropriate game based on parms    p = M_CheckParm ("-record");    if (p && p < myargc-1)    {	G_RecordDemo (myargv[p+1]);	autostart = true;    }	    p = M_CheckParm ("-playdemo");    if (p && p < myargc-1)    {	singledemo = true;              // quit after one demo	G_DeferedPlayDemo (myargv[p+1]);	D_DoomLoop ();  // never returns    }	    p = M_CheckParm ("-timedemo");    if (p && p < myargc-1)    {	G_TimeDemo (myargv[p+1]);	D_DoomLoop ();  // never returns    }	    p = M_CheckParm ("-loadgame");    if (p && p < myargc-1)    {	if (M_CheckParm("-cdrom"))	    sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg",myargv[p+1][0]);	else	    sprintf(file, SAVEGAMENAME"%c.dsg",myargv[p+1][0]);	G_LoadGame (file);    }	    if ( gameaction != ga_loadgame )    {	if (autostart || netgame)	    G_InitNew (startskill, startepisode, startmap);	else	    D_StartTitle ();                // start up intro loop    }    D_DoomLoop ();  // never returns}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -