diff --git a/Source/control.cpp b/Source/control.cpp index 6e8423ecd..438501d0c 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1342,15 +1342,22 @@ void DrawTalkPan(const Surface &out) UiFlags color = player.friendlyMode ? UiFlags::ColorWhitegold : UiFlags::ColorRed; const Point talkPanPosition = mainPanelPosition + Displacement { 172, 84 + 18 * talkBtn }; if (WhisperList[i]) { - if (TalkButtonsDown[talkBtn]) { - ClxDraw(out, talkPanPosition, (*talkButtons)[talkBtn != 0 ? 3 : 2]); + if (TalkButtonsDown[talkBtn]) { // the normal (unpressed) voice button is pre-rendered on the panel, only need to draw over it when the button is held + unsigned spriteIndex = talkBtn == 0 ? 2 : 3; // the first button sprite includes a tip from the devils wing so is different to the rest. + ClxDraw(out, talkPanPosition, (*talkButtons)[spriteIndex]); + + // Draw the translated string over the top of the default (english) button. This graphic is inset to avoid overlapping the wingtip, letting + // the first button be treated the same as the other two further down the panel. RenderClxSprite(out, (*TalkButton)[2], talkPanPosition + Displacement { 4, -15 }); } } else { - int nCel = talkBtn != 0 ? 1 : 0; + unsigned spriteIndex = talkBtn == 0 ? 0 : 1; // the first button sprite includes a tip from the devils wing so is different to the rest. if (TalkButtonsDown[talkBtn]) - nCel += 4; - ClxDraw(out, talkPanPosition, (*talkButtons)[nCel]); + spriteIndex += 4; // held button sprites are at index 4 and 5 (with and without wingtip respectively) + ClxDraw(out, talkPanPosition, (*talkButtons)[spriteIndex]); + + // Draw the translated string over the top of the default (english) button. This graphic is inset to avoid overlapping the wingtip, letting + // the first button be treated the same as the other two further down the panel. RenderClxSprite(out, (*TalkButton)[TalkButtonsDown[talkBtn] ? 1 : 0], talkPanPosition + Displacement { 4, -15 }); } if (player.plractive) {