亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? d_main.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁 / 共 4 頁
字號:
// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// $Log:$
//
// DESCRIPTION:
//	DOOM main program (D_DoomMain) and game loop (D_DoomLoop),
//	plus functions to determine game mode (shareware, registered),
//	parse command line parameters, configure game parameters (turbo),
//	and call the startup functions.
//
//-----------------------------------------------------------------------------


static const char rcsid[] = "$Id: d_main.c,v 1.8 1997/02/03 22:45:09 b1 Exp $";

#define	BGCOLOR		7
#define	FGCOLOR		8


#ifdef NORMALUNIX
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#endif

#include <direct.h>
#include <malloc.h>
#include <io.h>
#include <fcntl.h>


#include "doomdef.h"
#include "doomstat.h"

#include "dstrings.h"
#include "sounds.h"


#include "z_zone.h"
#include "w_wad.h"
#include "s_sound.h"
#include "v_video.h"

#include "f_finale.h"
#include "f_wipe.h"

#include "m_argv.h"
#include "m_misc.h"
#include "m_menu.h"

#include "i_system.h"
#include "i_sound.h"
#include "i_video.h"

#include "g_game.h"

#include "hu_stuff.h"
#include "wi_stuff.h"
#include "st_stuff.h"
#include "am_map.h"

#include "p_setup.h"
#include "r_local.h"


#include "d_main.h"

#include "d_console.h"

// DQ addition for test
#include "dxerr.h"
// DQ end addition

char MsgText[256];
void WriteDebug(char *);


// DQ addition start
int gEyePixelOffset = 8;  // send half to each separation, rounding the odd half to the positive offset
int gLCDYaw16thDegree = 32;	// parallel views are preferred for stereo, to prevent keystoning
BOOL	bInStereo = FALSE;
extern menu_t*	currentMenu;
extern short itemOn;			// menu item skull is on
extern long ScreensYLookup[];
void GetRenderBuffer(BOOL bLeftEye, BOOL bStereo, PBUFFER RenderBuffer, PBUFFER RenderViewWindowBuffer);
extern long ScreensYLookup[];
extern BUFFER gRenderBuffer;
extern BOOL bInGame;
// DQ addition end

//
// D-DoomLoop()
// Not a globally visible function,
//  just included for source reference,
//  called by D_DoomMain, never exits.
// Manages timing and IO,
//  calls all ?_Responder, ?_Ticker, and ?_Drawer,
//  calls I_GetTime, I_StartFrame, and I_StartTic
//

void D_DoomLoop (void);


char*		wadfiles[MAXWADFILES];


boolean		devparm;	// started game with -devparm
boolean         nomonsters;	// checkparm of -nomonsters
boolean         respawnparm;	// checkparm of -respawn
boolean         fastparm;	// checkparm of -fast

boolean         drone;

boolean		singletics = false; // debug flag to cancel adaptiveness

extern boolean plutonia, tnt;

//extern int soundVolume;
//extern  int	sfxVolume;
//extern  int	musicVolume;

extern  boolean	inhelpscreens;

skill_t		startskill;
int             startepisode;
int		startmap;
boolean		autostart;

FILE*		debugfile;

boolean		advancedemo;




char		wadfile[1024];		// primary wad file
char		mapdir[1024];           // directory of development maps
char		basedefault[1024];      // default file


void D_CheckNetGame (void);
void D_ProcessEvents (void);
void G_BuildTiccmd (ticcmd_t* cmd);
void D_DoAdvanceDemo (void);


//
// EVENT HANDLING
//
// Events are asynchronous inputs generally generated by the game user.
// Events can be discarded if no responder claims them
//
event_t         events[MAXEVENTS];
int             eventhead;
int             eventtail;

//
// D_PostEvent
// Called by the I/O functions when input is detected
//
void D_PostEvent (event_t* ev)
   {
    events[eventhead] = *ev;
    eventhead = (++eventhead)&(MAXEVENTS-1);
   }


//
// D_ProcessEvents
// Send all the events of the given timestamp down the responder chain
//

void D_ProcessEvents (void)
   {
    event_t*	ev;
    // IF STORE DEMO, DO NOT ACCEPT INPUT
    if (( gamemode == commercial ) && (W_CheckNumForName("map01")<0))
        return;
	
    for (; eventtail != eventhead; eventtail = (++eventtail)&(MAXEVENTS-1))
       {
        ev = &events[eventtail];
        if (CO_Responder(ev))
           {
            continue;               // console ate the event
           }
        if (M_Responder(ev))
           {
            continue;               // menu ate the event
           }
        G_Responder(ev);
       }
   }




//
// D_Display
//  draw current display, possibly wiping it from the previous
//

// wipegamestate can be set to -1 to force a wipe on the next draw
gamestate_t     wipegamestate = GS_DEMOSCREEN;
extern  boolean setsizeneeded;
extern  int             showMessages;
// DQ start addition
void R_ExecuteSetViewSize (int iRightPixelOffset, 
									int iLeftPixelOffset);
void R_SetCameraPosition(BOOL bLeftEye);
BOOL redrawborder = FALSE;
// DQ end addition
//void R_ExecuteSetViewSize (void);

void D_Display (void)
   {
    static  boolean		viewactivestate = false;
    static  boolean		menuactivestate = false;
    static  boolean		inhelpscreensstate = false;
    static  boolean		fullscreen = false;
    static  gamestate_t		oldgamestate = -1;
    static  int			borderdrawcount;
    int				nowtime;
    int				tics;
    int				wipestart;
    int				y;
    boolean			done;
    boolean			wipe;
    boolean			redrawsbar;
	 // DQ added start
	 int iEyeCounter = 0;  // right first, left second
	 BOOL bEndWipe = FALSE;
	 byte * RightEndScreen = NULL;
	 BOOL bStereo;
	 int EyeOffset;
	 int TextEyeOffset;
	 int Yaw;
	 static int StatusBarRepeat = 0;
	 boolean			Newmenuactive;
	 boolean			Prevmenuactive;
	 short			NewitemOn;
	 short			PrevitemOn;
	 short			NewlastOn;
	 short			PrevlastOn;
	 void *			NewcurrentMenu;
	 void *			PrevcurrentMenu;
	 BUFFER			RenderBuffer;
	 BUFFER			RenderViewWindowBuffer;
	 BUFFER			StartBuffer;
	 BUFFER			BackgroundBuffer;
	 BUFFER			LeftEndBuffer;
	 BUFFER			RightEndBuffer;
	 BUFFER			StatusBarBuffer;
	 boolean			bRedrawBorder;
	 static short	RedrawBorderRepeat = 0;
	 // DQ added end

    if (nodrawers)
        return;                    // for comparative timing / profiling
    //WriteDebug("D_Display\n"); 		
    redrawsbar = false;

	if (setsizeneeded)
	{
		R_ExecuteSetViewSize (EyeOffset/2, 
									-((EyeOffset+1)/2));
		oldgamestate = -1;                      // force background redraw
		borderdrawcount = 3;
	}
    // DQ start addition
	 // keep these values constant throughout this procedure, even if the user changes
	 // them with the console or menu or keyboard
	 bRedrawBorder = setsizeneeded | redrawborder;
	 if (bRedrawBorder)
	 {
		 RedrawBorderRepeat = 4;
	 }
	 redrawborder = FALSE;	// turn the flag back off.
	 bStereo = bInStereo;
	 EyeOffset = gEyePixelOffset;
	 TextEyeOffset = (bStereo ? 6 : 0);
	 Yaw = gLCDYaw16thDegree;
 
	 wipe = false;
	 if (gamestate != wipegamestate)
	 {
		 wipe = true;
	 }

	 BackgroundBuffer.Buffer	= screens[1];
	 BackgroundBuffer.YLookup	= ScreensYLookup;
	 StartBuffer.Buffer			= screens[2];
	 StartBuffer.YLookup			= ScreensYLookup;
	 LeftEndBuffer.Buffer		= screens[3];
	 LeftEndBuffer.YLookup		= ScreensYLookup;
	 StatusBarBuffer.Buffer		= screens[4];
	 StatusBarBuffer.YLookup	= ScreensYLookup;

	 Prevmenuactive = menuactive;
	 PrevcurrentMenu = currentMenu;
	 PrevitemOn = itemOn;
	 PrevlastOn = currentMenu->lastOn;
	 // keep looping while wiping.  If mono, just render left eye
	 for (iEyeCounter = (bStereo ? 0 : 1); 
				iEyeCounter < 2 && bInGame; 
				iEyeCounter++)  // 0 = right, 1 = left
	 {
		 GetRenderBuffer(iEyeCounter == 1, bStereo, &RenderBuffer, &RenderViewWindowBuffer);
		 R_SetCameraPosition(iEyeCounter == 1);	 // 0 = right, 1 = left

		if (bRedrawBorder || RedrawBorderRepeat > 0)
		{
			R_DrawViewBorder(&RenderBuffer, &BackgroundBuffer);	// DQ
			if (RedrawBorderRepeat > 0)	// repeat the border on all surfaces
			{
				RedrawBorderRepeat--;
			}
		}

	 // save the current screen if about to wipe
	 if (gamestate != wipegamestate)
		 {
		  //WriteDebug("wipe_StartScreen...\n");
		  // wipe = true;  // DQ moved outside of loop
		  // DQ - use the image that is in RenderBuffer as the wipe screen for both eyes - it
		  // is a bit old but since we almost always wipe from a static screen all buffers would
		  // have the image, and it gets garbled so the stereo effect from it is unnecessary
		  // DQ start addition
		  wipe_StartScreen(0, 0, SCREENWIDTH, SCREENHEIGHT, &StartBuffer/*DQ*/, &RenderBuffer);
		  }
		  // DQ end addition
		  //wipe_StartScreen(0, 0, SCREENWIDTH, SCREENHEIGHT); // original line
//	 else		// DQ moved outside of loop
//		 wipe = false;	// DQ moved outside of loop

		if (gamestate == GS_LEVEL && gametic)
		{
			//WriteDebug("HU_Erase...\n");
			HU_Erase(&RenderBuffer, &BackgroundBuffer);	// DQ
			//HU_Erase();
		}
		 // DQ addition end

		 // do buffered drawing
		 switch (gamestate)
			 {
			  case GS_LEVEL:
					 //WriteDebug("GS_LEVEL - 1...\n");
					 if (!gametic)
						  break;
					 //WriteDebug("GS_LEVEL - 2...\n");
					 if (automapactive)
						  AM_Drawer (&RenderBuffer/*DQ*/);
					 //WriteDebug("GS_LEVEL - 3...\n");
					 if (wipe || (viewheight != SCREENHEIGHT && fullscreen) || setsizeneeded/*DQ*/)
						  redrawsbar = true;
					 if (inhelpscreensstate && !inhelpscreens)
						  redrawsbar = true;              // just put away the help screen
					 // DQ start addition
					 // since we have up to four buffers if we are rendering directly into
					 // the display surface, and we only draw the status bar when needed, I
					 // am going to draw the status bar five consecutive renderings.  Since
					 // we rotate through the buffers, the status bar will be rendered into
					 // all of them.  If we are not rendering into the display buffer, then
					 // we just end up with four extra updates.  Five, so we will draw at least
					 // two sets of pairs
					 if (redrawsbar)
					 {
						 StatusBarRepeat = 5;
					 }
					 if (StatusBarRepeat > 0)
					 {
						 redrawsbar = TRUE;
						 StatusBarRepeat--;
					 }
					 // DQ end addition
					 //WriteDebug("GS_LEVEL - 4...\n");
					 redrawsbar = TRUE; // forced to true, so that both eyes get same image
					 ST_Drawer (viewheight == SCREENHEIGHT, redrawsbar, &RenderBuffer, &StatusBarBuffer); // DQ
					 //ST_Drawer (viewheight == SCREENHEIGHT, redrawsbar);
					 //WriteDebug("GS_LEVEL - 5...\n");
					 fullscreen = viewheight == SCREENHEIGHT;
					 break;

			  case GS_INTERMISSION:
				    // the intermission background image was put into the background buffer
				    // in the call to G_DoCompleted
					 WI_Drawer ((iEyeCounter == 0 ? -(TextEyeOffset/2) : (TextEyeOffset+1)/2)/*DQ*/,
									&RenderBuffer/*DQ*/, 
									&BackgroundBuffer/*DQ*/);
					 break;

			  case GS_FINALE:
					 F_Drawer (&RenderBuffer/*DQ*/);
					 break;

			  case GS_DEMOSCREEN:
					 D_PageDrawer (&RenderBuffer/*DQ*/);
					 break;
			 }
 
		 // draw buffered stuff to screen
		 I_UpdateNoBlit();
 
		 // draw the view directly
		 if (gamestate == GS_LEVEL && !automapactive && gametic)
		 {
			 // DQ start addition
			  //WriteDebug("R_RenderPlayerView...\n");
			  if (iEyeCounter == 0)
			  {
				  // render right eye
				  R_RenderPlayerView (&players[displayplayer], 
												(fixed_t)(EyeOffset/2) << FRACBITS,
												Yaw,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀国产一区二区三区在线播放| 91免费版在线| 国产一区欧美日韩| 国产主播一区二区三区| 国产呦萝稀缺另类资源| 韩国三级电影一区二区| 成人黄色777网| av网站免费线看精品| 91蝌蚪国产九色| 欧美综合亚洲图片综合区| 欧美精品在线一区二区| 欧美大片日本大片免费观看| 久久亚洲精精品中文字幕早川悠里| 欧美精品一区二区高清在线观看 | 成人自拍视频在线观看| 91丨porny丨中文| 91热门视频在线观看| 欧美在线你懂的| 日韩三级在线观看| 中文字幕高清不卡| 亚洲一区二区在线免费观看视频| 日韩电影在线看| 风间由美一区二区三区在线观看 | 国产精品麻豆一区二区 | 国产成人午夜高潮毛片| 91麻豆精品秘密| 91精品国产色综合久久久蜜香臀| 2欧美一区二区三区在线观看视频| 欧美高清在线精品一区| 国产精品丝袜91| 亚洲一级在线观看| 国产精品主播直播| 色噜噜狠狠成人中文综合| 91精品在线观看入口| 国产亚洲一区字幕| 亚洲一区二区综合| 国产成人亚洲精品青草天美| 欧美午夜电影网| 久久久亚洲精品一区二区三区| 樱桃视频在线观看一区| 日韩精品一区二区三区在线播放| 亚洲日本乱码在线观看| 国产精品1区2区| 欧美电影免费观看高清完整版在线观看| 亚洲女同一区二区| 国产91精品入口| 精品久久免费看| 婷婷综合久久一区二区三区| 色婷婷久久久久swag精品| 久久精品欧美一区二区三区不卡| 热久久免费视频| 欧美性大战久久久久久久| 中文av一区二区| 国产精品一区在线| 欧美草草影院在线视频| 天天影视色香欲综合网老头| 在线欧美小视频| |精品福利一区二区三区| 国产成人免费在线视频| 精品久久久久香蕉网| 日韩av电影天堂| 欧美日韩不卡一区| 亚洲午夜影视影院在线观看| 99精品视频一区二区三区| 国产色产综合产在线视频| 久久精品国内一区二区三区| 91精品国产综合久久小美女| 亚洲电影视频在线| 欧美日韩免费高清一区色橹橹 | 成人高清免费观看| 国产精品视频免费| 处破女av一区二区| 国产精品天美传媒| jlzzjlzz欧美大全| 中文字幕在线不卡| 91污在线观看| 亚洲另类在线一区| 色又黄又爽网站www久久| 亚洲天堂网中文字| 在线一区二区三区四区五区| 一个色在线综合| 欧美日韩精品欧美日韩精品一| 五月天一区二区三区| 欧美高清www午色夜在线视频| 天天亚洲美女在线视频| 日韩视频国产视频| 国产最新精品精品你懂的| 久久久青草青青国产亚洲免观| 国产高清在线精品| 亚洲欧洲日韩一区二区三区| 91日韩在线专区| 偷拍一区二区三区| 精品久久久久一区二区国产| 国产成人av资源| 亚洲卡通欧美制服中文| 欧美丰满一区二区免费视频| 久久精品999| 国产精品女主播av| 欧美性猛交xxxxxxxx| 美腿丝袜亚洲一区| 国产日韩欧美综合一区| 成人av动漫网站| 一区二区三区产品免费精品久久75| av网站一区二区三区| 亚洲第一在线综合网站| 精品福利一区二区三区免费视频| 国内成人免费视频| 国产精品成人免费精品自在线观看| 97精品视频在线观看自产线路二| 亚洲国产精品视频| 777久久久精品| 麻豆91精品视频| 久久久不卡影院| 欧美色图12p| 久99久精品视频免费观看| 国产欧美一区二区三区网站| 欧美最猛性xxxxx直播| 青青草伊人久久| 国产精品人人做人人爽人人添| 91在线视频在线| 美女精品一区二区| 国产日韩欧美精品电影三级在线| 成人av中文字幕| 亚洲成人免费电影| 亚洲国产精品成人综合色在线婷婷 | 久久99精品国产麻豆不卡| 国产欧美日韩视频一区二区| 欧美亚洲图片小说| 激情另类小说区图片区视频区| 亚洲免费成人av| 91麻豆精品国产自产在线观看一区 | 蓝色福利精品导航| 亚洲黄色尤物视频| 日韩欧美视频在线 | 一区二区三区欧美在线观看| 精品蜜桃在线看| 91小视频免费看| 国产精品综合在线视频| 一区二区三区在线观看欧美| 26uuu色噜噜精品一区二区| 91小宝寻花一区二区三区| 狠狠狠色丁香婷婷综合激情| 椎名由奈av一区二区三区| 欧美成人精精品一区二区频| 色综合一个色综合亚洲| 国产一区二区精品久久99| 亚洲女厕所小便bbb| www精品美女久久久tv| 欧美精品日韩一区| www.日韩大片| 国产福利精品导航| 婷婷久久综合九色国产成人| 亚洲欧美日韩电影| 久久理论电影网| 日韩一区二区视频| 91麻豆福利精品推荐| 国产精品亚洲人在线观看| 亚洲精品视频在线看| 中文字幕精品—区二区四季| 欧美精品乱码久久久久久按摩| 成人91在线观看| 国产91清纯白嫩初高中在线观看 | 精品三级av在线| 色综合激情久久| 成人app在线| 国产精品自在欧美一区| 经典三级一区二区| 亚洲无人区一区| 亚洲在线视频网站| 久久综合九色综合久久久精品综合| 欧美一区二区三区成人| 精品视频资源站| 91麻豆产精品久久久久久 | 亚洲视频图片小说| 国产精品久久毛片| 亚洲精品在线观看网站| 日韩美女一区二区三区| 欧美日韩午夜影院| 欧美日韩国产区一| 91国产免费看| 在线精品视频小说1| 欧美一区二区三区在| 欧美午夜精品一区| 欧美日韩在线综合| 在线亚洲一区二区| 欧亚洲嫩模精品一区三区| a在线播放不卡| 色婷婷综合久久| 成人精品国产福利| 91色porny在线视频| 91国内精品野花午夜精品 | 午夜激情综合网| 亚洲第一福利视频在线| 日本aⅴ亚洲精品中文乱码| 五月开心婷婷久久| 精品一区二区三区久久| 欧美aaaaaa午夜精品| 极品少妇xxxx精品少妇偷拍| 国产麻豆一精品一av一免费 | 2024国产精品视频|