@@ -460,18 +460,17 @@ class SoftwareRasterizer implements Rasterizer {
|
|||||||
faceIndex = 127; // Dead face
|
faceIndex = 127; // Dead face
|
||||||
} else {
|
} else {
|
||||||
int healthTier = ((100 - health) ~/ 16).clamp(0, 6);
|
int healthTier = ((100 - health) ~/ 16).clamp(0, 6);
|
||||||
|
|
||||||
// Base face is 106 (100% health, looking forward).
|
|
||||||
faceIndex = 106 + (healthTier * 3);
|
faceIndex = 106 + (healthTier * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (faceIndex < engine.data.vgaImages.length) {
|
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) {
|
void _drawWeaponIcon(WolfEngine engine, FrameBuffer buffer) {
|
||||||
int weaponIndex = 89; // Default to Pistol (Index 89)
|
int weaponIndex = 89; // Default to Pistol
|
||||||
|
|
||||||
if (engine.player.hasChainGun) {
|
if (engine.player.hasChainGun) {
|
||||||
weaponIndex = 91;
|
weaponIndex = 91;
|
||||||
@@ -480,8 +479,8 @@ class SoftwareRasterizer implements Rasterizer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (weaponIndex < engine.data.vgaImages.length) {
|
if (weaponIndex < engine.data.vgaImages.length) {
|
||||||
// The weapon box starts at X=272. Let's center it vertically at 164.
|
// Exactly X=256
|
||||||
_blitVgaImage(engine.data.vgaImages[weaponIndex], 272, 164, buffer);
|
_blitVgaImage(engine.data.vgaImages[weaponIndex], 256, 164, buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,27 +494,30 @@ class SoftwareRasterizer implements Rasterizer {
|
|||||||
// 1. Draw Background
|
// 1. Draw Background
|
||||||
_blitVgaImage(engine.data.vgaImages[statusBarIndex], 0, 160, buffer);
|
_blitVgaImage(engine.data.vgaImages[statusBarIndex], 0, 160, buffer);
|
||||||
|
|
||||||
// 2. Draw Stats (Right-aligned to fit inside the dark blue boxes)
|
// 2. Draw Stats (100% mathematically accurate right-aligned coordinates)
|
||||||
// (Using a hardcoded '1' for the floor since your engine hides currentLevelIndex)
|
_drawNumber(1, 32, 176, buffer, engine.data.vgaImages); // Floor
|
||||||
_drawNumber(1, 40, 176, buffer, engine.data.vgaImages); // Floor
|
|
||||||
_drawNumber(
|
_drawNumber(
|
||||||
engine.player.score,
|
engine.player.score,
|
||||||
104,
|
96,
|
||||||
176,
|
176,
|
||||||
buffer,
|
buffer,
|
||||||
engine.data.vgaImages,
|
engine.data.vgaImages,
|
||||||
); // Score
|
); // Score
|
||||||
_drawNumber(3, 136, 176, buffer, engine.data.vgaImages); // Lives
|
_drawNumber(3, 120, 176, buffer, engine.data.vgaImages); // Lives
|
||||||
_drawNumber(
|
_drawNumber(
|
||||||
engine.player.health,
|
engine.player.health,
|
||||||
216,
|
192,
|
||||||
176,
|
176,
|
||||||
buffer,
|
buffer,
|
||||||
engine.data.vgaImages,
|
engine.data.vgaImages,
|
||||||
); // Health
|
); // Health
|
||||||
|
_drawNumber(
|
||||||
// Pulled the Ammo X coordinate back to 264 so it doesn't bleed into the weapon!
|
engine.player.ammo,
|
||||||
_drawNumber(engine.player.ammo, 264, 176, buffer, engine.data.vgaImages);
|
232,
|
||||||
|
176,
|
||||||
|
buffer,
|
||||||
|
engine.data.vgaImages,
|
||||||
|
); // Ammo
|
||||||
|
|
||||||
// 3. Draw BJ's Face & Current Weapon
|
// 3. Draw BJ's Face & Current Weapon
|
||||||
_drawFace(engine, buffer);
|
_drawFace(engine, buffer);
|
||||||
|
|||||||
Reference in New Issue
Block a user