diff --git a/Source/control.cpp b/Source/control.cpp index ae15b8893..98f8041ca 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1,6 +1,6 @@ #include "diablo.h" -char sgbNextTalkSave; // weak +BYTE sgbNextTalkSave; BYTE sgbTalkSavePos; BYTE *pDurIcons; BYTE *pChrButtons; @@ -2573,7 +2573,7 @@ void control_release_talk_btn() } } -void control_reset_talk_msg() +void control_reset_talk_msg(char* msg) { int i, pmask; pmask = 0; @@ -2669,43 +2669,32 @@ BOOL control_presskeys(int vkey) void control_press_enter() { - signed int v0; // esi - char(*v1)[80]; // ebp - char v2; // al - int v3; // ecx - char *v4; // ebp + int i; + BYTE talk_save; if (sgszTalkMsg[0]) { - control_reset_talk_msg(); - v0 = 0; - v1 = sgszTalkSave; - do { - if (!strcmp((const char *)v1, sgszTalkMsg)) + control_reset_talk_msg(sgszTalkMsg); + for (i = 0; i < 8; i++) { + if (!strcmp(sgszTalkSave[i], sgszTalkMsg)) break; - ++v1; - ++v0; - } while ((signed int)v1 < (signed int)&sgszTalkSave[8]); - if (v0 < 8) { - v2 = sgbNextTalkSave; - v3 = (sgbNextTalkSave - 1) & 7; - if (v0 != v3) { - v4 = sgszTalkSave[v3]; - strcpy(sgszTalkSave[v0], sgszTalkSave[v3]); - strcpy(v4, sgszTalkMsg); - v2 = sgbNextTalkSave; - } + } + if (i >= 8) { + strcpy(sgszTalkSave[sgbNextTalkSave], sgszTalkMsg); + sgbNextTalkSave = sgbNextTalkSave + 1; + sgbNextTalkSave &= 7; } else { - strcpy(sgszTalkSave[(unsigned char)sgbNextTalkSave], sgszTalkMsg); - v2 = (sgbNextTalkSave + 1) & 7; - sgbNextTalkSave = (sgbNextTalkSave + 1) & 7; + talk_save = sgbNextTalkSave - 1; + talk_save &= 7; + if (i != talk_save) { + strcpy(sgszTalkSave[i], sgszTalkSave[talk_save]); + strcpy(sgszTalkSave[talk_save], sgszTalkMsg); + } } - sgszTalkMsg[0] = 0; - sgbTalkSavePos = v2; + sgszTalkMsg[0] = '\0'; + sgbTalkSavePos = sgbNextTalkSave; } control_reset_talk(); } -// 4B84CC: using guessed type char sgbNextTalkSave; -// 4B84CD: using guessed type char sgbTalkSavePos; void control_up_down(int v) {