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

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

?? g_game.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁 / 共 4 頁
字號:
// Here's for the german edition.
void G_SecretExitLevel (void) 
{ 
    // IF NO WOLF3D LEVELS, NO SECRET EXIT!
    if ( (gamemode == commercial)
      && (W_CheckNumForName("map31")<0))
	secretexit = false;
    else
	secretexit = true; 
    gameaction = ga_completed; 
} 
 
void G_DoCompleted (void) 
{ 
    int             i; 
	 
    gameaction = ga_nothing; 
 
    for (i=0 ; i<MAXPLAYERS ; i++) 
	if (playeringame[i]) 
	    G_PlayerFinishLevel (i);        // take away cards and stuff 
	 
    if (automapactive) 
	AM_Stop (); 
	
    if ( gamemode != commercial)
	switch(gamemap)
	{
	  case 8:
	    gameaction = ga_victory;
	    return;
	  case 9: 
	    for (i=0 ; i<MAXPLAYERS ; i++) 
		players[i].didsecret = true; 
	    break;
	}
		
//#if 0  Hmmm - why?
    if ( (gamemap == 8)
	 && (gamemode != commercial) ) 
    {
	// victory 
	gameaction = ga_victory; 
	return; 
    } 
	 
    if ( (gamemap == 9)
	 && (gamemode != commercial) ) 
    {
	// exit secret level 
	for (i=0 ; i<MAXPLAYERS ; i++) 
	    players[i].didsecret = true; 
    } 
//#endif
    
	 
    wminfo.didsecret = players[consoleplayer].didsecret; 
    wminfo.epsd = gameepisode -1; 
    wminfo.last = gamemap -1;
    
    // wminfo.next is 0 biased, unlike gamemap
    if ( gamemode == commercial)
    {
	if (secretexit)
	    switch(gamemap)
	    {
	      case 15: wminfo.next = 30; break;
	      case 31: wminfo.next = 31; break;
	    }
	else
	    switch(gamemap)
	    {
	      case 31:
	      case 32: wminfo.next = 15; break;
	      default: wminfo.next = gamemap;
	    }
    }
    else
    {
	if (secretexit) 
	    wminfo.next = 8; 	// go to secret level 
	else if (gamemap == 9) 
	{
	    // returning from secret level 
	    switch (gameepisode) 
	    { 
	      case 1: 
		wminfo.next = 3; 
		break; 
	      case 2: 
		wminfo.next = 5; 
		break; 
	      case 3: 
		wminfo.next = 6; 
		break; 
	      case 4:
		wminfo.next = 2;
		break;
	    }                
	} 
	else 
	    wminfo.next = gamemap;          // go to next level 
    }
		 
    wminfo.maxkills = totalkills; 
    wminfo.maxitems = totalitems; 
    wminfo.maxsecret = totalsecret; 
    wminfo.maxfrags = 0; 
    if ( gamemode == commercial )
	wminfo.partime = 35*cpars[gamemap-1]; 
    else
	wminfo.partime = 35*pars[gameepisode][gamemap]; 
    wminfo.pnum = consoleplayer; 
 
    for (i=0 ; i<MAXPLAYERS ; i++) 
    { 
	wminfo.plyr[i].in = playeringame[i]; 
	wminfo.plyr[i].skills = players[i].killcount; 
	wminfo.plyr[i].sitems = players[i].itemcount; 
	wminfo.plyr[i].ssecret = players[i].secretcount; 
	wminfo.plyr[i].stime = leveltime; 
	memcpy (wminfo.plyr[i].frags, players[i].frags 
		, sizeof(wminfo.plyr[i].frags)); 
    } 
 
    gamestate = GS_INTERMISSION; 
    viewactive = false; 
    automapactive = false; 
 
    if (statcopy)
	memcpy (statcopy, &wminfo, sizeof(wminfo));
	
	 // DQ start addition
	 {
		 BUFFER BackBuffer;

		 BackBuffer.Buffer = screens[1]; // back buffer
		 BackBuffer.YLookup = ScreensYLookup;
		 WI_Start(&wminfo, &BackBuffer);
	 }
	 // DQ end addition
    //WI_Start (&wminfo); // DQ removed
} 


//
// G_WorldDone 
//
void G_WorldDone (void) 
{ 
    gameaction = ga_worlddone; 

    if (secretexit) 
	players[consoleplayer].didsecret = true; 

    if ( gamemode == commercial )
    {
	switch (gamemap)
	{
	  case 15:
	  case 31:
	    if (!secretexit)
		break;
	  case 6:
	  case 11:
	  case 20:
	  case 30:
	    F_StartFinale ();
	    break;
	}
    }
} 
 
void G_DoWorldDone (void) 
{        
    gamestate = GS_LEVEL; 
    gamemap = wminfo.next+1; 
    G_DoLoadLevel (); 
    gameaction = ga_nothing; 
    viewactive = true; 
} 
 


//
// G_InitFromSavegame
// Can be called by the startup code or the menu task. 
//
extern boolean setsizeneeded;
// DQ start addition
void R_ExecuteSetViewSize (int iRightPixelOffset, 
									int iLeftPixelOffset);
void R_SetCameraPosition(BOOL bLeftEye);
// DQ end addition
// void R_ExecuteSetViewSize (void);  // original line

char	savename[256];

void G_LoadGame (char* name) 
{ 
    strcpy (savename, name); 
    gameaction = ga_loadgame; 
} 
 
#define VERSIONSIZE		16 


void G_DoLoadGame (void) 
{ 
    int		length; 
    int		i; 
    int		a,b,c; 
    char	vcheck[VERSIONSIZE]; 
	 
    gameaction = ga_nothing; 
	 
    length = M_ReadFile (savename, &savebuffer); 
    save_p = savebuffer + SAVESTRINGSIZE;
    
    // skip the description field 
    memset (vcheck,0,sizeof(vcheck)); 
    sprintf (vcheck,"version %i",VERSION); 
    if (strcmp (save_p, vcheck)) 
	return;				// bad version 
    save_p += VERSIONSIZE; 
			 
    gameskill = *save_p++; 
    gameepisode = *save_p++; 
    gamemap = *save_p++; 
    for (i=0 ; i<MAXPLAYERS ; i++) 
	playeringame[i] = *save_p++; 

    // load a base level 
    G_InitNew (gameskill, gameepisode, gamemap);
 
    // get the times 
    a = *save_p++; 
    b = *save_p++; 
    c = *save_p++; 
    leveltime = (a<<16) + (b<<8) + c; 
	 
    // dearchive all the modifications
    P_UnArchivePlayers (); 
    P_UnArchiveWorld (); 
    P_UnArchiveThinkers (); 
    P_UnArchiveSpecials (); 
 
    if (*save_p != 0x1d) 
	I_Error ("Bad savegame");
    
    // done 
    Z_Free (savebuffer); 

    if (setsizeneeded)
	 {
		 // DQ start addition
		 BUFFER BackBuffer;

		 BackBuffer.Buffer = screens[1]; // background
		 BackBuffer.YLookup = ScreensYLookup;
		 R_ExecuteSetViewSize ((gEyePixelOffset+1)/2, 
										-(gEyePixelOffset/2));
		 R_DrawViewBorder(&gRenderBuffer, &BackBuffer);	// DQ
		 R_SetCameraPosition(TRUE);
		 // DQ end addition
		// R_ExecuteSetViewSize ();  // original line
	 }

    // draw the pattern into the back screen
    WriteDebug("Calling R_FileBackScreen...\n");
	 // DQ start addition
	 {
		 BUFFER BackBuffer;

		 BackBuffer.Buffer = screens[1];
		 BackBuffer.YLookup = ScreensYLookup;

		 R_FillBackScreen(&BackBuffer);

	    WriteDebug("Calling R_DrawViewBorder...\n"); // DQ removed
		 R_DrawViewBorder(&gRenderBuffer, &BackBuffer);	// DQ removed
	 }
	 // DQ end addition
    //R_FillBackScreen(screens[1]/*DQ*/); // DQ removed

    //WriteDebug("Calling R_DrawViewBorder...\n"); // DQ removed
    //R_DrawViewBorder();	// DQ removed
} 
 

//
// G_SaveGame
// Called by the menu task.
// Description is a 24 byte text string 
//
void
G_SaveGame
( int	slot,
  char*	description ) 
{ 
    savegameslot = slot; 
    strcpy (savedescription, description); 
    sendsave = true; 
} 
 
void G_DoSaveGame (void) 
{ 
    char	name[100]; 
    char	name2[VERSIONSIZE]; 
    char*	description; 
    int		length; 
    int		i; 
	
    if (M_CheckParm("-cdrom"))
	sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",savegameslot);
    else
	sprintf (name,SAVEGAMENAME"%d.dsg",savegameslot); 
    description = savedescription; 
	 
    save_p = savebuffer = screens[1]+0x4000; 
	 
    memcpy (save_p, description, SAVESTRINGSIZE); 
    save_p += SAVESTRINGSIZE; 
    memset (name2,0,sizeof(name2)); 
    sprintf (name2,"version %i",VERSION); 
    memcpy (save_p, name2, VERSIONSIZE); 
    save_p += VERSIONSIZE; 
	 
    *save_p++ = gameskill; 
    *save_p++ = gameepisode; 
    *save_p++ = gamemap; 
    for (i=0 ; i<MAXPLAYERS ; i++) 
	*save_p++ = playeringame[i]; 
    *save_p++ = leveltime>>16; 
    *save_p++ = leveltime>>8; 
    *save_p++ = leveltime; 
 
    P_ArchivePlayers (); 
    P_ArchiveWorld (); 
    P_ArchiveThinkers (); 
    P_ArchiveSpecials (); 
	 
    *save_p++ = 0x1d;		// consistancy marker 
	 
    length = save_p - savebuffer; 
    if (length > SAVEGAMESIZE) 
	I_Error ("Savegame buffer overrun"); 
    M_WriteFile (name, savebuffer, length); 
    gameaction = ga_nothing; 
    savedescription[0] = 0;		 
	 
    players[consoleplayer].message = GGSAVED; 

    // draw the pattern into the back screen
	 // DQ start addition
	 {
		 BUFFER BackBuffer;

		 BackBuffer.Buffer = screens[1];
		 BackBuffer.YLookup = ScreensYLookup;

		 R_FillBackScreen(&BackBuffer);
	 }
	 // DQ end addition
    //R_FillBackScreen ();		// DQ removed
} 
 

//
// G_InitNew
// Can be called by the startup code or the menu task,
// consoleplayer, displayplayer, playeringame[] should be set. 
//
skill_t	d_skill; 
int     d_episode; 
int     d_map; 
 
void
G_DeferedInitNew
( skill_t	skill,
  int		episode,
  int		map) 
{ 
    d_skill = skill; 
    d_episode = episode; 
    d_map = map; 
    gameaction = ga_newgame; 
} 


void G_DoNewGame (void) 
{
    demoplayback = false; 
    netdemo = false;
    netgame = false;
    deathmatch = false;
    playeringame[1] = playeringame[2] = playeringame[3] = 0;
    respawnparm = false;
    fastparm = false;
    nomonsters = false;
    consoleplayer = 0;
    G_InitNew (d_skill, d_episode, d_map); 
    gameaction = ga_nothing; 
} 

// The sky texture to be used instead of the F_SKY1 dummy.
extern  int	skytexture; 


void
G_InitNew
( skill_t	skill,
  int		episode,
  int		map ) 
{ 
    int             i; 
	 
    if (paused) 
    { 
	paused = false; 
	S_ResumeSound (); 
    } 
	

    if (skill > sk_nightmare) 
	skill = sk_nightmare;


    // This was quite messy with SPECIAL and commented parts.
    // Supposedly hacks to make the latest edition work.
    // It might not work properly.
    if (episode < 1)
      episode = 1; 

    if ( gamemode == retail )
    {
      if (episode > 4)
	episode = 4;
    }
    else if ( gamemode == shareware )
    {
      if (episode > 1) 
	   episode = 1;	// only start episode 1 on shareware
    }  
    else
    {
      if (episode > 3)
	episode = 3;
    }
    

  
    if (map < 1) 
	map = 1;
    
    if ( (map > 9)
	 && ( gamemode != commercial) )
      map = 9; 
		 
    //WriteDebug("M_ClearRandom\n");
    M_ClearRandom (); 
	 
    if (skill == sk_nightmare || respawnparm )
	respawnmonsters = true;
    else
	respawnmonsters = false;
		
    if (fastparm || (skill == sk_nightmare && gameskill != sk_nightmare) )
    { 
	for (i=S_SARG_RUN1 ; i<=S_SARG_PAIN2 ; i++) 
	    states[i].tics >>= 1; 
	mobjinfo[MT_BRUISERSHOT].speed = 20*FRACUNIT; 
	mobjinfo[MT_HEADSHOT].speed = 20*FRACUNIT; 
	mobjinfo[MT_TROOPSHOT].speed = 20*FRACUNIT; 
    } 
    else if (skill != sk_nightmare && gameskill == sk_nightmare) 
    { 
	for (i=S_SARG_RUN1 ; i<=S_SARG_PAIN2 ; i++) 
	    states[i].tics <<= 1; 
	mobjinfo[MT_BRUISERSHOT].speed = 15*FRACUNIT; 
	mobjinfo[MT_HEADSHOT].speed = 10*FRACUNIT; 
	mobjinfo[MT_TROOPSHOT].speed = 10*FRACUNIT; 
    } 
	 
			 
    // force players to be initialized upon first level load         
    for (i=0 ; i<MAXPLAYERS ; i++) 
	players[i].playerstate = PST_REBORN; 
 
    usergame = true;                // will be set false if a demo 
    paused = false; 
    demoplayback = false; 
    automapactive = false; 
    viewactive = true; 
    gameepisode = episode; 
    gamemap = map; 
    gameskill = skill; 
 
    viewactive = true;
    
    // set the sky map for the episode
    if ( gamemode == commercial)
    {
	skytexture = R_TextureNumForName ("SKY3");
	if (gamemap < 12)
	    skytexture = R_TextureNumForName ("SKY1");
	else
	    if (gamemap < 21)
		skytexture = R_TextureNumForName ("SKY2");
    }
    else
	switch (episode) 
	{ 
	  case 1: 
	    skytexture = R_TextureNumForName ("SKY1"); 
	    break; 
	  case 2: 
	    skytexture = R_TextureNumForName ("SKY2"); 
	    break; 
	  case 3: 
	    skytexture = R_TextureNumForName ("SKY3"); 
	    break; 
	  case 4:	// Special Edition sky
	    skytexture = R_TextureNumForName ("SKY4");
	    break;
	} 
 
    //WriteDebug("G_DoLoadLevel\n");
    setsizeneeded = TRUE;
    G_DoLoadLevel (); 
} 
 

//
// DEMO RECORDING 
// 
#define DEMOMARKER		0x80


void G_ReadDemoTiccmd (ticcmd_t* cmd) 
{ 
    if (*demo_p == DEMOMARKER) 
    {
	// end of demo data stream 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合网色综合| 美女视频一区在线观看| 99国产精品久久久久久久久久久 | 成人av手机在线观看| 亚洲免费av观看| 91精品国产综合久久精品图片 | 91成人在线精品| 日本vs亚洲vs韩国一区三区二区| 国产欧美日韩激情| 在线综合亚洲欧美在线视频| 91精品国产色综合久久ai换脸| 大桥未久av一区二区三区中文| 午夜成人在线视频| 日韩理论片一区二区| 精品国产免费一区二区三区四区 | 五月婷婷激情综合| 久久99热狠狠色一区二区| 亚洲精品日韩专区silk| 欧美国产日韩精品免费观看| 精品视频一区三区九区| 成人动漫一区二区在线| 91麻豆福利精品推荐| 国产成人免费网站| 久久不见久久见中文字幕免费| 国产在线播放一区| 美女视频第一区二区三区免费观看网站| 免费人成网站在线观看欧美高清| 国产一区二区看久久| 91丨porny丨在线| 日韩一区二区三区视频| 91麻豆精品久久久久蜜臀| 国产亚洲欧美在线| 久久中文娱乐网| 精品久久久久香蕉网| 9191成人精品久久| 国产亚洲成aⅴ人片在线观看| 亚洲三级在线看| 精品综合免费视频观看| 另类调教123区| 91日韩在线专区| 欧美一级国产精品| 一区二区三区免费在线观看| 一区二区三区国产| 国内成人免费视频| 国产成人在线免费| 欧美日韩国产精品自在自线| 在线播放日韩导航| 日韩一区二区影院| 亚洲自拍另类综合| 香港成人在线视频| 蜜臀久久久99精品久久久久久| 成人av在线一区二区| 91精品国产综合久久香蕉的特点| 亚洲日韩欧美一区二区在线| 国产精品一区免费视频| 成人的网站免费观看| 91精品国产色综合久久不卡蜜臀| 亚洲精品欧美在线| 99re在线精品| 成人欧美一区二区三区| 亚洲一区二区视频在线| 国产ts人妖一区二区| 91麻豆123| 亚洲欧美偷拍卡通变态| 成人网在线免费视频| 国产午夜久久久久| 国产成人啪午夜精品网站男同| 欧美成人aa大片| 美女mm1313爽爽久久久蜜臀| 欧美精品 日韩| 视频一区二区中文字幕| 国产在线视频不卡二| 日韩一区二区视频| 久久99国产精品久久99果冻传媒| 欧美一区二区三区爱爱| 视频一区中文字幕国产| 欧美二区三区91| 日韩avvvv在线播放| 国产999精品久久| 久久久777精品电影网影网 | 亚洲成人一区在线| 欧美日韩精品一区二区三区四区 | 综合分类小说区另类春色亚洲小说欧美| 国产麻豆91精品| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩高清在线| 午夜电影久久久| 精品国产免费久久| 福利视频网站一区二区三区| www国产亚洲精品久久麻豆| 国产成人三级在线观看| 亚洲欧洲日产国产综合网| 一本色道久久加勒比精品| 久久久国产一区二区三区四区小说| 亚洲综合久久av| 日韩一级完整毛片| 国产精品18久久久久久久久| **欧美大码日韩| 欧美猛男超大videosgay| 老司机午夜精品99久久| 中文字幕乱码亚洲精品一区| 欧美三级一区二区| 国产做a爰片久久毛片| 国产精品你懂的在线| 国产精品亚洲一区二区三区在线| 国产精品剧情在线亚洲| 国产91精品在线观看| 亚洲乱码中文字幕| 日韩欧美一级二级| 日本中文字幕一区二区视频| 久久美女高清视频| 欧美亚洲动漫另类| 亚洲影视在线观看| 久久久国产精品午夜一区ai换脸| 91美女蜜桃在线| 国产综合色在线| 亚洲国产aⅴ成人精品无吗| 精品视频在线视频| 国产成人精品www牛牛影视| 亚洲国产欧美在线| 中文字幕成人在线观看| 欧美一区二区成人| 色综合视频一区二区三区高清| 久久99久久99精品免视看婷婷 | 亚洲一本大道在线| 国产精品不卡视频| 久久综合九色综合97婷婷女人| 欧美日韩你懂得| a4yy欧美一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 精品美女一区二区| 欧美日韩国产一区二区三区地区| 成人aaaa免费全部观看| 国产成人精品综合在线观看 | 久久色.com| 91精品国产aⅴ一区二区| 色狠狠一区二区| 99国产麻豆精品| av亚洲精华国产精华精华| 国产不卡高清在线观看视频| 国产麻豆精品95视频| 久久99精品久久久久久国产越南| 午夜精品久久久久久久99水蜜桃 | 欧美一区二区视频观看视频| 欧美中文字幕一区| 免费黄网站欧美| 丝袜诱惑亚洲看片| 亚洲一区在线观看视频| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美性极品少妇| 一本到不卡免费一区二区| 高清久久久久久| 成人av午夜影院| caoporm超碰国产精品| 99这里只有久久精品视频| 99久久夜色精品国产网站| 99re热这里只有精品免费视频| 91在线免费看| 欧美在线免费视屏| 欧美精品在线视频| 欧美大片免费久久精品三p | 国产精品123| 国产a视频精品免费观看| 成人性生交大片| 色综合久久综合网欧美综合网| 欧美最新大片在线看| 91麻豆精品国产自产在线| 日韩欧美国产成人一区二区| 亚洲欧美国产三级| 香蕉成人伊视频在线观看| 韩国av一区二区三区| 北条麻妃一区二区三区| 在线观看一区不卡| 日韩欧美在线影院| 久久久午夜精品理论片中文字幕| 国产精品免费视频观看| 中文字幕在线一区| 亚洲chinese男男1069| 激情综合网激情| 99re这里只有精品首页| 日韩一区二区影院| 国产精品久久久久影视| 天堂蜜桃91精品| 国产91精品一区二区麻豆亚洲| 在线观看欧美黄色| 精品福利在线导航| 一区二区三区国产| 国产91精品入口| 欧美久久久久免费| 国产精品国产精品国产专区不蜜| 亚洲影视在线观看| 国产成人免费视频网站高清观看视频 | 高清视频一区二区| 色丁香久综合在线久综合在线观看| 欧美三级日韩在线| 中文字幕不卡的av| 亚洲最色的网站| www.日韩av| 亚洲午夜久久久久久久久久久| 国产女人18毛片水真多成人如厕 |