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

📄 mn_menu.c

📁 制作游戏 魔法师传奇 源代码设计 MOFASHICHUANQI 经典老游戏
💻 C
📖 第 1 页 / 共 3 页
字号:
		}		else		{			InfoType = (InfoType+1)%4;		}		if(key == KEY_ESCAPE)		{			InfoType = 0;		}		if(!InfoType)		{			if(!netgame && !demoplayback)			{				paused = false;			}			MN_DeactivateMenu();			SB_state = -1; //refresh the statbar			BorderNeedRefresh = true;		}		S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);		return(true); //make the info screen eat the keypress	}	if(ravpic && key == KEY_F1)	{		G_ScreenShot();		return(true);	}	if(askforquit)	{		switch(key)		{			case 'y':				if(askforquit)				{					switch(typeofask)					{						case 1:							G_CheckDemoStatus(); 							I_Quit();							break;						case 2:							P_ClearMessage(&players[consoleplayer]);							typeofask = 0;							askforquit = false;							paused = false;							I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));							H2_StartTitle(); // go to intro/demo mode.							break;						case 3:							P_SetMessage(&players[consoleplayer], 								"QUICKSAVING....", false);							FileMenuKeySteal = true;							SCSaveGame(quicksave-1);							askforquit = false;							typeofask = 0;							BorderNeedRefresh = true;							return true;						case 4:							P_SetMessage(&players[consoleplayer], 								"QUICKLOADING....", false);							SCLoadGame(quickload-1);							askforquit = false;							typeofask = 0;							BorderNeedRefresh = true;							return true;						case 5:							askforquit = false;							typeofask = 0;								BorderNeedRefresh = true;							mn_SuicideConsole = true;							return true;							break;						default:							return true; // eat the 'y' keypress					}				}				return false;			case 'n':			case KEY_ESCAPE:				if(askforquit)				{					players[consoleplayer].messageTics = 0;					askforquit = false;					typeofask = 0;					paused = false;					UpdateState |= I_FULLSCRN;					BorderNeedRefresh = true;					return true;				}				return false;		}		return false; // don't let the keys filter thru	}	if(MenuActive == false && !chatmodeon)	{		switch(key)		{			case KEY_MINUS:				if(automapactive)				{ // Don't screen size in automap					return(false);				}				SCScreenSize(LEFT_DIR);				S_StartSound(NULL, SFX_PICKUP_KEY);				BorderNeedRefresh = true;				UpdateState |= I_FULLSCRN;				return(true);			case KEY_EQUALS:				if(automapactive)				{ // Don't screen size in automap					return(false);				}				SCScreenSize(RIGHT_DIR);				S_StartSound(NULL, SFX_PICKUP_KEY);				BorderNeedRefresh = true;				UpdateState |= I_FULLSCRN;				return(true);#ifdef __NeXT__			case 'q':				MenuActive = false;				askforquit = true;				typeofask = 5; // suicide				return true;#endif#ifndef __NeXT__			case KEY_F1: // help screen				SCInfo(0); // start up info screens				MenuActive = true;				return(true);			case KEY_F2: // save game				if(gamestate == GS_LEVEL && !demoplayback)				{					MenuActive = true;					FileMenuKeySteal = false;					MenuTime = 0;					CurrentMenu = &SaveMenu;					CurrentItPos = CurrentMenu->oldItPos;					if(!netgame && !demoplayback)					{						paused = true;					}					S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);					slottextloaded = false; //reload the slot text, when needed				}				return true;			case KEY_F3: // load game				if(SCNetCheck(2))				{					MenuActive = true;					FileMenuKeySteal = false;					MenuTime = 0;					CurrentMenu = &LoadMenu;					CurrentItPos = CurrentMenu->oldItPos;					if(!netgame && !demoplayback)					{						paused = true;					}					S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);					slottextloaded = false; //reload the slot text, when needed				}				return true;			case KEY_F4: // volume				MenuActive = true;				FileMenuKeySteal = false;				MenuTime = 0;				CurrentMenu = &Options2Menu;				CurrentItPos = CurrentMenu->oldItPos;				if(!netgame && !demoplayback)				{					paused = true;				}				S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);				slottextloaded = false; //reload the slot text, when needed				return true;			case KEY_F5:				MenuActive = false;				askforquit = true;				typeofask = 5; // suicide				return true;			case KEY_F6: // quicksave				if(gamestate == GS_LEVEL && !demoplayback)				{					if(!quicksave || quicksave == -1)					{						MenuActive = true;						FileMenuKeySteal = false;						MenuTime = 0;						CurrentMenu = &SaveMenu;						CurrentItPos = CurrentMenu->oldItPos;						if(!netgame && !demoplayback)						{							paused = true;						}						S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);						slottextloaded = false; //reload the slot text						quicksave = -1;						P_SetMessage(&players[consoleplayer],							"CHOOSE A QUICKSAVE SLOT", true);					}					else					{						askforquit = true;						typeofask = 3;						if(!netgame && !demoplayback)						{							paused = true;						}						S_StartSound(NULL, SFX_CHAT);					}				}				return true;			case KEY_F7: // endgame				if(SCNetCheck(3))				{					if(gamestate == GS_LEVEL && !demoplayback)					{						S_StartSound(NULL, SFX_CHAT);						SCEndGame(0);					}				}				return true;			case KEY_F8: // toggle messages				SCMessages(0);				return true;			case KEY_F9: // quickload				if(SCNetCheck(2))				{					if(!quickload || quickload == -1)					{						MenuActive = true;						FileMenuKeySteal = false;						MenuTime = 0;						CurrentMenu = &LoadMenu;						CurrentItPos = CurrentMenu->oldItPos;						if(!netgame && !demoplayback)						{							paused = true;						}						S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);						slottextloaded = false; // reload the slot text						quickload = -1;						P_SetMessage(&players[consoleplayer],							"CHOOSE A QUICKLOAD SLOT", true);					}					else					{						askforquit = true;						if(!netgame && !demoplayback)						{							paused = true;						}						typeofask = 4;						S_StartSound(NULL, SFX_CHAT);					}				}				return true;			case KEY_F10: // quit				if(gamestate == GS_LEVEL || gamestate == GS_FINALE)				{					SCQuitGame(0);					S_StartSound(NULL, SFX_CHAT);				}				return true;			case KEY_F11: // F11 - gamma mode correction				usegamma++;				if(usegamma > 4)				{					usegamma = 0;				}				SB_PaletteFlash(true); // force change				P_SetMessage(&players[consoleplayer], GammaText[usegamma],					false);				return true;			case KEY_F12: // F12 - reload current map (devmaps mode)				if(netgame || DevMaps == false)				{					return false;				}				if(gamekeydown[key_speed])				{ // Monsters ON					nomonsters = false;				}				if(gamekeydown[key_strafe])				{ // Monsters OFF					nomonsters = true;				}				G_DeferedInitNew(gameskill, gameepisode, gamemap);				P_SetMessage(&players[consoleplayer], TXT_CHEATWARP,					false);				return true;#endif		}	}	if(MenuActive == false)	{		if(key == KEY_ESCAPE || gamestate == GS_DEMOSCREEN || demoplayback)		{			MN_ActivateMenu();			return(true);		}		return(false);	}	if(!FileMenuKeySteal)	{		item = &CurrentMenu->items[CurrentItPos];		switch(key)		{			case KEY_DOWNARROW:
				do				{					if(CurrentItPos+1 > CurrentMenu->itemCount-1)					{						CurrentItPos = 0;					}					else					{						CurrentItPos++;					}				} while(CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);				S_StartSound(NULL, SFX_FIGHTER_HAMMER_HITWALL);				return(true);				break;			case KEY_UPARROW:
				do				{					if(CurrentItPos == 0)					{						CurrentItPos = CurrentMenu->itemCount-1;					}					else					{						CurrentItPos--;					}				} while(CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);				S_StartSound(NULL, SFX_FIGHTER_HAMMER_HITWALL);				return(true);				break;			case KEY_LEFTARROW:
				if(item->type == ITT_LRFUNC && item->func != NULL)				{					item->func(LEFT_DIR);					S_StartSound(NULL, SFX_PICKUP_KEY);				}				return(true);				break;			case KEY_RIGHTARROW:
				if(item->type == ITT_LRFUNC && item->func != NULL)				{					item->func(RIGHT_DIR);					S_StartSound(NULL, SFX_PICKUP_KEY);				}				return(true);				break;			case KEY_ENTER:
				if(item->type == ITT_SETMENU)				{					if(item->func != NULL)						{						item->func(item->option);					}					SetMenu(item->menu);				}				else if(item->func != NULL)				{					CurrentMenu->oldItPos = CurrentItPos;					if(item->type == ITT_LRFUNC)					{						item->func(RIGHT_DIR);					}					else if(item->type == ITT_EFUNC)					{						item->func(item->option);					}				}				S_StartSound(NULL, SFX_DOOR_LIGHT_CLOSE);				return(true);				break;			case KEY_ESCAPE:				MN_DeactivateMenu();				return(true);			case KEY_BACKSPACE:				S_StartSound(NULL, SFX_PICKUP_KEY);				if(CurrentMenu->prevMenu == MENU_NONE)				{					MN_DeactivateMenu();				}				else				{					SetMenu(CurrentMenu->prevMenu);				}				return(true);			default:				for(i = 0; i < CurrentMenu->itemCount; i++)				{					if(CurrentMenu->items[i].text)					{						if(toupper(key)							== toupper(CurrentMenu->items[i].text[0]))						{							CurrentItPos = i;							return(true);						}					}				}				break;		}		return(false);	}	else	{ // Editing file names		textBuffer = &SlotText[currentSlot][slotptr];		if(key == KEY_BACKSPACE)		{			if(slotptr)			{				*textBuffer-- = 0;				*textBuffer = ASCII_CURSOR;				slotptr--;			}			return(true);		}		if(key == KEY_ESCAPE)		{			memset(SlotText[currentSlot], 0, SLOTTEXTLEN+2);			strcpy(SlotText[currentSlot], oldSlotText);			SlotStatus[currentSlot]--;			MN_DeactivateMenu();			return(true);		}		if(key == KEY_ENTER)		{			SlotText[currentSlot][slotptr] = 0; // clear the cursor			item = &CurrentMenu->items[CurrentItPos];			CurrentMenu->oldItPos = CurrentItPos;			if(item->type == ITT_EFUNC)			{				item->func(item->option);				if(item->menu != MENU_NONE)				{					SetMenu(item->menu);				}			}			return(true);		}		if(slotptr < SLOTTEXTLEN && key != KEY_BACKSPACE)		{			if((key >= 'a' && key <= 'z'))			{				*textBuffer++ = key-32;				*textBuffer = ASCII_CURSOR;				slotptr++;				return(true);			}			if(((key >= '0' && key <= '9') || key == ' '				|| key == ',' || key == '.' || key == '-')				&& !shiftdown)			{				*textBuffer++ = key;				*textBuffer = ASCII_CURSOR;				slotptr++;				return(true);			}			if(shiftdown && key == '1')			{				*textBuffer++ = '!';				*textBuffer = ASCII_CURSOR;				slotptr++;				return(true);			}		}		return(true);	}	return(false);}//---------------------------------------------------------------------------//// PROC MN_ActivateMenu////---------------------------------------------------------------------------void MN_ActivateMenu(void){	if(MenuActive)	{		return;	}	if(paused)	{		S_ResumeSound();	}	MenuActive = true;	FileMenuKeySteal = false;	MenuTime = 0;	CurrentMenu = &MainMenu;	CurrentItPos = CurrentMenu->oldItPos;	if(!netgame && !demoplayback)	{		paused = true;	}	S_StartSound(NULL, SFX_PLATFORM_STOP);	slottextloaded = false; //reload the slot text, when needed}//---------------------------------------------------------------------------//// PROC MN_DeactivateMenu////---------------------------------------------------------------------------void MN_DeactivateMenu(void){	CurrentMenu->oldItPos = CurrentItPos;	MenuActive = false;	if(!netgame)	{		paused = false;	}	S_StartSound(NULL, SFX_PLATFORM_STOP);	P_ClearMessage(&players[consoleplayer]);}//---------------------------------------------------------------------------//// PROC MN_DrawInfo////---------------------------------------------------------------------------void MN_DrawInfo(void){	I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));	memcpy(screen, (byte *)W_CacheLumpNum(W_GetNumForName("TITLE")+InfoType,		PU_CACHE), SCREENWIDTH*SCREENHEIGHT);//	V_DrawPatch(0, 0, W_CacheLumpNum(W_GetNumForName("TITLE")+InfoType,//		PU_CACHE));}//---------------------------------------------------------------------------//// PROC SetMenu////---------------------------------------------------------------------------static void SetMenu(MenuType_t menu){	CurrentMenu->oldItPos = CurrentItPos;	CurrentMenu = Menus[menu];	CurrentItPos = CurrentMenu->oldItPos;}//---------------------------------------------------------------------------//// PROC DrawSlider////---------------------------------------------------------------------------static void DrawSlider(Menu_t *menu, int item, int width, int slot){	int x;	int y;	int x2;	int count;	x = menu->x+24;	y = menu->y+2+(item*ITEM_HEIGHT);	V_DrawPatch(x-32, y, W_CacheLumpName("M_SLDLT", PU_CACHE));	for(x2 = x, count = width; count--; x2 += 8)	{		V_DrawPatch(x2, y, W_CacheLumpName(count&1 ? "M_SLDMD1"			: "M_SLDMD2", PU_CACHE));	}	V_DrawPatch(x2, y, W_CacheLumpName("M_SLDRT", PU_CACHE));	V_DrawPatch(x+4+slot*8, y+7, W_CacheLumpName("M_SLDKB", PU_CACHE));}

⌨️ 快捷键说明

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