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

📄 d_main.c

📁 游戏类程序源代码---WinDoom 3D源程序.zip
💻 C
📖 第 1 页 / 共 4 页
字号:
	
	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]);
	    sprintf(MsgText, "Warping to Episode %s, Map %s.\n",
		   myargv[p+1],myargv[p+2]);
    WriteDebug(MsgText);
	    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 ("-playdemo2");
         demotype = DEMO_II;
       }
    else
       {
        demotype = DEMO_I;
       }

    if (!p)
       {
	    p = M_CheckParm ("-timedemo");
        demotype = DEMO_I;
       }

    if (!p)
       {
	    p = M_CheckParm ("-timedemo2");
        demotype = DEMO_II;
       }

    if (p && p < myargc-1)
       {
        if (demotype == DEMO_I)
           {
	        sprintf (file,"%s.lmp", myargv[p+1]);
	        D_AddFile (file);

	        //printf("Playing demo %s.lmp.\n",myargv[p+1]);
	        sprintf(MsgText, "Playing demo %s.lmp.\n",myargv[p+1]);
            WriteDebug(MsgText);
           }
        else
           {
	        sprintf(MsgText, "Playing demo II %s.dem.\n",myargv[p+1]);
            WriteDebug(MsgText);
           }
       }
    
    // 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]);
// Change over to buffered output...
	//printf("Levels will end after %d minute",time);
	sprintf(MsgText, "Levels will end after %d minute",time);
	if (time>1)
	    strcat(MsgText, "s");
	    //printf("s");
	strcat(MsgText, ".\n");
	//printf(".\n");
    WriteDebug(MsgText);
    }

    p = M_CheckParm ("-avg");
    if (p && p < myargc-1 && deathmatch)
	WriteDebug("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");
    WriteDebug("V_Init: allocate screens.\n");
    V_Init ();

    //printf ("M_LoadDefaults: Load system defaults.\n");
    WriteDebug("M_LoadDefaults: Load system defaults.\n");
    M_LoadDefaults ();              // load before initing other systems

    //printf ("Z_Init: Init zone memory allocation daemon. \n");
    WriteDebug("Z_Init: Init zone memory allocation daemon. \n");
    Z_Init ();

    //printf ("W_Init: Init WADfiles.\n");
    WriteDebug("W_Init: Init WADfiles.\n");
    W_InitMultipleFiles (wadfiles);
    
    if ((gamemode == retail) || (gamemode == registered))
       {
        char name[10][8] = { "e4m1","e4m2","e4m3","e4m4","e4m5","e4m6","e4m7","e4m8","e4m9", "m_epi4" };
        int i;
        WriteDebug("Checking for Ultimate Doom...\n");
        gamemode = retail;
        for (i = 0;i < 10; i++)
          {
            if (W_CheckNumForName(name[i]) < 0)
               {
                gamemode = registered;
                break;
               }
           }
        if (gamemode == registered)
            WriteDebug("Normal Doom WAD file...\n");
        else
            WriteDebug("Ultimate Doom WAD - fourth episode enabled...\n");
       }

    switch ( gamemode )
    {
      case retail:
	sprintf (title,
		 "                         "
		 "The Ultimate DOOM Startup v%i.%i"
		 "                           ",
		 VERSION/100,VERSION%100);
	break;
      case shareware:
	sprintf (title,
		 "                            "
		 "DOOM Shareware Startup v%i.%i"
		 "                           ",
		 VERSION/100,VERSION%100);
	break;
      case registered:
	sprintf (title,
		 "                            "
		 "DOOM Registered Startup v%i.%i"
		 "                           ",
		 VERSION/100,VERSION%100);
	break;
      case commercial:
       if (plutonia == TRUE)
           sprintf (title, "                   DOOM 2: Plutonia Experiment v%i.%i                        ", VERSION/100,VERSION%100);
       else
       if (tnt == TRUE)
           sprintf (title, "                     DOOM 2: TNT - Evilution v%i.%i                          ", VERSION/100,VERSION%100);
       else
           sprintf (title, "                      DOOM 2: Hell on Earth v%i.%i                           ", VERSION/100,VERSION%100);
	break;
      default:
	sprintf (title,
		 "                     "
		 "Public DOOM - v%i.%i"
		 "                           ",
		 VERSION/100,VERSION%100);
	break;
    }
    
    //printf ("%s\n",title);
    WriteDebug(title);
    WriteDebug("\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.");
    }
    
    // If additonal PWAD files are used, print modified banner
    if (modifiedgame)
    {
	 //printf (
	    WriteDebug("===========================================================================\n");
	    WriteDebug("ATTENTION:  This version of DOOM has been modified.  If you would like to\n");
	    WriteDebug("get a copy of the original game, call 1-800-IDGAMES or see the readme file.\n");
	    WriteDebug("        You will not receive technical support for modified games.\n");
	    //WriteDebug("                      press enter to continue\n");
	    WriteDebug("===========================================================================\n");
	//    );
	//getchar ();
    }
	

    // Check and print which version is executed.
    switch ( gamemode )
    {
      case shareware:
      case indetermined:
	//printf (
	    WriteDebug("===========================================================================\n");
	    WriteDebug("                                Shareware!\n");
	    WriteDebug("===========================================================================\n");
	//);
	break;
      case registered:
      case retail:
      case commercial:
	//printf (
	    WriteDebug("===========================================================================\n");
	    WriteDebug("                 Commercial product - do not distribute!\n");
	    WriteDebug("         Please report software piracy to the SPA: 1-800-388-PIR8\n");
	    WriteDebug("===========================================================================\n");
	//);
	break;
	
      default:
	// Ouch.
	break;
    }

    //printf ("M_Init: Init miscellaneous info.\n");
    WriteDebug("M_Init: Init miscellaneous info.\n");
    M_Init ();

    //printf ("R_Init: Init DOOM refresh daemon - ");
    WriteDebug("R_Init: Init DOOM refresh daemon - ");
    R_Init ();

    //printf ("\nP_Init: Init Playloop state.\n");
    WriteDebug("\nP_Init: Init Playloop state.\n");
    P_Init ();

    //printf ("I_Init: Setting up machine state.\n");
    WriteDebug("I_Init: Setting up machine state.\n");
    I_Init ();

    //printf ("D_CheckNetGame: Checking network game status.\n");
    WriteDebug("D_CheckNetGame: Checking network game status.\n");
    D_CheckNetGame ();

    //printf ("S_Init: Setting up sound.\n");
    WriteDebug("S_Init: Setting up sound.\n");
    //S_Init (snd_SfxVolume*8, snd_MusicVolume*8 );
    S_Init (snd_SfxVolume, snd_MusicVolume );

    //printf ("HU_Init: Setting up heads up display.\n");
    WriteDebug("HU_Init: Setting up heads up display.\n");
    HU_Init ();

    //printf ("ST_Init: Init status bar.\n");
    WriteDebug("ST_Init: Init status bar.\n");
    ST_Init ();

    //printf ("ST_Init: Init status bar.\n");
    WriteDebug("CO_Init: Init console.\n");
    CO_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");
	WriteDebug("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]);
    return;
//    D_DoomLoop ();  // never returns
    }
	
    p = M_CheckParm ("-playdemo2");
    if (p && p < myargc-1)
    {
	singledemo = true;              // quit after one demo
	if (G_DeferedPlayDemo_II(myargv[p+1]) == true)
    return;
    else
       {
        sprintf(MsgText, "DEMO II [%s.dem] - BAD FILE.\n", myargv[p+1]);
        WriteDebug(MsgText);
       }
//    D_DoomLoop ();  // never returns
    }
	
    p = M_CheckParm ("-timedemo");
    if (p && p < myargc-1)
    {
     WriteDebug("-timedemo\n");
	G_TimeDemo (myargv[p+1]);
    return;
//    D_DoomLoop ();  // never returns
    }
	
    p = M_CheckParm ("-timedemo2");
    if (p && p < myargc-1)
    {
     WriteDebug("-timedemo2\n");
	if (G_TimeDemo_II(myargv[p+1]) == true)
    return;
    else
       {
        sprintf(MsgText, "DEMO II [%s.dem] - BAD FILE.\n", myargv[p+1]);
        WriteDebug(MsgText);
       }
//    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 + -