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

📄 sb_bar.c

📁 使用Doom引擎开发的著名游戏《毁灭巫师》的源代码。
💻 C
📖 第 1 页 / 共 4 页
字号:
				PatchINVRTGEM1 : PatchINVRTGEM2);		}	}}//==========================================================================//// Draw_TeleportIcon////==========================================================================void Draw_TeleportIcon(void){	patch_t *patch;	patch = W_CacheLumpNum(W_GetNumForName("teleicon"), PU_CACHE);	V_DrawPatch(100, 68, patch);	UpdateState |= I_FULLSCRN;	I_Update();	UpdateState |= I_FULLSCRN;}//==========================================================================//// Draw_SaveIcon////==========================================================================void Draw_SaveIcon(void){	patch_t *patch;	patch = W_CacheLumpNum(W_GetNumForName("saveicon"), PU_CACHE);	V_DrawPatch(100, 68, patch);	UpdateState |= I_FULLSCRN;	I_Update();	UpdateState |= I_FULLSCRN;}//==========================================================================//// Draw_LoadIcon////==========================================================================void Draw_LoadIcon(void){	patch_t *patch;	patch = W_CacheLumpNum(W_GetNumForName("loadicon"), PU_CACHE);	V_DrawPatch(100, 68, patch);	UpdateState |= I_FULLSCRN;	I_Update();	UpdateState |= I_FULLSCRN;}//==========================================================================//// SB_Responder////==========================================================================boolean SB_Responder(event_t *event){	if(event->type == ev_keydown)	{		if(HandleCheats(event->data1))		{ // Need to eat the key			return(true);		}	}	return(false);}//==========================================================================//// HandleCheats//// Returns true if the caller should eat the key.////==========================================================================static boolean HandleCheats(byte key){	int i;	boolean eat;	if(gameskill == sk_nightmare)	{ // Can't cheat in nightmare mode		return(false);	}	else if(netgame)	{ // change CD track is the only cheat available in deathmatch		eat = false;		if(i_CDMusic)		{			if(CheatAddKey(&Cheats[0], key, &eat))			{				Cheats[0].func(&players[consoleplayer], &Cheats[0]);				S_StartSound(NULL, SFX_PLATFORM_STOP);			}			if(CheatAddKey(&Cheats[1], key, &eat))			{				Cheats[1].func(&players[consoleplayer], &Cheats[1]);				S_StartSound(NULL, SFX_PLATFORM_STOP);			}		}		return eat;	}	if(players[consoleplayer].health <= 0)	{ // Dead players can't cheat		return(false);	}	eat = false;	for(i = 0; Cheats[i].func != NULL; i++)	{		if(CheatAddKey(&Cheats[i], key, &eat))		{			Cheats[i].func(&players[consoleplayer], &Cheats[i]);			S_StartSound(NULL, SFX_PLATFORM_STOP);		}	}	return(eat);}//==========================================================================//// CheatAddkey//// Returns true if the added key completed the cheat, false otherwise.////==========================================================================static boolean CheatAddKey(Cheat_t *cheat, byte key, boolean *eat){	if(!cheat->pos)	{		cheat->pos = cheat->sequence;		cheat->currentArg = 0;	}	if(*cheat->pos == 0)	{		*eat = true;		cheat->args[cheat->currentArg++] = key;		cheat->pos++;	}	else if(CheatLookup[key] == *cheat->pos)	{		cheat->pos++;	}	else	{		cheat->pos = cheat->sequence;		cheat->currentArg = 0;	}	if(*cheat->pos == 0xff)	{		cheat->pos = cheat->sequence;		cheat->currentArg = 0;		return(true);	}	return(false);}//==========================================================================//// CHEAT FUNCTIONS////==========================================================================static void CheatGodFunc(player_t *player, Cheat_t *cheat){	player->cheats ^= CF_GODMODE;	if(player->cheats&CF_GODMODE)	{		P_SetMessage(player, TXT_CHEATGODON, true);	}	else	{		P_SetMessage(player, TXT_CHEATGODOFF, true);	}	SB_state = -1;}static void CheatNoClipFunc(player_t *player, Cheat_t *cheat){	player->cheats ^= CF_NOCLIP;	if(player->cheats&CF_NOCLIP)	{		P_SetMessage(player, TXT_CHEATNOCLIPON, true);	}	else	{		P_SetMessage(player, TXT_CHEATNOCLIPOFF, true);	}}static void CheatWeaponsFunc(player_t *player, Cheat_t *cheat){	int i;	//extern boolean *WeaponInShareware;	for(i = 0; i < NUMARMOR; i++)	{		player->armorpoints[i] = ArmorIncrement[player->class][i];	}	for(i = 0; i < NUMWEAPONS; i++)	{		player->weaponowned[i] = true;	}	for(i = 0; i < NUMMANA; i++)	{		player->mana[i] = MAX_MANA;	}	P_SetMessage(player, TXT_CHEATWEAPONS, true);}static void CheatHealthFunc(player_t *player, Cheat_t *cheat){	if(player->morphTics)	{		player->health = player->mo->health = MAXMORPHHEALTH;	}	else	{		player->health = player->mo->health = MAXHEALTH;	}	P_SetMessage(player, TXT_CHEATHEALTH, true);}static void CheatKeysFunc(player_t *player, Cheat_t *cheat){	player->keys = 2047;	P_SetMessage(player, TXT_CHEATKEYS, true);}static void CheatSoundFunc(player_t *player, Cheat_t *cheat){	DebugSound = !DebugSound;	if(DebugSound)	{		P_SetMessage(player, TXT_CHEATSOUNDON, true);	}	else	{		P_SetMessage(player, TXT_CHEATSOUNDOFF, true);	}}static void CheatTickerFunc(player_t *player, Cheat_t *cheat){	extern int DisplayTicker;	DisplayTicker = !DisplayTicker;	if(DisplayTicker)	{		P_SetMessage(player, TXT_CHEATTICKERON, true);	}	else	{		P_SetMessage(player, TXT_CHEATTICKEROFF, true);	}}static void CheatArtifactAllFunc(player_t *player, Cheat_t *cheat){	int i;	int j;	for(i = arti_none+1; i < arti_firstpuzzitem; i++)	{		for(j = 0; j < 25; j++)		{			P_GiveArtifact(player, i, NULL);		}	}	P_SetMessage(player, TXT_CHEATARTIFACTS3, true);}static void CheatPuzzleFunc(player_t *player, Cheat_t *cheat){	int i;	for(i = arti_firstpuzzitem; i < NUMARTIFACTS; i++)	{		P_GiveArtifact(player, i, NULL);	}	P_SetMessage(player, TXT_CHEATARTIFACTS3, true);}static void CheatInitFunc(player_t *player, Cheat_t *cheat){	G_DeferedInitNew(gameskill, gameepisode, gamemap);	P_SetMessage(player, TXT_CHEATWARP, true);}static void CheatWarpFunc(player_t *player, Cheat_t *cheat){	int tens;	int ones;	int map;	char mapName[9];	char auxName[128];	FILE *fp;	tens = cheat->args[0]-'0';	ones = cheat->args[1]-'0';	if(tens < 0 || tens > 9 || ones < 0 || ones > 9)	{ // Bad map		P_SetMessage(player, TXT_CHEATBADINPUT, true);		return;	}	map = P_TranslateMap((cheat->args[0]-'0')*10+cheat->args[1]-'0');	if(map == -1)	{ // Not found		P_SetMessage(player, TXT_CHEATNOMAP, true);		return;	}	if(map == gamemap)	{ // Don't try to teleport to current map		P_SetMessage(player, TXT_CHEATBADINPUT, true);		return;	}	if(DevMaps)	{ // Search map development directory		sprintf(auxName, "%sMAP%02d.WAD", DevMapsDir, map);		fp = fopen(auxName, "rb");		if(fp)		{			fclose(fp);		}		else		{ // Can't find			P_SetMessage(player, TXT_CHEATNOMAP, true);			return;		}	}	else	{ // Search primary lumps		sprintf(mapName, "MAP%02d", map);		if(W_CheckNumForName(mapName) == -1)		{ // Can't find			P_SetMessage(player, TXT_CHEATNOMAP, true);			return;		}	}	P_SetMessage(player, TXT_CHEATWARP, true);	G_TeleportNewMap(map, 0);}static void CheatPigFunc(player_t *player, Cheat_t *cheat){	extern boolean P_UndoPlayerMorph(player_t *player);	if(player->morphTics)	{		P_UndoPlayerMorph(player);	}	else	{	 	P_MorphPlayer(player);	}	P_SetMessage(player, "SQUEAL!!", true);}static void CheatMassacreFunc(player_t *player, Cheat_t *cheat){	int count;	char buffer[80];	count = P_Massacre();	sprintf(buffer, "%d MONSTERS KILLED\n", count);	P_SetMessage(player, buffer, true);}static void CheatIDKFAFunc(player_t *player, Cheat_t *cheat){	int i;	if(player->morphTics)	{		return;	}	for(i = 1; i < 8; i++)	{		player->weaponowned[i] = false;	}	player->pendingweapon = WP_FIRST;	P_SetMessage(player, TXT_CHEATIDKFA, true);}static void CheatQuickenFunc1(player_t *player, Cheat_t *cheat){	P_SetMessage(player, "TRYING TO CHEAT?  THAT'S ONE....", true);}static void CheatQuickenFunc2(player_t *player, Cheat_t *cheat){	P_SetMessage(player, "THAT'S TWO....", true);}static void CheatQuickenFunc3(player_t *player, Cheat_t *cheat){	P_DamageMobj(player->mo, NULL, player->mo, 10000);	P_SetMessage(player, "THAT'S THREE!  TIME TO DIE.", true);}static void CheatClassFunc1(player_t *player, Cheat_t *cheat){		P_SetMessage(player, "ENTER NEW PLAYER CLASS (0 - 2)", true);}static void CheatClassFunc2(player_t *player, Cheat_t *cheat){	int i;	int class;	if(player->morphTics)	{ // don't change class if the player is morphed		return;	}	class = cheat->args[0]-'0';	if(class > 2 || class < 0)	{		P_SetMessage(player, "INVALID PLAYER CLASS", true);		return;	}	player->class = class;	for(i = 0; i < NUMARMOR; i++)	{		player->armorpoints[i] = 0;	}	PlayerClass[consoleplayer] = class;	P_PostMorphWeapon(player, WP_FIRST);	SB_SetClassData();	SB_state = -1;	UpdateState |= I_FULLSCRN;}static void CheatVersionFunc(player_t *player, Cheat_t *cheat){	P_SetMessage(player, VERSIONTEXT, true);}static void CheatDebugFunc(player_t *player, Cheat_t *cheat){	char textBuffer[50];	sprintf(textBuffer, "MAP %d (%d)  X:%5d  Y:%5d  Z:%5d",				P_GetMapWarpTrans(gamemap),				gamemap,				player->mo->x >> FRACBITS,				player->mo->y >> FRACBITS,				player->mo->z >> FRACBITS);	P_SetMessage(player, textBuffer, true);}static void CheatScriptFunc1(player_t *player, Cheat_t *cheat){	P_SetMessage(player, "RUN WHICH SCRIPT(01-99)?", true);}static void CheatScriptFunc2(player_t *player, Cheat_t *cheat){	P_SetMessage(player, "RUN WHICH SCRIPT(01-99)?", true);}static void CheatScriptFunc3(player_t *player, Cheat_t *cheat){	int script;	byte args[3];	int tens, ones;	char textBuffer[40];	tens = cheat->args[0]-'0';	ones = cheat->args[1]-'0';	script = tens*10 + ones;	if (script < 1) return;	if (script > 99) return;	args[0]=args[1]=args[2]=0;	if(P_StartACS(script, 0, args, player->mo, NULL, 0))	{		sprintf(textBuffer, "RUNNING SCRIPT %.2d", script);		P_SetMessage(player, textBuffer, true);	}}extern int cheating;static void CheatRevealFunc(player_t *player, Cheat_t *cheat){	cheating = (cheating+1) % 3;}//===========================================================================//// CheatTrackFunc1////===========================================================================static void CheatTrackFunc1(player_t *player, Cheat_t *cheat){#ifdef __WATCOMC__	char buffer[80];	if(!i_CDMusic)	{		return;	}	if(I_CDMusInit() == -1)	{		P_SetMessage(player, "ERROR INITIALIZING CD", true);	}	sprintf(buffer, "ENTER DESIRED CD TRACK (%.2d - %.2d):\n",		I_CDMusFirstTrack(), I_CDMusLastTrack());		P_SetMessage(player, buffer, true);#endif}//===========================================================================//// CheatTrackFunc2////===========================================================================static void CheatTrackFunc2(player_t *player, Cheat_t *cheat){#ifdef __WATCOMC__	char buffer[80];	int track;	if(!i_CDMusic)	{		return;	}	track = (cheat->args[0]-'0')*10+(cheat->args[1]-'0');	if(track < I_CDMusFirstTrack() || track > I_CDMusLastTrack())	{		P_SetMessage(player, "INVALID TRACK NUMBER\n", true);		return;	} 	if(track == i_CDCurrentTrack)	{		return;	}	if(I_CDMusPlay(track))	{		sprintf(buffer, "ERROR WHILE TRYING TO PLAY CD TRACK: %.2d\n", track);		P_SetMessage(player, buffer, true);	}	else	{ // No error encountered while attempting to play the track		sprintf(buffer, "PLAYING TRACK: %.2d\n", track);		P_SetMessage(player, buffer, true);			i_CDMusicLength = 35*I_CDMusTrackLength(track);		oldTic = gametic;		i_CDTrack = track;		i_CDCurrentTrack = track;	}#endif}

⌨️ 快捷键说明

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