📄 sb_bar.c
字号:
|| !(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 + -