From 971287499471650642aed5586ec69c2f8251dea7 Mon Sep 17 00:00:00 2001 From: qndel Date: Thu, 2 May 2019 13:46:32 +0200 Subject: [PATCH] gmenu_up_down bin exact --- Source/gmenu.cpp | 47 ++++++++++++++++++++++------------------------- Source/gmenu.h | 2 +- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 85f4715b5..65026a9d5 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -126,38 +126,35 @@ void gmenu_call_proc(TMenuItem *pItem, void(*gmFunc)(TMenuItem *)) } } sgpCurrItem = &v2[v3 - 1]; - gmenu_up_down(1); + gmenu_up_down(TRUE); } // 525740: using guessed type int PauseMode; // 634464: using guessed type char byte_634464; // 63448C: using guessed type int dword_63448C; -void gmenu_up_down(int a1) +void gmenu_up_down(BOOL isDown) { - TMenuItem *v1; // eax - int v2; // edi + int i; - v1 = sgpCurrItem; - if (sgpCurrItem) { - byte_634464 = 0; - v2 = dword_63448C; - while (v2) { - --v2; - if (a1) { - ++v1; - sgpCurrItem = v1; - if (v1->fnMenu) - goto LABEL_10; - v1 = dword_634480; + if (!sgpCurrItem) { + return; + } + byte_634464 = FALSE; + i = dword_63448C; + if (dword_63448C) { + while (i) { + i--; + if (isDown) { + sgpCurrItem++; + if (!sgpCurrItem->fnMenu) + sgpCurrItem = dword_634480; } else { - if (v1 == dword_634480) - v1 = &dword_634480[dword_63448C]; - --v1; + if (sgpCurrItem == dword_634480) + sgpCurrItem = &dword_634480[dword_63448C]; + sgpCurrItem--; } - sgpCurrItem = v1; - LABEL_10: - if ((v1->dwFlags & 0x80000000) != 0) { - if (v2) + if ((sgpCurrItem->dwFlags & 0x80000000) != 0) { + if (i) PlaySFX(IS_TITLEMOV); return; } @@ -295,10 +292,10 @@ BOOL gmenu_presskeys(int a1) gmenu_left_right(TRUE); break; case VK_UP: - gmenu_up_down(0); + gmenu_up_down(FALSE); break; case VK_DOWN: - gmenu_up_down(1); + gmenu_up_down(TRUE); break; } return TRUE; diff --git a/Source/gmenu.h b/Source/gmenu.h index 2888b01f1..fb0550c57 100644 --- a/Source/gmenu.h +++ b/Source/gmenu.h @@ -19,7 +19,7 @@ void FreeGMenu(); void gmenu_init_menu(); BOOL gmenu_exception(); void gmenu_call_proc(TMenuItem *pItem, void(*gmFunc)(TMenuItem *)); -void gmenu_up_down(int a1); +void gmenu_up_down(BOOL isDown); void gmenu_draw(); void gmenu_draw_menu_item(TMenuItem *pItem, int a2); void gmenu_clear_buffer(int x, int y, int width, int height);