From d218b5e3ae505881e47bea1e52ba397b6ac3bac4 Mon Sep 17 00:00:00 2001 From: Sergey Semushin Date: Tue, 28 May 2019 07:12:50 +0300 Subject: [PATCH] Clean up DrawTalkPan. --- Source/control.cpp | 120 ++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 68 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 98f8041ca..238389143 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -2431,79 +2431,63 @@ void control_set_gold_curs(int pnum) void DrawTalkPan() { - int v0; // esi - signed int v1; // edi - signed int v2; // esi - char *v3; // eax - int v4; // esi - int v5; // esi - int v6; // ebx - int v7; // eax - int a4; // [esp+4h] [ebp-Ch] - char *a1; // [esp+8h] [ebp-8h] - int v10; // [esp+Ch] [ebp-4h] - - v0 = 0; - if (talkflag) { - DrawPanelBox(175, sgbPlrTalkTbl + 20, 294, 5, 239, 516); - v1 = 293; - do { - DrawPanelBox((v0 >> 1) + 175, sgbPlrTalkTbl + v0 + 25, v1, 1, (v0 >> 1) + 239, v0 + 521); - ++v0; - --v1; - } while (v1 > 283); - DrawPanelBox(185, sgbPlrTalkTbl + 35, 274, 30, 249, 531); - DrawPanelBox(180, sgbPlrTalkTbl + 65, 284, 5, 244, 561); - v2 = 0; - do { - DrawPanelBox(180, sgbPlrTalkTbl + v2 + 70, v2 + 284, 1, 244, v2 + 566); - ++v2; - } while (v2 < 10); - DrawPanelBox(170, sgbPlrTalkTbl + 80, 310, 55, 234, 576); - v3 = sgszTalkMsg; - v4 = 0; - do { - v3 = control_print_talk_msg(v3, 0, v4, &a4, 0); - if (!v3) - goto LABEL_10; - v4 += 13; - } while (v4 < 39); - *v3 = 0; - LABEL_10: - CelDecDatOnly(gpBuffer + a4, pCelBuff, frame, 12); - v5 = 0; - a1 = plr[0]._pName; - v10 = 0; - frame = (frame & 7) + 1; - while (v10 == myplr) { - LABEL_21: - a1 += 21720; - ++v10; - if ((signed int)a1 >= (signed int)&plr[4]._pName) - return; - } - if (whisper[v10]) { - v6 = 3; - if (!talkbtndown[v5]) { - LABEL_18: - if (*(a1 - 291)) - control_print_talk_msg(a1, 46, 18 * v5 + 60, &a4, v6); - ++v5; - goto LABEL_21; + int i, off, talk_btn, color, nCel, x; + char *msg; + + off = 0; + if (!talkflag) + return; + + DrawPanelBox(175, sgbPlrTalkTbl + 20, 294, 5, 239, 516); + for (i = 293; i > 283; off++, i--) { + DrawPanelBox((off >> 1) + 175, sgbPlrTalkTbl + off + 25, i, 1, (off >> 1) + 239, off + 521); + } + DrawPanelBox(185, sgbPlrTalkTbl + 35, 274, 30, 249, 531); + DrawPanelBox(180, sgbPlrTalkTbl + 65, 284, 5, 244, 561); + for (i = 0; i < 10; i++) { + DrawPanelBox(180, sgbPlrTalkTbl + i + 70, i + 284, 1, 244, i + 566); + } + DrawPanelBox(170, sgbPlrTalkTbl + 80, 310, 55, 234, 576); + msg = sgszTalkMsg; + for (i = 0; i < 39; i += 13) { + msg = control_print_talk_msg(msg, 0, i, &x, 0); + if (!msg) + break; + } + if (msg) + *msg = '\0'; + CelDecDatOnly(gpBuffer + x, pCelBuff, frame, 12); + talk_btn = 0; + frame = (frame & 7) + 1; + for (i = 0; i < 4; i++) { + if (i == myplr) + continue; + if (whisper[i]) { + color = COL_GOLD; + if (talkbtndown[talk_btn]) { + if (talk_btn != 0) + nCel = 4; + else + nCel = 3; + CelDecodeOnly(236, 596 + 18 * talk_btn, pTalkBtns, nCel, 61); } - v7 = (v5 != 0) + 3; } else { - v7 = (v5 != 0) + 1; - v6 = 2; - if (talkbtndown[v5]) - v7 = (v5 != 0) + 5; + color = COL_RED; + if (talk_btn != 0) + nCel = 2; + else + nCel = 1; + if (talkbtndown[talk_btn]) + nCel += 4; + CelDecodeOnly(236, 596 + 18 * talk_btn, pTalkBtns, nCel, 61); } - CelDecodeOnly(236, 18 * v5 + 596, pTalkBtns, v7, 61); - goto LABEL_18; + if (plr[i].plractive) { + control_print_talk_msg(plr[i]._pName, 46, 60 + talk_btn * 18, &x, color); + } + + talk_btn++; } } -// 4B8840: using guessed type int sgbPlrTalkTbl; -// 4B8960: using guessed type int talkflag; char *control_print_talk_msg(char *msg, int x, int y, int *a4, int color) {