Decompile 6 functions in Source/Client/Mode/CGameMode.h, Source/Client/Mode/CLoginMode.h, ...

Batch #8171 by eAthena: 0 byte-identical, 6 confirmed by peer review.

- fn_16320 CreateRecommendedQuestInfo: logic confirmed by peer review
- fn_17436 UIVideoSkipButton::UIVideoSkipButton: logic confirmed by peer review
- fn_21219 UIVerticalNameBalloonText::UIVerticalNameBalloonText: logic confirmed by peer review
- fn_22352 CBlowEffect::CBlowEffect: logic confirmed by peer review
- fn_22246 CItem::CItem: logic confirmed by peer review
- fn_22258 CLoginMode::CLoginMode: logic confirmed by peer review

Peer-reviewed-by: Yommy, secret, gordaoprogramas
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 14:41:01 +00:00
commit 42110dca76
14 changed files with 72 additions and 7 deletions

View file

@ -353,6 +353,7 @@ public:
float CameraDesiredYaw();
void IgnoreRemovedPacket3(const unsigned char* packet);
void ReceiveShowRankingSchedule(const unsigned char* packet);
void ReceiveInventoryStart(const unsigned char* packet);
void IgnoreRemovedPacket4(const unsigned char* packet);
void IgnoreRemovedPacket5(const unsigned char* packet);
void IgnoreRemovedPacket7(const unsigned char* packet);

View file

@ -102,11 +102,17 @@ public:
/* 4068 */ CharacterInfo characters[68];
/* 6EE4 */ std::string wallpaperName;
/* 6EFC */ CharacterSlotExtension slotExtension;
/* 6F10 */ unsigned char unknown_6F10[0x4];
/* 6F10 */ std::uint32_t unknown_6F10;
/* 6F14 */ UIWindow* window_6F14;
/* 6F18 */ int passwordRetryCount;
/* 6F1C */ std::vector<int> unknown_6F1C;
/* 6F28 */ unsigned char unknown_6F28[0x28];
/* 6F28 */ int unknown_6F28;
/* 6F2C */ std::vector<int> unknown_6F2C;
/* 6F38 */ std::vector<int> unknown_6F38;
/* 6F44 */ unsigned char savedInlineCharset;
/* 6F45 */ unsigned char unknown_6F45[0x3];
/* 6F48 */ int unknown_6F48;
/* 6F4C */ int unknown_6F4C;
/* 6F50 */ std::string unknown_6F50;
/* 6F68 */ std::vector<MapStateEntry> mapStates;
/* 6F74 */ bool unknown_6F74;

View file

@ -4,6 +4,8 @@
#include "Contents/Items/ItemInfo.h"
#include "Contents/Messenger/ClientMessenger.h"
#include "Contents/PetEvolutionMgr.h"
#include "UI/Item/UIItemStoreWnd.h"
#include "UI/Window/UIWindowMgr.h"
#include <cstdint>
#include <cstdlib>
@ -24,6 +26,12 @@ struct ClientItemLists {
bool AddItem1710(const ITEM_INFO& item, unsigned char refresh);
bool AddItem1738(const ITEM_INFO& item, unsigned char refresh);
bool AddItem1740(const ITEM_INFO& item);
void ClearInventory();
void ClearItems1740();
};
struct SessionMessengerContext {
void ResetEquipment();
};
namespace {
@ -163,3 +171,5 @@ void CGameMode::ReceiveEquipListPart(unsigned char listType, int count, const un
break;
}
}
// OFFSET: 0x00D44600

View file

@ -29,6 +29,7 @@
#include "UI/Window/WindowDialogs.h"
#include "Utility/Cipher/XorBytes.h"
#include "Utility/Text/FormatString.h"
#include "Utility/Text/TextTokens.h"
#include <algorithm>
#include <chrono>
@ -1963,3 +1964,19 @@ void CLoginMode::ShowLoginError(int code, int argument) {
g_modeMgr.Quit();
}
}
// OFFSET: 0x00D8C6A0
// FUNCTION: fn_22258
CLoginMode::CLoginMode() : wallpaperName(), unknown_6F1C(), unknown_6F2C(), unknown_6F38(), unknown_6F50(), mapStates() {
this->unknown_0010 = 1;
this->unknown_6F10 = timeGetTime() + 12000;
this->savedInlineCharset = g_inlineCharset;
g_inlineCharset = 0;
this->unknown_6F48 = -1;
this->window_6F14 = nullptr;
this->passwordRetryCount = 0;
std::memset(this->characters, 0, sizeof(this->characters));
this->unknown_01D8 = 0;
this->unknown_01DC = 0;
this->characterDeleted = false;
}

View file

@ -8,6 +8,7 @@
class CBlowEffect : public CRenderObject {
public:
CBlowEffect();
~CBlowEffect() override;
bool OnProcess() override;
void SendMsg(

View file

@ -37,6 +37,12 @@ struct ItemFallEntry {
/* 0042 */ std::uint16_t grade;
};
// OFFSET: 0x00D8B340
// FUNCTION: fn_22246
CItem::CItem() : name() {
this->SubD8B5B0();
}
// OFFSET: 0x00D8B5A0
// FUNCTION: fn_22248
void CItem::SubD8B5A0() {

View file

@ -9,6 +9,7 @@
class CItem : public EffectActor {
public:
CItem();
void SubD8B5A0();
void SubD8B5B0();
bool OnProcess() override;

View file

@ -60,6 +60,14 @@ CCorpse::CCorpse() {
this->render.unknown_008C = timeGetTime();
}
// OFFSET: 0x00DA0DE0
// FUNCTION: fn_22352
CBlowEffect::CBlowEffect() {
this->SetSpriteName(ResourceMgr::Instance(), "이팩트\\이팩트.spr");
this->SetActionName(ResourceMgr::Instance(), "이팩트\\이팩트.act");
this->render.animation = 0;
}
// OFFSET: 0x00DA1210
// FUNCTION: fn_22355
CGndRiser::CGndRiser() {

View file

@ -156,3 +156,9 @@ CUIScrollWindow::CUIScrollWindow(UIWindowContext& context)
CUIRecommendedQuestInfo::CUIRecommendedQuestInfo()
: titleBar(nullptr), background(nullptr), titleText(nullptr), scrollWindow(nullptr), closeButton(nullptr) {
}
// OFFSET: 0x00A56860
// FUNCTION: fn_16320
CUIFrameWnd* CreateRecommendedQuestInfo() {
return new CUIRecommendedQuestInfo();
}

View file

@ -16,7 +16,7 @@ class CUIScrollWindow;
class CUIRecommendedQuestInfo : public CUIFrameWnd {
public:
CUIRecommendedQuestInfo();
__declspec(noinline) CUIRecommendedQuestInfo();
void Slot16() override;
void OnFirstAction();
virtual void Slot53();

View file

@ -315,3 +315,8 @@ UINameBalloonText::UINameBalloonText(UIWindowContext& windows, BalloonTextContex
this->unknown_00B8 = 0;
this->unknown_0098 = 0;
}
// OFFSET: 0x00CCDFF0
// FUNCTION: fn_21219
UIVerticalNameBalloonText::UIVerticalNameBalloonText(UIWindowContext& windows, BalloonTextContext& text) : UINameBalloonText(windows, text) {
}

View file

@ -7,7 +7,7 @@
class UINameBalloonText : public UIBalloonText {
public:
UINameBalloonText(UIWindowContext& windows, BalloonTextContext& text);
__declspec(noinline) UINameBalloonText(UIWindowContext& windows, BalloonTextContext& text);
~UINameBalloonText() override;
void Slot19() override;
void Paint() override;
@ -21,6 +21,7 @@ public:
class UIVerticalNameBalloonText : public UINameBalloonText {
public:
UIVerticalNameBalloonText(UIWindowContext& windows, BalloonTextContext& text);
void Paint() override;
};

View file

@ -33,6 +33,11 @@ UIVideoWnd::~UIVideoWnd() {
}
}
// OFFSET: 0x00AB4060
// FUNCTION: fn_17436
UIVideoSkipButton::UIVideoSkipButton(UIWindowContext& windowContext, UIButtonContext& buttonContext) : UIButton(windowContext, buttonContext) {
}
// OFFSET: 0x00AB4380
// FUNCTION: fn_17440
bool UIVideoWnd::Slot02() {

View file

@ -19,9 +19,7 @@ struct UIVideoWndContext {
class UIVideoSkipButton : public UIButton {
public:
// INLINED
UIVideoSkipButton(UIWindowContext& windowContext, UIButtonContext& buttonContext) : UIButton(windowContext, buttonContext) {
}
UIVideoSkipButton(UIWindowContext& windowContext, UIButtonContext& buttonContext);
void Paint() override;
};