From 7cdc7b0a9c57e8854a9a6b3eb7bacb736215c2be Mon Sep 17 00:00:00 2001 From: Hans Kokx Date: Mon, 16 Mar 2026 00:53:48 +0100 Subject: [PATCH] Fixed HUD display Signed-off-by: Hans Kokx --- .../lib/src/software_rasterizer.dart | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/wolf_3d_engine/lib/src/software_rasterizer.dart b/packages/wolf_3d_engine/lib/src/software_rasterizer.dart index b568a0e..50d62ca 100644 --- a/packages/wolf_3d_engine/lib/src/software_rasterizer.dart +++ b/packages/wolf_3d_engine/lib/src/software_rasterizer.dart @@ -460,18 +460,17 @@ class SoftwareRasterizer implements Rasterizer { faceIndex = 127; // Dead face } else { int healthTier = ((100 - health) ~/ 16).clamp(0, 6); - - // Base face is 106 (100% health, looking forward). faceIndex = 106 + (healthTier * 3); } if (faceIndex < engine.data.vgaImages.length) { - _blitVgaImage(engine.data.vgaImages[faceIndex], 142, 164, buffer); + // Exactly X=136. This will perfectly smother the background face. + _blitVgaImage(engine.data.vgaImages[faceIndex], 136, 164, buffer); } } void _drawWeaponIcon(WolfEngine engine, FrameBuffer buffer) { - int weaponIndex = 89; // Default to Pistol (Index 89) + int weaponIndex = 89; // Default to Pistol if (engine.player.hasChainGun) { weaponIndex = 91; @@ -480,8 +479,8 @@ class SoftwareRasterizer implements Rasterizer { } if (weaponIndex < engine.data.vgaImages.length) { - // The weapon box starts at X=272. Let's center it vertically at 164. - _blitVgaImage(engine.data.vgaImages[weaponIndex], 272, 164, buffer); + // Exactly X=256 + _blitVgaImage(engine.data.vgaImages[weaponIndex], 256, 164, buffer); } } @@ -495,27 +494,30 @@ class SoftwareRasterizer implements Rasterizer { // 1. Draw Background _blitVgaImage(engine.data.vgaImages[statusBarIndex], 0, 160, buffer); - // 2. Draw Stats (Right-aligned to fit inside the dark blue boxes) - // (Using a hardcoded '1' for the floor since your engine hides currentLevelIndex) - _drawNumber(1, 40, 176, buffer, engine.data.vgaImages); // Floor + // 2. Draw Stats (100% mathematically accurate right-aligned coordinates) + _drawNumber(1, 32, 176, buffer, engine.data.vgaImages); // Floor _drawNumber( engine.player.score, - 104, + 96, 176, buffer, engine.data.vgaImages, ); // Score - _drawNumber(3, 136, 176, buffer, engine.data.vgaImages); // Lives + _drawNumber(3, 120, 176, buffer, engine.data.vgaImages); // Lives _drawNumber( engine.player.health, - 216, + 192, 176, buffer, engine.data.vgaImages, ); // Health - - // Pulled the Ammo X coordinate back to 264 so it doesn't bleed into the weapon! - _drawNumber(engine.player.ammo, 264, 176, buffer, engine.data.vgaImages); + _drawNumber( + engine.player.ammo, + 232, + 176, + buffer, + engine.data.vgaImages, + ); // Ammo // 3. Draw BJ's Face & Current Weapon _drawFace(engine, buffer);