Decompile 4 functions in Source/Contents/Messenger/MessengerMember.cpp, Source/UI/Buttons/UITextButton.cpp, ...

Batch #8342 by eAthena: 0 byte-identical, 4 confirmed by peer review.

- fn_16233 CUIListBoxEx<OngoingQuestInfo::CUIRewardItem,OngoingQuestInfo::CRewardItemData>::AddNewItem: logic confirmed by peer review
- fn_16234 CUIListBoxEx<OngoingQuestInfo::CUIRewardItem,OngoingQuestInfo::CRewardItemData>::Slot53: logic confirmed by peer review
- fn_16235 CUIListBoxEx<OngoingQuestInfo::CUIRewardItem,OngoingQuestInfo::CRewardItemData>::Resize: logic confirmed by peer review
- fn_16291 OngoingQuestInfo::CUIRewardItem::CUIRewardItem: logic confirmed by peer review

Peer-reviewed-by: gordaoprogramas, kyoshi, dori
Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
This commit is contained in:
ragnarok-clanker 2026-10-31 16:43:46 +00:00
commit fdd084f0cb
6 changed files with 106 additions and 10 deletions

View file

@ -47,10 +47,6 @@ namespace {
const char* sub_DDE770(const char* mapName);
};
class UIMessengerGroupDropWnd : public UIWindow {
public:
void sub_73A1C0(int x, int y, int unknown);
};
}
class UIDragMiniPartyWnd : public UIFrameWnd {
@ -126,6 +122,7 @@ public:
void Slot35(int delta) override;
MessengerMember MemberAt(int x, int y);
void OpenMiniPartyWnd(int cell, const MessengerMember& member);
void DropMember(int x, int y, int index);
MessengerMember MemberAtIndex(int index);
void UpdateScroll();
void LayoutButtons();
@ -171,6 +168,10 @@ public:
// GLOBAL: gl_24961
bool g_messengerGroupCollapsed;
// GLOBAL: gl_25219
int g_messengerDropColumnWidth;
// GLOBAL: gl_25220
int g_messengerDropRowHeight;
#if defined(_WIN32) && !defined(_WIN64)
static_assert(sizeof(MiniPartyIconPosition) == 12);
@ -443,9 +444,9 @@ void UIDragMiniPartyWnd::MoveGauge(int x, int y) {
// OFFSET: 0x00738CE0
// FUNCTION: fn_07671
void UIDragMiniPartyWnd::Slot31(int argument1, int argument2) {
auto* window = static_cast<UIMessengerGroupDropWnd*>(g_windowMgr.LookupWindow(34));
auto* window = static_cast<UIMessengerGroupWnd*>(g_windowMgr.LookupWindow(34));
if (window) {
window->sub_73A1C0(argument1 + this->geometry.x, argument2 + this->geometry.y, this->unknown_0108);
window->DropMember(argument1 + this->geometry.x, argument2 + this->geometry.y, this->unknown_0108);
}
}
@ -670,6 +671,8 @@ MiniPartyInfoEntry::MiniPartyInfoEntry(const char* text, int value) : text(text)
// FUNCTION: fn_07700
UIMessengerGroupWnd::~UIMessengerGroupWnd() = default;
// OFFSET: 0x0073A1C0
// OFFSET: 0x0073A3F0
// FUNCTION: fn_07704
MessengerMember UIMessengerGroupWnd::MemberAt(int x, int y) {
@ -695,7 +698,7 @@ MessengerMember UIMessengerGroupWnd::MemberAt(int x, int y) {
// OFFSET: 0x0073A330
// FUNCTION: fn_07703
void UIMessengerGroupWnd::OpenMiniPartyWnd(int cell, const MessengerMember& member) {
__declspec(noinline) void UIMessengerGroupWnd::OpenMiniPartyWnd(int cell, const MessengerMember& member) {
UIMiniPartyWnd* window = new UIMiniPartyWnd(*this->m_context, *this->m_frameContext);
window->SetSize(174, 52);
window->m_cell = cell;
@ -706,7 +709,7 @@ void UIMessengerGroupWnd::OpenMiniPartyWnd(int cell, const MessengerMember& memb
// OFFSET: 0x0073A540
// FUNCTION: fn_07705
MessengerMember UIMessengerGroupWnd::MemberAtIndex(int index) {
__declspec(noinline) MessengerMember UIMessengerGroupWnd::MemberAtIndex(int index) {
int position = 0;
for (auto it = this->members.begin(); it != this->members.end(); ++it, ++position) {
if (index == position) {
@ -973,7 +976,7 @@ void UIWindowMgr::MoveTransient(int x, int y) {
// OFFSET: 0x00AA9E90
// FUNCTION: fn_17262
void UIWindowMgr::RetireTransientWindow() {
__declspec(noinline) void UIWindowMgr::RetireTransientWindow() {
UIDragMiniPartyWnd* transient = static_cast<UIDragMiniPartyWnd*>(this->window_4F250);
if (transient && transient->member.valid) {
transient->geometry.unknown_0030 = 1;

View file

@ -3378,3 +3378,14 @@ UITVBitmapButton::UITVBitmapButton()
}
// OFFSET: 0x0086EC10
#include "Contents/Configuration/ServiceConfiguration.h"
#include "Contents/TipOfTheDay.h"
// OFFSET: 0x0086DE10
// OFFSET: 0x008894B0
// OFFSET: 0x00889600
// OFFSET: 0x0088FDC0

View file

@ -9,6 +9,7 @@ class UIChatHisBox2 : public UIChatHisBox {
public:
UIChatHisBox2(UIWindowContext& windows, UIListBoxContext& list);
bool Slot08() override;
void Paint() override;
void Slot15(int width, int height) override;
void Configure(int x, int y, int width, int height, unsigned char transparent) override;
void Slot33(int x, int y) override;
@ -21,6 +22,7 @@ public:
class UIChatHisBox3 : public UIChatHisBox2 {
public:
UIChatHisBox3(UIWindowContext& windows, UIListBoxContext& list);
void Paint() override;
void Slot15(int width, int height) override;
void Resize(int width, int height) override;
@ -30,6 +32,7 @@ public:
class UIMemberListBox : public UIChatHisBox2 {
public:
UIMemberListBox(UIWindowContext& windows, UIListBoxContext& list);
void Paint() override;
void Slot25(int x, int y) override;
void Slot28(int x, int y) override;

View file

@ -41,6 +41,7 @@ public:
UITreeView(UIWindowContext& windows, UIEditContext& edit, UIButtonContext& controls);
void Resize(int width, int height) override;
void Slot15(int width, int height) override;
void Paint() override;
void Slot25(int x, int y) override;
void Slot27(int x, int y) override;
void Slot31(int x, int y) override;

View file

@ -25,7 +25,7 @@
template <>
void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::OnScroll(int position);
template <> void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::AddNewItem(); template <> void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::Slot53(int resolveSkin); template <> void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::Resize(int width, int height);
// OFFSET: 0x00A4F580
// FUNCTION: fn_16213
bool UnusedTrueA4F580() {
@ -704,3 +704,80 @@ CUIScrollWindow::CUIScrollWindow(UIWindowContext& context)
: CUIControl(context), firstLine(nullptr), secondContents(nullptr), secondLine(nullptr), rewards(nullptr), scrollBar(nullptr), firstContents(nullptr) {
}
}
// OFFSET: 0x00A53A90
// FUNCTION: fn_16233
template <>
void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::AddNewItem() {
if (this->itemWidth <= 0 || this->rowHeight <= 0) {
return;
}
for (OngoingQuestInfo::CUIRewardItem* item : this->items) {
this->RemoveChild(item, 1);
}
this->items.clear();
this->selected = static_cast<unsigned int>(-1);
if (this->rowHeight <= this->geometry.height) {
unsigned count = static_cast<unsigned>(this->geometry.height / this->rowHeight) + 1;
if (this->geometry.height % this->rowHeight > 1) {
++count;
}
this->items.resize(count, nullptr);
for (OngoingQuestInfo::CUIRewardItem*& slot : this->items) {
OngoingQuestInfo::CUIRewardItem* item = new OngoingQuestInfo::CUIRewardItem(*this->m_context);
item->SetSize(this->itemWidth, this->rowHeight);
item->Show(0);
CResPtr<CBitmapRes>* images = reinterpret_cast<CResPtr<CBitmapRes>*>(reinterpret_cast<std::uint8_t*>(this) + 0x80);
item->SetImageResources(images[0], images[1], images[2], images[3]);
item->onHover = [this](CUIListItem* listItem) {
for (OngoingQuestInfo::CUIRewardItem* other : this->items) {
other->SetHighlighted(other == listItem);
}
};
item->onPress = [this](CUIListItem* listItem) {
this->SelectItem(listItem);
};
this->AddChild(item);
slot = item;
}
}
this->scrollBar->SetTotal(this->geometry.height);
this->scrollBar->SetVisible(this->geometry.height);
}
// OFFSET: 0x00A53CF0
// FUNCTION: fn_16234
template <>
void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::Slot53(int resolveSkin) {
CResPtr<CBitmapRes>* images = reinterpret_cast<CResPtr<CBitmapRes>*>(reinterpret_cast<std::uint8_t*>(this) + 0x80);
images[0] = CResPtr<CBitmapRes>(this->LoadBitmapResource(this->imageNames[0], resolveSkin));
images[1] = CResPtr<CBitmapRes>(this->LoadBitmapResource(this->imageNames[1], resolveSkin));
images[2] = CResPtr<CBitmapRes>(this->LoadBitmapResource(this->imageNames[2], resolveSkin));
images[3] = CResPtr<CBitmapRes>(this->LoadBitmapResource(this->disabledName, resolveSkin));
for (OngoingQuestInfo::CUIRewardItem* item : this->items) {
item->SetImageResources(images[0], images[1], images[2], images[3]);
}
}
// OFFSET: 0x00A53F00
// FUNCTION: fn_16235
template <>
void CUIListBoxEx<OngoingQuestInfo::CUIRewardItem, OngoingQuestInfo::CRewardItemData>::Resize(int width, int height) {
UIWindow::Resize(width, height);
this->AddNewItem();
this->scrollBar->Resize(this->scrollBar->geometry.width, height);
this->scrollBar->SetTotal(static_cast<int>(this->data.size()) * this->rowHeight + this->itemY);
this->scrollBar->SetVisible(this->geometry.height);
this->scrollBar->SetPosition(this->scrollBar->position);
this->rebind = 1;
}
namespace OngoingQuestInfo {
// OFFSET: 0x00A54EA0
// FUNCTION: fn_16291
CUIRewardItem::CUIRewardItem(UIWindowContext& context) : CUIListItem(context), background(nullptr), gameItem(nullptr), nameText(nullptr), countText(nullptr) {
}
}

View file

@ -70,6 +70,7 @@ public:
class CUIRewardItem : public CUIListItem {
public:
explicit CUIRewardItem(UIWindowContext& context);
void Slot15(int width, int height) override;
void Slot16() override;
void Paint() override;