If you want to try it out, paste it into doombuilder or something and run it on a map. Puke 3 to start it.
Spoiler:Code: Select all
#include "zcommon.acs" #define DrawHud 1 #define DrawLightHud 2 #define Start 3 #define HUD_BACKGROUND "STBAR" #define FACE_NORMAL 1 #define FACE_EVIL 2 #define FACE_ANGRY 3 #define FACE_OUCH 4 #define FACE_DEAD 5 #define ID_FACE 100 #define ID_AMMO1 200 #define ID_AMMO2 201 #define ID_AMMO3 202 #define ID_HEALTH1 300 #define ID_HEALTH2 301 #define ID_HEALTH3 302 #define ID_ARMOR1 400 #define ID_ARMOR2 401 #define ID_ARMOR3 402 #define ID_STBAR 1000 #define ID_MINIAMMO 500 #define ID_MINIAMMO2 550 #define ID_WEAPONS 600 #define AMMO_NUM 4 int faceState = FACE_NORMAL; int faceAnim = 0; int faceTimer = 0; int health = 0; int healthState = 4; int loop = 1; int armor = 0; int curAmmo = -1; int ammoCnt = 0; int newAmmoCnt = 0; int weapon = -1; int ammoCounts[4] = { 1000, 1000, 1000, 1000 }; int ammoCapac[4] = { 1000, 1000, 1000, 1000 }; int screenblocks; bool backPack = false; bool haveWeapons[9] = { false, false, false, false, false, false, false, false, false }; str weapons[9] = { "Fist", "Chainsaw", "Pistol", "Shotgun", "SuperShotgun", "Chaingun", "RocketLauncher", "PlasmaRifle", "BFG9000" }; str ammos[4] = { "Clip", "Shell", "RocketAmmo", "Cell" }; int weapAmmos[9] = { -1, -1, 0, 1, 1, 0, 2, 3, 3 }; script Start(void) { screenblocks = getcvar("screenblocks"); do { if (screenblocks <= 10) ACS_ExecuteWait(DrawHud, 0, 0, 0, 0); else if (screenblocks == 11) ACS_ExecuteWait(DrawLightHud, 0, 0, 0, 0); else { Delay(30); screenblocks = getcvar("screenblocks"); } } while (loop == 1); } script DrawLightHud(void) { while (screenblocks == 11) { Delay(30); screenblocks = getcvar("screenblocks"); } } script DrawHud(void) { health = checkinventory("Health"); armor = checkinventory("Armor"); SetHudSize(320, 200, 1); SetFont(HUD_BACKGROUND); HudMessage(s:"A"; HUDMSG_PLAIN, ID_STBAR, CR_UNTRANSLATED, 160.0, 16.0, 0); SetFont("STARMS"); HudMessage(s:"A"; HUDMSG_PLAIN, ID_STBAR - 1, CR_UNTRANSLATED, 124.0, 16.0, 0); SetFont("STTPRCNT"); HudMessage(s:"A"; HUDMSG_PLAIN, ID_STBAR - 2, CR_UNTRANSLATED, 97.0, 11.0, 0); HudMessage(s:"A"; HUDMSG_PLAIN, ID_STBAR - 3, CR_UNTRANSLATED, 228.0, 11.0, 0); DrawHealth(); DrawArmor(); DrawLittleAmmos(); NoWeapons(); DoWeapons(); while (screenblocks <= 10) { screenblocks = getcvar ("screenblocks"); int newHealth = checkinventory("Health"); int newArmor = checkinventory("Armor"); // The status bar is visible if (newHealth != health) { int diff = newHealth - health; if (diff < 0) { if (diff < -20) faceState = FACE_OUCH; else faceState = FACE_ANGRY; } health = newHealth; if (health < 99) { healthState = health / 20; if (health <= 0) { healthState = 0; faceState = FACE_DEAD; } } else healthState = 4; DrawHealth(); faceTimer = 0; } if (newArmor != armor) { armor = newArmor; DrawArmor(); } DoWeapons(); newAmmoCnt = CheckInventory(ammos[curAmmo]); if (newAmmoCnt != ammoCnt) { ammoCnt = newAmmoCnt; DrawAmmo(); } DrawFace(); DrawLittleAmmos(); Delay(1); } SetFont("STTPRCNT"); HudMessage(s:""; HUDMSG_PLAIN, ID_STBAR, CR_UNTRANSLATED, 0.0, 0.0, 0.1); HudMessage(s:""; HUDMSG_PLAIN, ID_STBAR - 1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); HudMessage(s:""; HUDMSG_PLAIN, ID_STBAR - 2, CR_UNTRANSLATED, 0.0, 0.0, 0.1); HudMessage(s:""; HUDMSG_PLAIN, ID_STBAR - 3, CR_UNTRANSLATED, 0.0, 0.0, 0.1); } str facesNormal[5][4] = {{ "STFST40", "STFST41", "STFST42", "STFST41" }, { "STFST30", "STFST31", "STFST32", "STFST31" }, { "STFST20", "STFST21", "STFST22", "STFST21" }, { "STFST10", "STFST11", "STFST12", "STFST11" }, { "STFST00", "STFST01", "STFST02", "STFST01" }}; str facesOuch[5] = { "STFOUCH4", "STFOUCH3", "STFOUCH2", "STFOUCH1", "STFOUCH0" }; str facesAngry[5] = { "STFKILL4", "STFKILL3", "STFKILL2", "STFKILL1", "STFKILL0" }; function void DrawFace(void) { if (faceState == FACE_NORMAL) { if (faceTimer < 1) { faceTimer = 30; SetFont(facesNormal[healthState][faceAnim]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_FACE, CR_UNTRANSLATED, 155.0, 14.0, 0); faceAnim++; if (faceAnim > 3) faceAnim = 0; } } else if (faceState == FACE_ANGRY) { faceTimer = 40; SetFont(facesAngry[healthState]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_FACE, CR_UNTRANSLATED, 155.0, 14.0, 0); faceState = FACE_NORMAL; } else if (faceState == FACE_OUCH) { faceTimer = 40; SetFont(facesOuch[healthState]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_FACE, CR_UNTRANSLATED, 155.0, 15.0, 0); faceState = FACE_NORMAL; } else if (faceState == FACE_DEAD) { faceTimer = 5000; SetFont("STFDEAD0"); HudMessage(s:"A"; HUDMSG_PLAIN, ID_FACE, CR_UNTRANSLATED, 155.0, 15.0, 0); } faceTimer--; } str healthNums[10] = { "STTNUM0", "STTNUM1", "STTNUM2", "STTNUM3", "STTNUM4", "STTNUM5", "STTNUM6", "STTNUM7", "STTNUM8", "STTNUM9" }; function void DrawHealth(void) { int numOn = 0; int hNum = health; if (hNum < 0) hNum = 0; if ((hNum / 100) > 0) { SetFont(healthNums[hNum / 100]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_HEALTH1, CR_UNTRANSLATED, 55.0, 11.0, 0); numOn = 1; } else HudMessage(s:""; HUDMSG_PLAIN, ID_HEALTH1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); hNum = health % 100; if (((hNum / 10) > 0) || numOn) { SetFont(healthNums[hNum / 10]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_HEALTH2, CR_UNTRANSLATED, 69.0, 11.0, 0); } else HudMessage(s:""; HUDMSG_PLAIN, ID_HEALTH2, CR_UNTRANSLATED, 0.0, 0.0, 0.1); hNum = health % 10; SetFont(healthNums[hNum]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_HEALTH3, CR_UNTRANSLATED, 83.0, 11.0, 0); } function void DrawArmor(void) { int numOn = 0; int aNum = armor; if (aNum < 0) aNum = 0; if ((aNum / 100) > 0) { SetFont(healthNums[aNum / 100]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_ARMOR1, CR_UNTRANSLATED, 186.0, 11.0, 0); numOn = 1; } else HudMessage(s:""; HUDMSG_PLAIN, ID_ARMOR1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = armor % 100; if (((aNum / 10) > 0) || numOn) { SetFont(healthNums[aNum / 10]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_ARMOR2, CR_UNTRANSLATED, 200.0, 11.0, 0); } else HudMessage(s:""; HUDMSG_PLAIN, ID_ARMOR2, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = armor % 10; SetFont(healthNums[aNum]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_ARMOR3, CR_UNTRANSLATED, 214.0, 11.0, 0); } int weap_x[7] = { 113, 125, 125, 137, 113, 125, 137 }; int weap_y[7] = { 7, 7, 7, 7, 17, 17, 17 }; //int weap_c = { 3, 4, 4, 5, 6, 7, 8}; str ammoNums[10] = { "STYSNUM0", "STYSNUM1", "STYSNUM2", "STYSNUM3", "STYSNUM4", "STYSNUM5", "STYSNUM6", "STYSNUM7", "STYSNUM8", "STYSNUM9" }; str ammoBlankNums[10] = { "STGNUM0", "STGNUM1", "STGNUM2", "STGNUM3", "STGNUM4", "STGNUM5", "STGNUM6", "STGNUM7", "STGNUM8", "STGNUM9" }; int weapIDs[9] = { -1, -1, 2, 3, 3, 4, 5, 6, 7 }; function void DoWeapons(void) { for(int i = 0; i < 9; i++) { if (CheckInventory(weapons[i])) { if (CheckWeapon(weapons[i])) { if(i != weapon) { weapon = i; curAmmo = weapAmmos[i]; } } if (haveWeapons[i] == false) { haveWeapons[i] = true; if (weapIDs[i] > -1) { SetFont(ammoNums[weapIDs[i]]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_WEAPONS + weapIDs[i], CR_UNTRANSLATED, weap_x[i - 2] * 1.0, weap_y[i - 2] * 1.0, 0); } } } } } function void NoWeapons(void) { for(int i = 0; i < 9; i++) { if (weapIDs[i] > -1) { SetFont(ammoBlankNums[weapIDs[i]]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_WEAPONS + weapIDs[i], CR_UNTRANSLATED, weap_x[i - 2] * 1.0, weap_y[i - 2] * 1.0, 0); } } } function void DrawAmmo(void) { int numOn = 0; if (curAmmo == -1) { HudMessage(s:""; HUDMSG_PLAIN, ID_AMMO1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); HudMessage(s:""; HUDMSG_PLAIN, ID_AMMO2, CR_UNTRANSLATED, 0.0, 0.0, 0.1); HudMessage(s:""; HUDMSG_PLAIN, ID_AMMO3, CR_UNTRANSLATED, 0.0, 0.0, 0.1); return; } int aNum = ammoCnt; if (aNum < 0) aNum = 0; if ((aNum / 100) > 0) { SetFont(healthNums[aNum / 100]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_AMMO1, CR_UNTRANSLATED, 10.0, 11.0, 0); numOn = 1; } else HudMessage(s:""; HUDMSG_PLAIN, ID_AMMO1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = ammoCnt % 100; if (((aNum / 10) > 0) || numOn) { SetFont(healthNums[aNum / 10]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_AMMO2, CR_UNTRANSLATED, 24.0, 11.0, 0); } else HudMessage(s:""; HUDMSG_PLAIN, ID_AMMO2, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = ammoCnt % 10; SetFont(healthNums[aNum]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_AMMO3, CR_UNTRANSLATED, 38.0, 11.0, 0); } function void DrawLittleAmmos(void) { int temp; int aNum; int numOn = 0; for(int i = 0; i < AMMO_NUM; i++) { temp = CheckInventory(ammos[i]); if (temp != ammoCounts[i]) { aNum = temp; if ((aNum / 100) > 0) { SetFont(ammoNums[aNum / 100]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO + (i * 4), CR_UNTRANSLATED, 279.0, 8.0 + (i * 6.0), 0); numOn = 1; } else HudMessage(s:""; HUDMSG_PLAIN, ID_MINIAMMO + (i * 4), CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = temp % 100; if (((aNum / 10) > 0) || numOn) { SetFont(ammoNums[aNum / 10]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO + (i * 4) + 1, CR_UNTRANSLATED, 283.0, 8.0 + (i * 6.0), 0); } else HudMessage(s:""; HUDMSG_PLAIN, ID_MINIAMMO + (i * 4) + 1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = temp % 10; SetFont(ammoNums[aNum]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO + (i * 4) + 2, CR_UNTRANSLATED, 287.0, 8.0 + (i * 6.0), 0); ammoCounts[i] = temp; } numOn = 0; temp = GetAmmoCapacity(ammos[i]); if (temp != ammoCapac[i]) { aNum = temp; if ((aNum / 100) > 0) { SetFont(ammoNums[aNum / 100]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO2 + (i * 4), CR_UNTRANSLATED, 304.0, 8.0 + (i * 6.0), 0); numOn = true; } else HudMessage(s:""; HUDMSG_PLAIN, ID_MINIAMMO2 + (i * 4), CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = temp % 100; if (((aNum / 10) > 0) || numOn) { SetFont(ammoNums[aNum / 10]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO2 + (i * 4) + 1, CR_UNTRANSLATED, 308.0, 8.0 + (i * 6.0), 0); } else HudMessage(s:""; HUDMSG_PLAIN, ID_MINIAMMO2 + (i * 4) + 1, CR_UNTRANSLATED, 0.0, 0.0, 0.1); aNum = temp % 10; SetFont(ammoNums[aNum]); HudMessage(s:"A"; HUDMSG_PLAIN, ID_MINIAMMO2 + (i * 4) + 2, CR_UNTRANSLATED, 312.0, 8.0 + (i * 6.0), 0); ammoCapac[i] = temp; } numOn = 0; } }