rodecomp/Source/UI/Window/UINewMakeCharWnd.h
ragnarok-clanker 29f3695d47 Decompile fn_09614 (UINewMakeCharWnd::Slot15)
Batch #8020 by Yommy: 0 byte-identical, 1 confirmed by peer review.

- fn_09614 UINewMakeCharWnd::Slot15: logic confirmed by peer review

Peer-reviewed-by: eAthena, Tanke, pedrao
Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
2026-10-31 13:33:14 +00:00

146 lines
4.6 KiB
C++

#ifndef RAGNAROK_SOURCE_UI_WINDOW_UINEWMAKECHARWND_H
#define RAGNAROK_SOURCE_UI_WINDOW_UINEWMAKECHARWND_H
#include "UI/Buttons/UIBitmapButton.h"
#include "UI/Buttons/UIBmpRadioBtn.h"
#include "UI/Buttons/UIBmpTextButton.h"
#include "UI/Buttons/UIDescriptRace.h"
#include "UI/Edit/UIEditCtrl.h"
#include "UI/Text/UIStaticText.h"
#include "UI/Window/InputFocus.h"
#include "UI/Window/UIFrameWnd.h"
#include "UI/Window/UIWindowMgr.h"
#include <cstdint>
class UIHairBitmap : public UIBitmapButton {
public:
using UIBitmapButton::UIBitmapButton;
void Slot25(int x, int y) override;
void Slot26(int x, int y) override;
void Slot27(int x, int y) override;
void Slot28(int x, int y) override;
void Slot29(int x, int y) override;
void ResetCursor(int x, int y) override;
void Slot31(int x, int y) override;
};
class UIHairStyleButton : public UIBitmapButton {
public:
// INLINED
UIHairStyleButton(UIWindowContext& windows, UIButtonContext& controls, int style, int sex)
: UIBitmapButton(windows, controls), m_style(style), m_sex(sex), m_race(0), m_preview(nullptr), m_selected(false) {
}
void Slot15(int width, int height) override;
int SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) override;
protected:
/* 0120 */ int m_style;
/* 0124 */ int m_sex;
/* 0128 */ int m_race;
/* 012C */ UIBitmapButton* m_preview;
/* 0130 */ bool m_selected;
};
#pragma pack(push, 1)
struct MakeCharacterStatus {
/* 0000 */ std::int64_t exp;
/* 0008 */ unsigned char unknown_0008[0x24];
/* 002C */ std::int16_t jobPoint;
/* 002E */ std::int64_t hp;
/* 0036 */ std::int64_t maxHp;
/* 003E */ std::int64_t sp;
/* 0046 */ std::int64_t maxSp;
/* 004E */ std::int16_t speed;
};
#pragma pack(pop)
#if defined(_WIN32) && !defined(_WIN64)
static_assert(sizeof(MakeCharacterStatus) == 0x50);
#endif
class UINewMakeCharWnd : public UIFrameWnd {
public:
UINewMakeCharWnd();
void Slot15(int width, int height) override;
void Paint() override;
void Slot19() override;
void sub_7DBFD0();
/* 00B4 */ int m_viewX;
/* 00B8 */ int m_viewY;
/* 00BC */ std::string m_raceActions[5];
/* 0134 */ std::string m_raceSprites[5];
/* 01AC */ std::string m_raceOffsets;
/* 01C4 */ int m_racePaletteEnabled[2];
/* 01CC */ std::string m_racePalettes[2];
/* 01FC */ int unknown_01FC;
/* 0200 */ int m_action;
/* 0204 */ int m_frame;
/* 0210 */ unsigned char unknown_0210[0x04];
/* 0214 */ MakeCharacterStatus m_status;
/* 0264 */ short m_job;
/* 0266 */ short m_head;
/* 0268 */ short m_costumeJob;
/* 026A */ short unknown_026A;
/* 026C */ short m_level;
/* 026E */ short m_skillPoint;
/* 0270 */ short unknown_0270;
/* 0272 */ short m_shield;
/* 0274 */ short unknown_0274;
/* 0276 */ short unknown_0276;
/* 0278 */ short m_headPalette;
/* 027A */ short m_bodyPalette;
/* 027C */ char m_name[24];
/* 0294 */ unsigned char m_stats[6];
/* 029A */ unsigned char m_slot;
/* 029B */ unsigned char unknown_029B[0x23];
/* 02BE */ unsigned char m_sex;
/* 02BF */ unsigned char unknown_02BF;
union {
/* 02C0 */ int unknown_02C0;
UIEditCtrl2* m_nameEdit;
};
/* 02C4 */ int m_race;
/* 02C8 */ UIWindow* m_raceViews[2];
union {
/* 02D0 */ int unknown_02D0[6];
UIHairStyleButton* m_hairStyleButtons[24];
};
union {
struct {
/* 0330 */ int unknown_0330[2];
/* 0338 */ unsigned char unknown_0338;
};
UIBmpRadioBtn* m_hairColorButtons[9];
};
union {
/* 0354 */ short unknown_0354;
UIBitmapButton* m_genderButtons[2];
};
/* 035C */ int unknown_035C;
/* 0360 */ unsigned long m_startTime;
/* 0364 */ int unknown_0364;
/* 0368 */ int unknown_0368;
UIButtonContext* m_controls;
UIEditContext* m_editContext;
};
#if defined(_WIN32) && !defined(_WIN64)
static_assert(offsetof(UINewMakeCharWnd, m_job) == 0x264);
static_assert(offsetof(UINewMakeCharWnd, m_head) == 0x266);
static_assert(offsetof(UINewMakeCharWnd, m_costumeJob) == 0x268);
static_assert(offsetof(UINewMakeCharWnd, m_headPalette) == 0x278);
static_assert(offsetof(UINewMakeCharWnd, m_bodyPalette) == 0x27A);
static_assert(offsetof(UINewMakeCharWnd, m_sex) == 0x2BE);
static_assert(offsetof(UINewMakeCharWnd, m_race) == 0x2C4);
static_assert(offsetof(UINewMakeCharWnd, m_status) == 0x214);
static_assert(offsetof(UINewMakeCharWnd, m_slot) == 0x29A);
static_assert(offsetof(UINewMakeCharWnd, m_startTime) == 0x360);
static_assert(offsetof(UINewMakeCharWnd, m_hairStyleButtons) == 0x2D0);
static_assert(offsetof(UINewMakeCharWnd, m_hairColorButtons) == 0x330);
static_assert(offsetof(UINewMakeCharWnd, m_genderButtons) == 0x354);
#endif
#endif