From 2fbee8faf5fcc46e4ac4d70fa6c142925fd0d7dc Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 17 Oct 2022 21:22:13 +0200 Subject: [PATCH] - Exhumed alt hud. --- source/games/exhumed/src/namelist.h | 9 +++ source/games/exhumed/src/player.cpp | 3 +- .../zscript/games/exhumed/exhumedgame.zs | 1 + .../static/zscript/games/exhumed/ui/sbar.zs | 70 +++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/source/games/exhumed/src/namelist.h b/source/games/exhumed/src/namelist.h index cad2b2f24..dfb93db96 100644 --- a/source/games/exhumed/src/namelist.h +++ b/source/games/exhumed/src/namelist.h @@ -1,5 +1,8 @@ x(Torch1, 338) x(Torch2, 350) +x(WeaponSpriteMagnum, 488) +x(WeaponSpriteM60, 490) +x(WeaponSpriteFlamethrower, 491) x(TileRamsesGold, 590) x(TileRamsesWorkTile, 591) x(TileRamsesNormal, 592) @@ -8,9 +11,15 @@ x(KeyIcon1, 675) x(KeyIcon2, 679) x(KeyIcon3, 683) x(KeyIcon4, 687) +x(AmmoSpriteMagnum, 877) +x(AmmoSpriteGrenade, 878) +x(AmmoSpriteFuel, 879) +x(AmmoSpriteM60_1, 881) +x(WeaponSpriteCobra, 899) x(CrosshairTile, 1579) x(SkullJaw, 3437) x(PowerslaveLogo, 3442) +x(AmmoSpriteCobra, 3457) x(MenuNewGameTile, 3460) x(MenuLoadGameTile, 3461) x(MenuMusicTile, 3465) diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 316fe89e3..8265658d2 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -2778,7 +2778,8 @@ DEFINE_FIELD_X(ExhumedPlayer, Player, keys); DEFINE_FIELD_X(ExhumedPlayer, Player, nMagic); DEFINE_FIELD_X(ExhumedPlayer, Player, nItem); DEFINE_FIELD_X(ExhumedPlayer, Player, items); -DEFINE_FIELD_X(ExhumedPlayer, Player, nAmmo); // TODO - kMaxWeapons? +DEFINE_FIELD_X(ExhumedPlayer, Player, nAmmo); // TODO - kMaxWeapons? +DEFINE_FIELD_X(ExhumedPlayer, Player, nPlayerWeapons); DEFINE_FIELD_X(ExhumedPlayer, Player, nCurrentWeapon); DEFINE_FIELD_X(ExhumedPlayer, Player, nSeqSize2); diff --git a/wadsrc/static/zscript/games/exhumed/exhumedgame.zs b/wadsrc/static/zscript/games/exhumed/exhumedgame.zs index 4fe187a59..0b4a5fa2e 100644 --- a/wadsrc/static/zscript/games/exhumed/exhumedgame.zs +++ b/wadsrc/static/zscript/games/exhumed/exhumedgame.zs @@ -52,6 +52,7 @@ struct ExhumedPlayer native native int16 nItem; native uint8 items[8]; native int16 nAmmo[7]; // TODO - kMaxWeapons? + native int16 nPlayerWeapons; native int16 nCurrentWeapon; native int16 nSeqSize2; diff --git a/wadsrc/static/zscript/games/exhumed/ui/sbar.zs b/wadsrc/static/zscript/games/exhumed/ui/sbar.zs index 10e1ed90a..3c9137509 100644 --- a/wadsrc/static/zscript/games/exhumed/ui/sbar.zs +++ b/wadsrc/static/zscript/games/exhumed/ui/sbar.zs @@ -170,6 +170,12 @@ class ExhumedStatusBar : RazeStatusBar return chunk.tex; } + String GetStatusSequenceName(int nSequence, int frameindex) + { + let texid = GetStatusSequencePic(nSequence, frameindex); + return TexMan.GetName(texid); + } + //--------------------------------------------------------------------------- // // Frag display - very ugly and may have to be redone if multiplayer support gets added. @@ -803,4 +809,68 @@ class ExhumedStatusBar : RazeStatusBar } DoLevelStats(hud_size == Hud_Nothing ? 0 : hud_size == Hud_full ? 20 : 45, info); } + + + //--------------------------------------------------------------------------- + // + // + // + //--------------------------------------------------------------------------- + + override void GetAllStats(HudStats stats) + { + stats.Clear(); + stats.info.fontscale = 1; + + stats.info.spacing = 8; + stats.info.letterColor = Font.TEXTCOLOR_RED; + stats.info.standardColor = Font.TEXTCOLOR_UNTRANSLATED; + stats.info.completeColor = Font.TEXTCOLOR_DARKGREEN; + stats.info.statfont = SmallFont; + + let pp = Exhumed.GetViewPlayer(); + stats.healthicon = GetStatusSequenceName(125, 0); + stats.healthvalue = pp.nHealth >> 3; + + SetMagicFrame(pp); + + stats.armoricons.Push(GetStatusSequenceName(nItemSeq, nItemFrame)); + stats.armorvalues.Push(pp.nMagic / 10); + + if (pp.isUnderwater()) + { + let img = GetStatusSequenceName(133, airframe); + stats.armoricons.Push(img); + stats.armorvalues.Push(-1); + } + + int nKeys = pp.keys; + for (int i = 0; i < 4; i++) + { + if (nKeys & (0x1000 << i)) + { + stats.keyicons.Push(String.Format("KeyIcon%d", i+1)); + } + } + + static const string weaponicons[] = { "", "WeaponSpriteMagnum", "WeaponSpriteM60", "WeaponSpriteFlamethrower", "", "WeaponSpriteCobra", "" /* sprite for ring?*/}; + for (int i = 0; i < weaponicons.Size(); i++) + { + if (pp.nPlayerWeapons & (1 << i) && weaponicons[i] != "") + { + if (pp.nCurrentWeapon == i) stats.weaponselect = stats.weaponicons.Size(); + stats.weaponicons.Push(weaponicons[i]); + } + } + + static const string ammoicons[] = { "", "AmmoSpriteMagnum", "AmmoSpriteM60_1", "AmmoSpriteFuel", "AmmoSpriteGrenade", "AmmoSpriteCobra", "-" /* sprite for ring?*/}; + for (int i = 0; i < ammoicons.Size(); i++) + { + if (pp.nCurrentWeapon == i) stats.ammoselect = stats.ammoicons.Size(); + stats.ammoicons.Push(ammoicons[i]); + stats.ammovalues.Push(pp.nAmmo[i]); + stats.ammomaxvalues.Push(300); + } + + } }