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

📄 sb_bar.c

📁 使用Doom引擎开发的著名游戏《毁灭巫师》的源代码。
💻 C
📖 第 1 页 / 共 4 页
字号:
			|| !(CPlayer->powers[pw_speed]&16))		{			frame = (leveltime/3)&15;			V_DrawPatch(60, 19, W_CacheLumpNum(SpinSpeedLump+frame, 				PU_CACHE));		}		BorderTopRefresh = true;		UpdateState |= I_MESSAGES;	}	// Defensive power	if(CPlayer->powers[pw_invulnerability])	{		if(CPlayer->powers[pw_invulnerability] > BLINKTHRESHOLD			|| !(CPlayer->powers[pw_invulnerability]&16))		{			frame = (leveltime/3)&15;			V_DrawPatch(260, 19, W_CacheLumpNum(SpinDefenseLump+frame, 				PU_CACHE));		}		BorderTopRefresh = true;		UpdateState |= I_MESSAGES;	}	// Minotaur Active	if(CPlayer->powers[pw_minotaur])	{		if(CPlayer->powers[pw_minotaur] > BLINKTHRESHOLD			|| !(CPlayer->powers[pw_minotaur]&16))		{			frame = (leveltime/3)&15;			V_DrawPatch(300, 19, W_CacheLumpNum(SpinMinotaurLump+frame, 				PU_CACHE));		}		BorderTopRefresh = true;		UpdateState |= I_MESSAGES;	}}//==========================================================================//// SB_PaletteFlash//// Sets the new palette based upon the current values of// consoleplayer->damagecount and consoleplayer->bonuscount.////==========================================================================void SB_PaletteFlash(boolean forceChange){	static int sb_palette = 0;	int palette;	byte *pal;	if(forceChange)	{ 		sb_palette = -1;	}	if(gamestate == GS_LEVEL)	{		CPlayer = &players[consoleplayer];		if(CPlayer->poisoncount)		{			palette = 0;			palette = (CPlayer->poisoncount+7)>>3;			if(palette >= NUMPOISONPALS)			{				palette = NUMPOISONPALS-1;			}			palette += STARTPOISONPALS;		}		else if(CPlayer->damagecount)		{			palette = (CPlayer->damagecount+7)>>3;			if(palette >= NUMREDPALS)			{				palette = NUMREDPALS-1;			}			palette += STARTREDPALS;		}		else if(CPlayer->bonuscount)		{			palette = (CPlayer->bonuscount+7)>>3;			if(palette >= NUMBONUSPALS)			{				palette = NUMBONUSPALS-1;			}			palette += STARTBONUSPALS;		}		else if(CPlayer->mo->flags2&MF2_ICEDAMAGE)		{ // Frozen player			palette = STARTICEPAL;		}		else		{			palette = 0;		}	}	else	{		palette = 0;	}	if(palette != sb_palette)	{		sb_palette = palette;		pal = (byte *)W_CacheLumpNum(PlayPalette, PU_CACHE)+palette*768;		I_SetPalette(pal);	}}//==========================================================================//// DrawCommonBar////==========================================================================void DrawCommonBar(void){	int healthPos;	V_DrawPatch(0, 134, PatchH2TOP);	if(oldhealth != HealthMarker)	{		oldhealth = HealthMarker;		healthPos = HealthMarker;		if(healthPos < 0)		{			healthPos = 0;		}		if(healthPos > 100)		{			healthPos = 100;		}		V_DrawPatch(28+(((healthPos*196)/100)%9), 193, PatchCHAIN);		V_DrawPatch(7+((healthPos*11)/5), 193, PatchLIFEGEM);		V_DrawPatch(0, 193, PatchLFEDGE);		V_DrawPatch(277, 193, PatchRTEDGE);//		ShadeChain();		UpdateState |= I_STATBAR;	}}//==========================================================================//// DrawMainBar////==========================================================================void DrawMainBar(void){	int i;	int temp;	patch_t *manaPatch1, *manaPatch2;	patch_t *manaVialPatch1, *manaVialPatch2;	manaPatch1 = NULL;	manaPatch2 = NULL;	manaVialPatch1 = NULL;	manaVialPatch2 = NULL;	// Ready artifact	if(ArtifactFlash)	{		V_DrawPatch(144, 160, PatchARTICLEAR);		V_DrawPatch(148, 164, W_CacheLumpNum(W_GetNumForName("useartia")			+ ArtifactFlash - 1, PU_CACHE));		ArtifactFlash--;		oldarti = -1; // so that the correct artifact fills in after the flash		UpdateState |= I_STATBAR;	}	else if(oldarti != CPlayer->readyArtifact		|| oldartiCount != CPlayer->inventory[inv_ptr].count)	{		V_DrawPatch(144, 160, PatchARTICLEAR);		if(CPlayer->readyArtifact > 0)		{			V_DrawPatch(143, 163, 				W_CacheLumpName(patcharti[CPlayer->readyArtifact], PU_CACHE));			if(CPlayer->inventory[inv_ptr].count > 1)			{				DrSmallNumber(CPlayer->inventory[inv_ptr].count, 162, 184);			}		}		oldarti = CPlayer->readyArtifact;		oldartiCount = CPlayer->inventory[inv_ptr].count;		UpdateState |= I_STATBAR;	}	// Frags	if(deathmatch)	{		temp = 0;		for(i = 0; i < MAXPLAYERS; i++)		{			temp += CPlayer->frags[i];		}		if(temp != oldfrags)		{			V_DrawPatch(38, 162, PatchKILLS);			DrINumber(temp, 40, 176);			oldfrags = temp;			UpdateState |= I_STATBAR;		}	}	else	{		temp = HealthMarker;		if(temp < 0)		{			temp = 0;		}		else if(temp > 100)		{			temp = 100;		}		if(oldlife != temp)		{			oldlife = temp;			V_DrawPatch(41, 178, PatchARMCLEAR);			if(temp >= 25)			{				DrINumber(temp, 40, 176);			}			else			{				DrRedINumber(temp, 40, 176);			}			UpdateState |= I_STATBAR;		}	}	// Mana	temp = CPlayer->mana[0];	if(oldmana1 != temp)	{		V_DrawPatch(77, 178, PatchMANACLEAR);		DrSmallNumber(temp, 79, 181);		manaVialPatch1 = (patch_t *)1; // force a vial update		if(temp == 0)		{ // Draw Dim Mana icon			manaPatch1 = PatchMANADIM1;		}		else if(oldmana1 == 0)		{			manaPatch1 = PatchMANABRIGHT1;		}				oldmana1 = temp;		UpdateState |= I_STATBAR;	}	temp = CPlayer->mana[1];	if(oldmana2 != temp)	{		V_DrawPatch(109, 178, PatchMANACLEAR);		DrSmallNumber(temp, 111, 181);		manaVialPatch1 = (patch_t *)1; // force a vial update		if(temp == 0)		{ // Draw Dim Mana icon			manaPatch2 = PatchMANADIM2;		}				else if(oldmana2 == 0)		{			manaPatch2 = PatchMANABRIGHT2;		}				oldmana2 = temp;		UpdateState |= I_STATBAR;	}	if(oldweapon != CPlayer->readyweapon || manaPatch1 || manaPatch2		|| manaVialPatch1)	{ // Update mana graphics based upon mana count/weapon type		if(CPlayer->readyweapon == WP_FIRST)		{			manaPatch1 = PatchMANADIM1;			manaPatch2 = PatchMANADIM2;			manaVialPatch1 = PatchMANAVIALDIM1;			manaVialPatch2 = PatchMANAVIALDIM2;		}		else if(CPlayer->readyweapon == WP_SECOND)		{			if(!manaPatch1)			{				manaPatch1 = PatchMANABRIGHT1;			}			manaVialPatch1 = PatchMANAVIAL1;			manaPatch2 = PatchMANADIM2;			manaVialPatch2 = PatchMANAVIALDIM2;		}		else if(CPlayer->readyweapon == WP_THIRD)		{			manaPatch1 = PatchMANADIM1;			manaVialPatch1 = PatchMANAVIALDIM1;			if(!manaPatch2)			{				manaPatch2 = PatchMANABRIGHT2;			}			manaVialPatch2 = PatchMANAVIAL2;		}		else		{			manaVialPatch1 = PatchMANAVIAL1;			manaVialPatch2 = PatchMANAVIAL2;			if(!manaPatch1)			{				manaPatch1 = PatchMANABRIGHT1;			}			if(!manaPatch2)			{				manaPatch2 = PatchMANABRIGHT2;			}		}		V_DrawPatch(77, 164, manaPatch1);		V_DrawPatch(110, 164, manaPatch2);		V_DrawPatch(94, 164, manaVialPatch1);		for(i = 165; i < 187-(22*CPlayer->mana[0])/MAX_MANA; i++)		{			screen[i*SCREENWIDTH+95] = 0;			screen[i*SCREENWIDTH+96] = 0;			screen[i*SCREENWIDTH+97] = 0;		}		V_DrawPatch(102, 164, manaVialPatch2);		for(i = 165; i < 187-(22*CPlayer->mana[1])/MAX_MANA; i++)		{			screen[i*SCREENWIDTH+103] = 0;			screen[i*SCREENWIDTH+104] = 0;			screen[i*SCREENWIDTH+105] = 0;		}		oldweapon = CPlayer->readyweapon;		UpdateState |= I_STATBAR;	}	// Armor	temp = AutoArmorSave[CPlayer->class]		+CPlayer->armorpoints[ARMOR_ARMOR]+CPlayer->armorpoints[ARMOR_SHIELD]		+CPlayer->armorpoints[ARMOR_HELMET]+CPlayer->armorpoints[ARMOR_AMULET];	if(oldarmor != temp)	{		oldarmor = temp;		V_DrawPatch(255, 178, PatchARMCLEAR);		DrINumber(FixedDiv(temp, 5*FRACUNIT)>>FRACBITS, 250, 176);		UpdateState |= I_STATBAR;	}	// Weapon Pieces	if(oldpieces != CPlayer->pieces)	{		DrawWeaponPieces();		oldpieces = CPlayer->pieces;		UpdateState |= I_STATBAR;	}}//==========================================================================//// DrawInventoryBar////==========================================================================void DrawInventoryBar(void){	int i;	int x;	x = inv_ptr-curpos;	UpdateState |= I_STATBAR;	V_DrawPatch(38, 162, PatchINVBAR);	for(i = 0; i < 7; i++)	{		//V_DrawPatch(50+i*31, 160, W_CacheLumpName("ARTIBOX", PU_CACHE));		if(CPlayer->inventorySlotNum > x+i			&& CPlayer->inventory[x+i].type != arti_none)		{			V_DrawPatch(50+i*31, 163, W_CacheLumpName(				patcharti[CPlayer->inventory[x+i].type], PU_CACHE));			if(CPlayer->inventory[x+i].count > 1)			{				DrSmallNumber(CPlayer->inventory[x+i].count, 68+i*31, 185);			}		}	}	V_DrawPatch(50+curpos*31, 163, PatchSELECTBOX);	if(x != 0)	{		V_DrawPatch(42, 163, !(leveltime&4) ? PatchINVLFGEM1 :			PatchINVLFGEM2);	}	if(CPlayer->inventorySlotNum-x > 7)	{		V_DrawPatch(269, 163, !(leveltime&4) ? PatchINVRTGEM1 :			PatchINVRTGEM2);	}}//==========================================================================//// DrawKeyBar////==========================================================================void DrawKeyBar(void){	int i;	int xPosition;	int temp;	if(oldkeys != CPlayer->keys)	{		xPosition = 46;		for(i = 0; i < NUMKEYS && xPosition <= 126; i++)		{			if(CPlayer->keys&(1<<i))			{				V_DrawPatch(xPosition, 164, 					W_CacheLumpNum(W_GetNumForName("keyslot1")+i, PU_CACHE));				xPosition += 20;			}		}		oldkeys = CPlayer->keys;		UpdateState |= I_STATBAR;	}	temp = AutoArmorSave[CPlayer->class]		+CPlayer->armorpoints[ARMOR_ARMOR]+CPlayer->armorpoints[ARMOR_SHIELD]		+CPlayer->armorpoints[ARMOR_HELMET]+CPlayer->armorpoints[ARMOR_AMULET];	if(oldarmor != temp)	{		for(i = 0; i < NUMARMOR; i++)		{			if(!CPlayer->armorpoints[i])			{				continue;			}			if(CPlayer->armorpoints[i] <= 				(ArmorIncrement[CPlayer->class][i]>>2))			{				V_DrawFuzzPatch(150+31*i, 164, 					W_CacheLumpNum(W_GetNumForName("armslot1")+i, PU_CACHE));			}			else if(CPlayer->armorpoints[i] <= 				(ArmorIncrement[CPlayer->class][i]>>1))			{				V_DrawAltFuzzPatch(150+31*i, 164, 					W_CacheLumpNum(W_GetNumForName("armslot1")+i, PU_CACHE));			}			else			{				V_DrawPatch(150+31*i, 164, 					W_CacheLumpNum(W_GetNumForName("armslot1")+i, PU_CACHE));			}		}		oldarmor = temp;		UpdateState |= I_STATBAR;	}}//==========================================================================//// DrawWeaponPieces////==========================================================================static int PieceX[NUMCLASSES][3] = {	{ 190, 225, 234 },	{ 190, 212, 225 },	{ 190, 205, 224 },	{ 0, 0, 0 }			// Pig is never used};static void DrawWeaponPieces(void){	if(CPlayer->pieces == 7)	{		V_DrawPatch(190, 162, PatchWEAPONFULL);		return;	}	V_DrawPatch(190, 162, PatchWEAPONSLOT);	if(CPlayer->pieces&WPIECE1)	{		V_DrawPatch(PieceX[PlayerClass[consoleplayer]][0], 162, PatchPIECE1);	}	if(CPlayer->pieces&WPIECE2)	{		V_DrawPatch(PieceX[PlayerClass[consoleplayer]][1], 162, PatchPIECE2);	}	if(CPlayer->pieces&WPIECE3)	{		V_DrawPatch(PieceX[PlayerClass[consoleplayer]][2], 162, PatchPIECE3);	}}//==========================================================================//// DrawFullScreenStuff////==========================================================================void DrawFullScreenStuff(void){	int i;	int x;	int temp;	UpdateState |= I_FULLSCRN;	if(CPlayer->mo->health > 0)	{		DrBNumber(CPlayer->mo->health, 5, 180);	}	else	{		DrBNumber(0, 5, 180);	}	if(deathmatch)	{		temp = 0;		for(i=0; i<MAXPLAYERS; i++)		{			if(playeringame[i])			{				temp += CPlayer->frags[i];			}		}		DrINumber(temp, 45, 185);	}	if(!inventory)	{		if(CPlayer->readyArtifact > 0)		{			V_DrawFuzzPatch(286, 170, W_CacheLumpName("ARTIBOX",				PU_CACHE));			V_DrawPatch(284, 169,				W_CacheLumpName(patcharti[CPlayer->readyArtifact], PU_CACHE));			if(CPlayer->inventory[inv_ptr].count > 1)			{				DrSmallNumber(CPlayer->inventory[inv_ptr].count, 302, 192);			}		}	}	else	{		x = inv_ptr-curpos;		for(i = 0; i < 7; i++)		{			V_DrawFuzzPatch(50+i*31, 168, W_CacheLumpName("ARTIBOX",				PU_CACHE));			if(CPlayer->inventorySlotNum > x+i				&& CPlayer->inventory[x+i].type != arti_none)			{				V_DrawPatch(49+i*31, 167, W_CacheLumpName(					patcharti[CPlayer->inventory[x+i].type], PU_CACHE));				if(CPlayer->inventory[x+i].count > 1)				{					DrSmallNumber(CPlayer->inventory[x+i].count, 66+i*31, 						188);				}			}		}		V_DrawPatch(50+curpos*31, 167, PatchSELECTBOX);		if(x != 0)		{			V_DrawPatch(40, 167, !(leveltime&4) ? PatchINVLFGEM1 :				PatchINVLFGEM2);		}		if(CPlayer->inventorySlotNum-x > 7)		{			V_DrawPatch(268, 167, !(leveltime&4) ?

⌨️ 快捷键说明

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