static void HU_DrawAltHUD(void) { int health = MAX(health_min, plr->health); int armor = plr->armorpoints; int color2 = (health <= 20 ? red : (health >= 100 ? green : white)); int color1 = color2 + (color2 == green ? coloroffset : 0); int keys = 0; int i = 0; int powerup = 0; int powerupbar = 0; int max; DrawAltHUDNumber(ALTHUD_LEFT_X + 35 - AltHUDNumberWidth(ABS(health)), ALTHUD_Y + 12, health); health = MAX(0, plr->health) * 200 / maxhealth; if (health > 100) { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, 101, 8, color1); fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, MAX(1, health - 100) + (health == 200), 8, color2); althudfunc(ALTHUD_LEFT_X + 40, ALTHUD_Y + 1, altleftpatch, WHITE, white); althudfunc(ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, altendpatch, WHITE, color2); althudfunc(ALTHUD_LEFT_X + 60 + 98, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); althudfunc(ALTHUD_LEFT_X + 60 + health - 100 - (health < 200) - 2, ALTHUD_Y + 10, altmark2patch, WHITE, color2); } else { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, MAX(1, health) + (health == 100), 8, color1); althudfunc(ALTHUD_LEFT_X + 40, ALTHUD_Y + 1, altleftpatch, WHITE, white); althudfunc(ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, altendpatch, WHITE, color1); althudfunc(ALTHUD_LEFT_X + 60 + MAX(1, health) - (health < 100) - 2, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); } if (armor) { color2 = (plr->armortype == GREENARMOR ? gray : lightgray); color1 = color2 + coloroffset; althudfunc(ALTHUD_LEFT_X + 43, ALTHUD_Y, altarmpatch, WHITE, color2); DrawAltHUDNumber2(ALTHUD_LEFT_X + 35 - AltHUDNumber2Width(armor), ALTHUD_Y, armor, color2); armor = armor * 200 / max_armor; if (armor > 100) { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, 100 + 1, 4, color1); fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, armor - 100 + (armor == 200), 4, color2); } else fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, armor + (armor == 100), 4, color1); } else althudfunc(ALTHUD_LEFT_X + 43, ALTHUD_Y, altarmpatch, WHITE, darkgray); if (health) { const weapontype_t pendingweapon = plr->pendingweapon; const weapontype_t weapon = (pendingweapon != wp_nochange ? pendingweapon : plr->readyweapon); const ammotype_t ammotype = weaponinfo[weapon].ammo; if (ammotype != am_noammo) { int ammo = plr->ammo[ammotype]; DrawAltHUDNumber(ALTHUD_RIGHT_X + 101 - AltHUDNumberWidth(ammo), ALTHUD_Y - 1, ammo); ammo = 100 * ammo / plr->maxammo[ammotype]; color1 = (ammo <= 15 ? yellow : white); fillrectfunc(0, ALTHUD_RIGHT_X + 100 - ammo, ALTHUD_Y + 13, ammo + 1, 8, color1); althudfunc(ALTHUD_RIGHT_X, ALTHUD_Y + 13, altrightpatch, WHITE, white); althudfunc(ALTHUD_RIGHT_X + 100, ALTHUD_Y + 13, altendpatch, WHITE, color1); althudfunc(ALTHUD_RIGHT_X + 100 - ammo - 2, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); } if (weapon != wp_fist) althudfunc(ALTHUD_RIGHT_X + 107, ALTHUD_Y - 15, altweapon[weapon], WHITE, white); } while (i < NUMCARDS) if (plr->cards[i++] > 0) keys++; if (keys || plr->neededcardflash) { static int keywait; static dboolean showkey; if (plr->neededcardflash) { if (!(menuactive || paused || consoleactive)) { int currenttime = I_GetTimeMS(); if (keywait < currenttime) { showkey = !showkey; keywait = currenttime + HUD_KEY_WAIT; plr->neededcardflash--; } } if (showkey) { altkeypic_t altkeypic = altkeypics[plr->neededcard]; althudfunc(ALTHUD_RIGHT_X + 11 * cardsfound, ALTHUD_Y, altkeypic.patch, WHITE, altkeypic.color); } } else { showkey = false; keywait = 0; } for (i = 0; i < NUMCARDS; i++) { int card = plr->cards[i]; if (card > 0) { altkeypic_t altkeypic = altkeypics[i]; althudfunc(ALTHUD_RIGHT_X + 11 * (card - 1), ALTHUD_Y, altkeypic.patch, WHITE, altkeypic.color); } } } if ((powerup = plr->powers[pw_invulnerability])) { max = INVULNTICS; powerupbar = (powerup == -1 ? max : powerup); } if ((powerup = plr->powers[pw_invisibility]) && (!powerupbar || (powerup >= 0 && powerup < powerupbar))) { max = INVISTICS; powerupbar = (powerup == -1 ? max : powerup); } if ((powerup = plr->powers[pw_ironfeet]) && (!powerupbar || (powerup >= 0 && powerup < powerupbar))) { max = IRONTICS; powerupbar = (powerup == -1 ? max : powerup); } if ((powerup = plr->powers[pw_infrared]) && (!powerupbar || (powerup >= 0 && powerup < powerupbar))) { max = INFRATICS; powerupbar = (powerup == -1 ? max : powerup); } if ((powerup = plr->powers[pw_strength]) && plr->readyweapon == wp_fist && !powerupbar) { max = STARTFLASHING + 1; powerupbar = STARTFLASHING + 1; } if (powerupbar > STARTFLASHING || (powerupbar & 8)) { fillrectfunc(0, ALTHUD_RIGHT_X, ALTHUD_Y + 26, 101, 2, darkgray); fillrectfunc(0, ALTHUD_RIGHT_X, ALTHUD_Y + 26, powerupbar * 101 / max, 2, gray); } }
static void HU_DrawAltHUD(void) { int health = MAX(0, plr->health); int armor = plr->armorpoints; int color2 = (health <= 20 ? red : (health >= 100 ? green : white)); int color1 = color2 + (color2 == green ? coloroffset : 0); int keys = 0; int i = 0; DrawAltHUDNumber(ALTHUD_LEFT_X + 35 - AltHUDNumberWidth(health), ALTHUD_Y + 12, health); if (health > 100) { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, 101, 8, color1); fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, MAX(1, health - 100) + (health == 200), 8, color2); althudfunc(ALTHUD_LEFT_X + 40, ALTHUD_Y + 1, altleftpatch, WHITE, white); althudfunc(ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, altendpatch, WHITE, color2); althudfunc(ALTHUD_LEFT_X + 60 + 98, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); althudfunc(ALTHUD_LEFT_X + 60 + health - 100 - (health < 200) - 2, ALTHUD_Y + 10, altmark2patch, WHITE, color2); } else { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, MAX(1, health) + (health == 100), 8, color1); althudfunc(ALTHUD_LEFT_X + 40, ALTHUD_Y + 1, altleftpatch, WHITE, white); althudfunc(ALTHUD_LEFT_X + 60, ALTHUD_Y + 13, altendpatch, WHITE, color1); althudfunc(ALTHUD_LEFT_X + 60 + MAX(1, health) - (health < 100) - 2, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); } if (armor) { color2 = (plr->armortype == GREENARMOR ? gray : lightgray); color1 = color2 + coloroffset; althudfunc(ALTHUD_LEFT_X + 43, ALTHUD_Y, altarmpatch, WHITE, color2); DrawAltHUDNumber2(ALTHUD_LEFT_X + 35 - AltHUDNumber2Width(armor), ALTHUD_Y, armor, color2); if (armor > 100) { fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, 100 + 1, 4, color1); fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, armor - 100 + (armor == 200), 4, color2); } else fillrectfunc(0, ALTHUD_LEFT_X + 60, ALTHUD_Y + 2, armor + (armor == 100), 4, color1); } else althudfunc(ALTHUD_LEFT_X + 43, ALTHUD_Y, altarmpatch, WHITE, darkgray); if (health) { weapontype_t pendingweapon = plr->pendingweapon; weapontype_t weapon = (pendingweapon != wp_nochange ? pendingweapon : plr->readyweapon); ammotype_t ammotype = weaponinfo[weapon].ammo; if (ammotype != am_noammo) { int ammo = plr->ammo[ammotype]; DrawAltHUDNumber(ALTHUD_RIGHT_X + 101 - AltHUDNumberWidth(ammo), ALTHUD_Y - 1, ammo); ammo = 100 * ammo / plr->maxammo[ammotype]; color1 = (ammo <= 15 ? yellow : white); fillrectfunc(0, ALTHUD_RIGHT_X + 100 - ammo, ALTHUD_Y + 13, ammo + 1, 8, color1); althudfunc(ALTHUD_RIGHT_X, ALTHUD_Y + 13, altrightpatch, WHITE, white); althudfunc(ALTHUD_RIGHT_X + 100, ALTHUD_Y + 13, altendpatch, WHITE, color1); althudfunc(ALTHUD_RIGHT_X + 100 - ammo - 2, ALTHUD_Y + 13, altmarkpatch, WHITE, color1); } else althudfunc(ALTHUD_RIGHT_X, ALTHUD_Y + 13, altrightpatch, WHITE, white); if (weapon) althudfunc(ALTHUD_RIGHT_X + 107, ALTHUD_Y - 15, altweapon[weapon], WHITE, white); } else althudfunc(ALTHUD_RIGHT_X, ALTHUD_Y + 13, altrightpatch, WHITE, white); while (i < NUMCARDS) if (plr->cards[i++] > 0) ++keys; if (keys || plr->neededcardflash) { static int keywait; static dboolean showkey; if (plr->neededcardflash) { if (!(menuactive || paused || consoleactive)) { int currenttime = I_GetTimeMS(); if (keywait < currenttime) { showkey = !showkey; keywait = currenttime + HUD_KEY_WAIT; plr->neededcardflash--; } } if (showkey) { altkeypic_t altkeypic = altkeypics[plr->neededcard]; althudfunc(ALTHUD_RIGHT_X + 11 * cardsfound, ALTHUD_Y, altkeypic.patch, WHITE, altkeypic.color); } } else { showkey = false; keywait = 0; } for (i = 0; i < NUMCARDS; i++) { int card = plr->cards[i]; if (card > 0) { altkeypic_t altkeypic = altkeypics[i]; althudfunc(ALTHUD_RIGHT_X + 11 * (card - 1), ALTHUD_Y, altkeypic.patch, WHITE, altkeypic.color); } } } }