feat: Implement chaingun pickup face animation and update HUD rendering logic

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-23 12:23:10 +01:00
parent 8ed460b03e
commit 400ce4f680
9 changed files with 193 additions and 6 deletions
@@ -222,10 +222,25 @@ abstract class RendererBackend<T>
}
void _drawHudFace(WolfEngine engine, List<VgaImage> vgaImages) {
final faceRef = engine.data.registry.hud.faceForHealth(
engine.player.health,
);
final int faceIndex = faceRef?.vgaIndex ?? -1;
int faceIndex = -1;
if (engine.player.isChaingunPickupFaceActive) {
faceIndex =
engine.data.registry.hud.resolve(HudKey.faceGotGatling)?.vgaIndex ??
-1;
} else {
final HudKey faceKey = engine.data.registry.hud.faceKeyForHealth(
engine.player.health,
);
final int baseIndex =
engine.data.registry.hud.resolve(faceKey)?.vgaIndex ?? -1;
if (baseIndex >= 0) {
faceIndex = faceKey == HudKey.faceDead
? baseIndex
: baseIndex + engine.player.hudFaceFrame;
}
}
if (faceIndex >= 0 && faceIndex < vgaImages.length) {
blitHudVgaImage(vgaImages[faceIndex], 136, 164);
}
@@ -190,6 +190,10 @@ class SoftwareRenderer extends RendererBackend<FrameBuffer> {
? normalExitColor
: objTile == MapObject.secretExitTrigger
? secretExitColor
: objTile == MapObject.goldKey
? goldKeyColor
: objTile == MapObject.silverKey
? silverKeyColor
: (wallTile == 0
? floorColor
: (wallTile >= 90 ? doorColor : wallColor));