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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? m_menu.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
// 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 selection menu, options, episode etc.
//	Sliders and icons. Kinda widget stuff.
//
//-----------------------------------------------------------------------------

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

//#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <ctype.h>
#include <io.h>


#include "doomdef.h"
#include "dstrings.h"

#include "d_main.h"

#include "i_system.h"
#include "i_video.h"
#include "z_zone.h"
#include "v_video.h"
#include "w_wad.h"

#include "r_local.h"


#include "hu_stuff.h"

#include "g_game.h"

#include "m_argv.h"
#include "m_swap.h"

#include "s_sound.h"

#include "doomstat.h"

// Data.
#include "sounds.h"

#include "m_menu.h"

#include "d_console.h"

void WriteDebug(char *);

extern patch_t*		hu_font[HU_FONTSIZE];
extern boolean		message_dontfuckwithme;

extern boolean		chat_on;		// in heads-up code

extern int          always_run;

//
// defaulted values
//
int			mouseSensitivity;       // has default

// Show messages has default, 0 = off, 1 = on
int			showMessages;
	

// Blocky mode, has default, 0 = high, 1 = normal
int			detailLevel = 0;		
int			screenblocks = 9;		// has default

// temp for screenblocks (0-9)
int			screenSize;		

// -1 = no quicksave slot picked!
int			quickSaveSlot;          

 // 1 = message to be printed
int			messageToPrint;
// ...and here is the message string!
char*			messageString;		

// message x & y
int			messx;			
int			messy;
int			messageLastMenuActive;

// timed message = no input from user
boolean			messageNeedsInput;     

void    (*messageRoutine)(int response);

#define SAVESTRINGSIZE 	24

char gammamsg[5][26] =
{
    GAMMALVL0,
    GAMMALVL1,
    GAMMALVL2,
    GAMMALVL3,
    GAMMALVL4
};

// we are going to be entering a savegame string
int			saveStringEnter;              
int             	saveSlot;	// which slot to save in
int			saveCharIndex;	// which char we're editing
// old save description before edit
char			saveOldString[SAVESTRINGSIZE];  

boolean			inhelpscreens;
boolean			menuactive;

#define SKULLXOFF		-32
#define LINEHEIGHT		16

extern boolean		sendpause;
char			savegamestrings[10][SAVESTRINGSIZE];

char	endstring[160];


//
// MENU TYPEDEFS
//
// DQ moved this typedef into doomtype.h
//typedef struct
//{
//    // 0 = no cursor here, 1 = ok, 2 = arrows ok
//    short	status;
//    
//    char	name[10];
//    
//    // choice = menu item #.
//    // if status = 2,
//    //   choice=0:leftarrow,1:rightarrow
//    void	(*routine)(int choice);
//    
//    // hotkey in menu
//    char	alphaKey;			
//} menuitem_t;



// DQ moved this typedef into doomtype.h
//typedef struct menu_s
//{
//    short		numitems;	// # of menu items
//    struct menu_s*	prevMenu;	// previous menu
//    menuitem_t*		menuitems;	// menu items
//	 // DQ start addition
//	 void		(*routine)(int PixelOffset, PBUFFER RenderBuffer);	// draw routine
//	 // DQ end addition
//    // original void		(*routine)(void);	// draw routine
//    short		x;
//    short		y;		// x,y of menu
//    short		lastOn;		// last item user was on in menu
//} menu_t;

short		itemOn;			// menu item skull is on
short		skullAnimCounter;	// skull animation counter
short		whichSkull;		// which skull to draw

// graphic name of skulls
// warning: initializer-string for array of chars is too long
char    skullName[2][/*8*/9] = {"M_SKULL1","M_SKULL2"};

// current menudef
menu_t*	currentMenu;                          

//
// PROTOTYPES
//
void M_NewGame(int choice);
void M_Episode(int choice);
void M_ChooseSkill(int choice);
void M_LoadGame(int choice);
void M_SaveGame(int choice);
void M_Options(int choice);
void M_EndGame(int choice);
void M_ReadThis(int choice);
void M_ReadThis2(int choice);
void M_QuitDOOM(int choice);

void M_ChangeMessages(int choice);
void M_ChangeSensitivity(int choice);
void M_SfxVol(int choice);
void M_MusicVol(int choice);
void M_ChangeDetail(int choice);
void M_SizeDisplay(int choice);
void M_StartGame(int choice);
void M_Sound(int choice);

void M_FinishReadThis(int choice);
void M_LoadSelect(int choice);
void M_SaveSelect(int choice);
void M_ReadSaveStrings(void);
void M_QuickSave(void);
void M_QuickLoad(void);

// DQ start additions
void M_DrawMainMenu(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawReadThis1(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawReadThis2(int PixelOffset,PBUFFER RenderBuffer);
void M_DrawNewGame(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawEpisode(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawOptions(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawSound(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawLoad(int PixelOffset, PBUFFER RenderBuffer);
void M_DrawSave(int PixelOffset, PBUFFER RenderBuffer);
// DQ end additions
// originals
//void M_DrawMainMenu(void);
//void M_DrawReadThis1(void);
//void M_DrawReadThis2(void);
//void M_DrawNewGame(void);
//void M_DrawEpisode(void);
//void M_DrawOptions(void);
//void M_DrawSound(void);
//void M_DrawLoad(void);
//void M_DrawSave(void);

void M_DrawSaveLoadBorder(int x,int y, PBUFFER RenderBuffer); // DQ
//void M_DrawSaveLoadBorder(int x,int y);
void M_SetupNextMenu(menu_t *menudef);
void M_DrawThermo
( int	x,
  int	y,
  int	thermWidth,
  int	thermDot, 
  PBUFFER RenderBuffer); //DQ
//void M_DrawThermo(int x,int y,int thermWidth,int thermDot);
void M_DrawEmptyCell
( menu_t*	menu,
  int		item,
  PBUFFER RenderBuffer); //DQ
//void M_DrawEmptyCell(menu_t *menu,int item);
void M_DrawSelCell
( menu_t*	menu,
  int		item,
  PBUFFER RenderBuffer); //DQ
//void M_DrawSelCell(menu_t *menu,int item);
void M_WriteText( int x, int y, char *string, PBUFFER RenderBuffer); //DQ
//void M_WriteText(int x, int y, char *string);
int  M_StringWidth(char *string);
int  M_StringHeight(char *string);
void M_StartControlPanel(void);
void M_StartMessage(char *string,void *routine,boolean input);
void M_StopMessage(void);
void M_ClearMenus (void);


extern unsigned char scan2char[256];

//
// DOOM MENU
//
enum
{
    newgame = 0,
    options,
    loadgame,
    savegame,
    readthis,
    quitdoom,
    main_end
} main_e;

menuitem_t MainMenu[]=
{
    {1,"M_NGAME",M_NewGame,'n'},
    {1,"M_OPTION",M_Options,'o'},
    {1,"M_LOADG",M_LoadGame,'l'},
    {1,"M_SAVEG",M_SaveGame,'s'},
    // Another hickup with Special edition.
    {1,"M_RDTHIS",M_ReadThis,'r'},
    {1,"M_QUITG",M_QuitDOOM,'q'}
};

menu_t  MainDef =
{
    main_end,
    NULL,
    MainMenu,
    M_DrawMainMenu,
    97,64,
    0
};


//
// EPISODE SELECT
//
enum
{
    ep1,
    ep2,
    ep3,
    ep4,
    ep_end
} episodes_e;

menuitem_t EpisodeMenu[]=
{
    {1,"M_EPI1", M_Episode,'k'},
    {1,"M_EPI2", M_Episode,'t'},
    {1,"M_EPI3", M_Episode,'i'},
    {1,"M_EPI4", M_Episode,'t'}
};

menu_t  EpiDef =
{
    ep_end,		// # of menu items
    &MainDef,		// previous menu
    EpisodeMenu,	// menuitem_t ->
    M_DrawEpisode,	// drawing routine ->
    48,63,              // x,y
    ep1			// lastOn
};

//
// NEW GAME
//
enum
{
    killthings,
    toorough,
    hurtme,
    violence,
    nightmare,
    newg_end
} newgame_e;

menuitem_t NewGameMenu[]=
{
    {1,"M_JKILL",	M_ChooseSkill, 'i'},
    {1,"M_ROUGH",	M_ChooseSkill, 'h'},
    {1,"M_HURT",	M_ChooseSkill, 'h'},
    {1,"M_ULTRA",	M_ChooseSkill, 'u'},
    {1,"M_NMARE",	M_ChooseSkill, 'n'}
};

menu_t  NewDef =
{
    newg_end,		// # of menu items
    &EpiDef,		// previous menu
    NewGameMenu,	// menuitem_t ->
    M_DrawNewGame,	// drawing routine ->
    48,63,              // x,y
    hurtme		// lastOn
};



//
// OPTIONS MENU
//
enum
{
    endgame,
    messages,
    detail,
    scrnsize,
    option_empty1,
    mousesens,
    option_empty2,
    soundvol,
    opt_end
} options_e;

menuitem_t OptionsMenu[]=
{
    {1,"M_ENDGAM",	M_EndGame,'e'},
    {1,"M_MESSG",	M_ChangeMessages,'m'},
    {1,"M_DETAIL",	M_ChangeDetail,'g'},
    {2,"M_SCRNSZ",	M_SizeDisplay,'s'},
    {-1,"",0},
    {2,"M_MSENS",	M_ChangeSensitivity,'m'},
    {-1,"",0},
    {1,"M_SVOL",	M_Sound,'s'}
};

menu_t  OptionsDef =
{
    opt_end,
    &MainDef,
    OptionsMenu,
    M_DrawOptions,
    60,37,
    0
};

//
// Read This! MENU 1 & 2
//
enum
{
    rdthsempty1,
    read1_end
} read_e;

menuitem_t ReadMenu1[] =
{
    {1,"",M_ReadThis2,0}
};

menu_t  ReadDef1 =
{
    read1_end,
    &MainDef,
    ReadMenu1,
    M_DrawReadThis1,
    280,185,
    0
};

enum
{
    rdthsempty2,
    read2_end
} read_e2;

menuitem_t ReadMenu2[]=
{
    {1,"",M_FinishReadThis,0}
};

menu_t  ReadDef2 =
{
    read2_end,
    &ReadDef1,
    ReadMenu2,
    M_DrawReadThis2,
    330,175,
    0
};

//
// SOUND VOLUME MENU
//
enum
{
    sfx_vol,
    sfx_empty1,
    music_vol,
    sfx_empty2,
    sound_end
} sound_e;

menuitem_t SoundMenu[]=
{
    {2,"M_SFXVOL",M_SfxVol,'s'},
    {-1,"",0},
    {2,"M_MUSVOL",M_MusicVol,'m'},
    {-1,"",0}
};

menu_t  SoundDef =
{
    sound_end,
    &OptionsDef,
    SoundMenu,
    M_DrawSound,
    80,64,
    0
};

//
// LOAD GAME MENU
//
enum
{
    load1,
    load2,
    load3,
    load4,
    load5,
    load6,
    load_end
} load_e;

menuitem_t LoadGameMenu[]=
{
    {1,"", M_LoadSelect,'1'},
    {1,"", M_LoadSelect,'2'},
    {1,"", M_LoadSelect,'3'},
    {1,"", M_LoadSelect,'4'},
    {1,"", M_LoadSelect,'5'},
    {1,"", M_LoadSelect,'6'}
};

menu_t  LoadDef =
{
    load_end,
    &MainDef,
    LoadGameMenu,
    M_DrawLoad,
    80,54,
    0
};

//
// SAVE GAME MENU
//
menuitem_t SaveMenu[]=
{
    {1,"", M_SaveSelect,'1'},
    {1,"", M_SaveSelect,'2'},
    {1,"", M_SaveSelect,'3'},
    {1,"", M_SaveSelect,'4'},
    {1,"", M_SaveSelect,'5'},
    {1,"", M_SaveSelect,'6'}
};

menu_t  SaveDef =
{
    load_end,
    &MainDef,
    SaveMenu,
    M_DrawSave,
    80,54,
    0
};


//
// M_ReadSaveStrings
//  read the strings from the savegame files
//
void M_ReadSaveStrings(void)
{
    int             handle;
    int             count;
    int             i;
    char    name[256];
	
    for (i = 0;i < load_end;i++)
    {
	if (M_CheckParm("-cdrom"))
	    sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",i);
	else
	    sprintf(name,SAVEGAMENAME"%d.dsg",i);

	handle = open (name, O_RDONLY | 0, 0666);
	if (handle == -1)
	{
	    strcpy(&savegamestrings[i][0],EMPTYSTRING);
	    LoadGameMenu[i].status = 0;
	    continue;
	}
	count = read (handle, &savegamestrings[i], SAVESTRINGSIZE);
	close (handle);
	LoadGameMenu[i].status = 1;
    }
}


//
// M_LoadGame & Cie.
//
// DQ start addition
void M_DrawLoad(int PixelOffset, PBUFFER RenderBuffer)
// DQ end addition
//void M_DrawLoad(void)
{
    int             i;
	
    V_DrawPatchDirect(((SCREENWIDTH-320)/2)+72 + PixelOffset/*DQ*/,
		 ((SCREENHEIGHT-200)/2)+28,RenderBuffer/*DQ 0*/, W_CacheLumpName("M_LOADG",PU_CACHE));
    for (i = 0;i < load_end; i++)
    {
	M_DrawSaveLoadBorder(((SCREENWIDTH-320)/2)+LoadDef.x + PixelOffset/*DQ*/,
		((SCREENHEIGHT-200)/2)+LoadDef.y+LINEHEIGHT*i, RenderBuffer);
	M_WriteText(((SCREENWIDTH-320)/2)+LoadDef.x + PixelOffset/*DQ*/,
		((SCREENHEIGHT-200)/2)+LoadDef.y+LINEHEIGHT*i,savegamestrings[i], RenderBuffer);
    }
}



//
// Draw border for the savegame description
//
void M_DrawSaveLoadBorder(int x,int y, PBUFFER RenderBuffer) // DQ
//void M_DrawSaveLoadBorder(int x,int y)
{
    int             i;
	
    V_DrawPatchDirect (x-8,y+7,RenderBuffer/*DQ 0*/, W_CacheLumpName("M_LSLEFT",PU_CACHE));
	
    for (i = 0;i < 24;i++)
    {
	V_DrawPatchDirect (x,y+7,RenderBuffer/*DQ 0*/, W_CacheLumpName("M_LSCNTR",PU_CACHE));
	x += 8;
    }

    V_DrawPatchDirect (x,y+7,RenderBuffer/*DQ 0*/, W_CacheLumpName("M_LSRGHT",PU_CACHE));
}



//
// User wants to load this game
//
void M_LoadSelect(int choice)
{
    char    name[256];
	
    if (M_CheckParm("-cdrom"))
	sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",choice);
    else
	sprintf(name,SAVEGAMENAME"%d.dsg",choice);
    G_LoadGame (name);
    M_ClearMenus ();
}

//
// Selected from DOOM menu
//
void M_LoadGame (int choice)
{
    if (netgame)
    {
	M_StartMessage(LOADNET,NULL,false);
	return;
    }
	
    M_SetupNextMenu(&LoadDef);
    M_ReadSaveStrings();
}


//
//  M_SaveGame & Cie.
//
// DQ start addition
void M_DrawSave(int PixelOffset, PBUFFER RenderBuffer)
// DQ end addition
//void M_DrawSave(void)
{
    int             i;
	
    V_DrawPatchDirect (((SCREENWIDTH-320)/2)+72 + PixelOffset/*DQ*/,
		 ((SCREENHEIGHT-200)/2)+28,RenderBuffer/*DQ 0*/, W_CacheLumpName("M_SAVEG",PU_CACHE));
    for (i = 0;i < load_end; i++)
    {
	M_DrawSaveLoadBorder(((SCREENWIDTH-320)/2)+LoadDef.x + PixelOffset/*DQ*/,
		((SCREENHEIGHT-200)/2)+LoadDef.y+LINEHEIGHT*i, RenderBuffer);
	M_WriteText(((SCREENWIDTH-320)/2)+LoadDef.x + PixelOffset/*DQ*/,
		((SCREENHEIGHT-200)/2)+LoadDef.y+LINEHEIGHT*i,savegamestrings[i], RenderBuffer);
    }
	
    if (saveStringEnter)
    {
	i = M_StringWidth(savegamestrings[saveSlot]);
	M_WriteText(((SCREENWIDTH-320)/2)+LoadDef.x + i  + PixelOffset/*DQ*/,
		((SCREENHEIGHT-200)/2)+LoadDef.y+LINEHEIGHT*saveSlot,"_", RenderBuffer);
    }
}

//
// M_Responder calls this when user is finished

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清在线观看免费不卡| 久久99精品国产麻豆不卡| 国产欧美日韩另类一区| 久久久五月婷婷| 国产欧美日韩中文久久| 久久精品日产第一区二区三区高清版| 日韩一区二区免费视频| 欧美电影免费观看高清完整版| 宅男在线国产精品| 26uuu国产电影一区二区| 久久久五月婷婷| 国产精品护士白丝一区av| 中文字幕一区二区在线观看| 亚洲免费在线视频| 亚洲国产精品一区二区www在线| 亚洲高清在线视频| 黑人精品欧美一区二区蜜桃| 国产一区二区三区在线观看免费 | 国精产品一区一区三区mba视频| 久久疯狂做爰流白浆xx| 国产99一区视频免费| 欧洲色大大久久| 日韩精品中文字幕在线不卡尤物| 国产亚洲一区二区三区| 国产精品第13页| 日韩av一区二区三区| 国内精品伊人久久久久av一坑 | 色婷婷av一区二区三区gif| 欧美日韩成人在线一区| 日韩小视频在线观看专区| 中文av一区二区| 亚洲第一av色| 国产成人小视频| 制服丝袜日韩国产| 亚洲欧洲一区二区三区| 日本视频中文字幕一区二区三区| 国产成人av电影在线观看| 欧美日韩精品电影| 国产色产综合色产在线视频| 一区二区三区在线免费| 国产麻豆一精品一av一免费| 欧美日韩免费高清一区色橹橹 | 91黄色免费观看| 久久亚洲春色中文字幕久久久| 亚洲精品久久嫩草网站秘色| 国产一区二区三区免费| 欧美日韩免费观看一区二区三区| 国产亚洲欧美一区在线观看| 亚洲国产日韩a在线播放| 国产91精品精华液一区二区三区 | 婷婷综合五月天| 波多野结衣亚洲一区| 亚洲精品在线免费观看视频| 亚洲午夜精品在线| 99这里只有精品| 精品少妇一区二区三区日产乱码| 亚洲图片自拍偷拍| 91浏览器在线视频| 亚洲欧洲日韩一区二区三区| 国产麻豆精品在线观看| 日韩一级精品视频在线观看| 午夜视频久久久久久| 色菇凉天天综合网| 一区二区视频在线| 成人白浆超碰人人人人| 国产欧美中文在线| 国产不卡视频在线观看| 久久久99精品久久| 国内精品免费**视频| 精品国产乱码久久久久久老虎| 奇米影视7777精品一区二区| 欧美一区二区三区四区高清| 日本在线不卡一区| 69堂国产成人免费视频| 日本不卡一二三| 日韩欧美一二三区| 国产乱码字幕精品高清av| 欧美成人vps| 国产美女av一区二区三区| 久久精品视频在线免费观看| 国产suv精品一区二区883| 国产片一区二区| 成人国产一区二区三区精品| 日韩毛片视频在线看| 在线亚洲人成电影网站色www| 亚洲女人小视频在线观看| 91日韩精品一区| 亚洲一区二区三区四区五区中文 | 久久午夜羞羞影院免费观看| 粉嫩在线一区二区三区视频| 亚洲人成精品久久久久| 欧美日韩免费观看一区二区三区| 视频一区国产视频| 久久久久久久综合色一本| 不卡av电影在线播放| 亚洲精品伦理在线| 欧美一区2区视频在线观看| 国产麻豆精品theporn| 国产精品的网站| 欧美一区国产二区| 懂色av噜噜一区二区三区av| 亚洲精品中文字幕在线观看| 日韩一区二区三| 成人在线综合网| 日韩高清电影一区| 国产精品成人在线观看| 欧美色图12p| 国产99久久久国产精品潘金| 亚洲 欧美综合在线网络| 久久人人爽人人爽| 欧美体内she精视频| 精品午夜久久福利影院| 一区二区三区在线免费观看 | 中文字幕一区二区在线观看 | 成人av网站大全| 青娱乐精品视频在线| 亚洲免费在线播放| 久久精子c满五个校花| 欧美综合天天夜夜久久| 国产精品一二三四区| 午夜电影一区二区| 亚洲视频精选在线| 久久久久久免费| 日韩欧美www| 欧洲一区二区三区在线| 成人精品一区二区三区四区| 青青青爽久久午夜综合久久午夜| 国产精品福利一区二区三区| 精品美女被调教视频大全网站| 欧美怡红院视频| 成人午夜私人影院| 国产精品一区免费在线观看| 天天综合色天天综合色h| 亚洲精品视频自拍| 国产精品美女一区二区在线观看| 精品久久久久香蕉网| 在线播放中文字幕一区| 欧美性色综合网| 色婷婷激情久久| 一本久久a久久精品亚洲| www.欧美精品一二区| 成人一区二区视频| 国产黑丝在线一区二区三区| 久久国产精品色婷婷| 九九国产精品视频| 另类中文字幕网| 狠狠v欧美v日韩v亚洲ⅴ| 国产主播一区二区三区| 美女看a上一区| 狠狠色丁香久久婷婷综| 国产一区久久久| 国产一级精品在线| 国产精品456| av激情综合网| 99久久夜色精品国产网站| 91首页免费视频| 在线观看日韩电影| 欧美日韩色一区| 欧美区一区二区三区| 在线综合+亚洲+欧美中文字幕| 91精品免费在线| 精品欧美一区二区久久| 亚洲国产精品高清| 亚洲日本青草视频在线怡红院 | 欧美精品一区二区三区高清aⅴ| 亚洲精品在线网站| 国产精品欧美经典| 亚洲综合成人网| 美女视频黄 久久| 国产高清亚洲一区| 色综合天天在线| 欧美日韩国产一区二区三区地区| 69久久99精品久久久久婷婷| 日韩欧美一区电影| 国产精品日产欧美久久久久| 一区二区三区免费观看| 麻豆一区二区三区| 成人午夜激情视频| 欧美日韩中字一区| 久久久久久亚洲综合影院红桃 | 中文字幕一区二区三区在线观看 | 国产精品丝袜一区| 亚洲综合在线五月| 国产一区二区导航在线播放| 色狠狠综合天天综合综合| 欧美一区二区三区视频免费| 国产精品视频线看| 日韩经典一区二区| 成年人网站91| 精品99一区二区三区| 亚洲国产精品久久久久婷婷884| 久久国产精品第一页| 日本电影欧美片| 久久欧美一区二区| 婷婷综合五月天| 色婷婷av一区二区| 国产精品系列在线| 狠狠久久亚洲欧美| 91精品国产综合久久国产大片 | 欧美一区二区福利视频|