This commit is contained in:
ragnarok-clanker 2026-10-27 08:58:12 +00:00
commit 279b86f980
36 changed files with 954 additions and 577 deletions

View file

@ -199,6 +199,13 @@ Do not substitute `__FILE__` or `__LINE__` merely to follow a different project'
invent diagnostic literals. Distinguish compiler-generated diagnostics from application arguments using
the original instructions.
### Korean string literals
Sources are UTF-8; `compile.json` passes `/source-charset:utf-8 /execution-charset:.949`, so write Korean
literals as Hangul (`"유저인터페이스\\item\\%s.bmp"`), not CP949 escapes. Keep `\x` escapes for bytes
that are not CP949 Hangul: other code pages (Shift-JIS, GBK, Big5 font names), byte-order marks and key codes.
Never use `/utf-8`, and never save sources as CP949/EUC-KR.
## 7. Platform and build scope
- This target is Windows x86. Keep code in its assigned existing translation unit and subsystem headers.

View file

@ -7,13 +7,15 @@
void TraditionalKeyInput::InitializeMappings() {
// STATIC: 0x011594E0
// GLOBAL: gl_13427
static constexpr std::uint8_t bytes[] = {0xA3, 0x74, 0xA3, 0x78, 0xA3, 0xBE, 0xA3, 0xBF, 0xA3, 0xA4, 0xA3, 0xBD, 0xA3, 0xBB, 0xA3, 0xAB, 0xA3,
0xAF, 0xA3, 0xB3, 0xA3, 0x76, 0xA3, 0xA7, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0xA2, 0xA3, 0xA6,
0xA3, 0xA9, 0xA3, 0xAC, 0xA3, 0xB9, 0xA3, 0xAD, 0xA3, 0xB1, 0xA3, 0xAA, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3,
0xB4, 0xA3, 0x75, 0xA3, 0xA1, 0xA3, 0x7A, 0xA3, 0xA5, 0xA3, 0x74, 0xA3, 0xA3, 0xA3, 0x79, 0xA3, 0x74,
0xA3, 0xA8, 0xA3, 0x77, 0xA3, 0xB7, 0xA3, 0xB5, 0xA3, 0xAE, 0xA3, 0xB2, 0xA3, 0xB6};
static constexpr std::uint8_t zhuyinBig5[] = {0xA3, 0x74, 0xA3, 0x78, 0xA3, 0xBE, 0xA3, 0xBF, 0xA3, 0xA4, 0xA3, 0xBD, 0xA3, 0xBB, 0xA3, 0xAB, 0xA3,
0xAF, 0xA3, 0xB3, 0xA3, 0x76, 0xA3, 0xA7, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0x74, 0xA3, 0xA2, 0xA3, 0xA6,
0xA3, 0xA9, 0xA3, 0xAC, 0xA3, 0xB9, 0xA3, 0xAD, 0xA3, 0xB1, 0xA3, 0xAA, 0xA3, 0xBA, 0xA3, 0xB0, 0xA3,
0xB4, 0xA3, 0x75, 0xA3, 0xA1, 0xA3, 0x7A, 0xA3, 0xA5, 0xA3, 0x74, 0xA3, 0xA3, 0xA3, 0x79, 0xA3, 0x74,
0xA3, 0xA8, 0xA3, 0x77, 0xA3, 0xB7, 0xA3, 0xB5, 0xA3, 0xAE, 0xA3, 0xB2, 0xA3, 0xB6};
static constexpr char categories[] = "11441443331111111132331233111121111133333";
static constexpr unsigned char keys[] = "1234567890ABCDEFGHIJKLNMOPQRSTUVWXYZ\xBD\xBA\xBC\xBE\xBF";
static constexpr unsigned char keys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'N', 'M', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
VK_OEM_MINUS, VK_OEM_1, VK_OEM_COMMA, VK_OEM_PERIOD, VK_OEM_2, 0};
this->unknown04C1 = 0;
@ -23,8 +25,8 @@ void TraditionalKeyInput::InitializeMappings() {
for (unsigned index = 0; index < 41; ++index) {
auto& mapping = this->mappings[keys[index]];
mapping.bytes[0] = bytes[2 * index];
mapping.bytes[1] = bytes[2 * index + 1];
mapping.bytes[0] = zhuyinBig5[2 * index];
mapping.bytes[1] = zhuyinBig5[2 * index + 1];
mapping.bytes[2] = 0;
mapping.category = static_cast<std::uint8_t>(categories[index] - '1');
}

View file

@ -4,14 +4,14 @@
struct ServiceOptions;
struct CameraState {
float target[3];
float pitch;
float yaw;
float distance;
float desiredTarget[3];
float desiredPitch;
float desiredYaw;
float desiredDistance;
/* 0020 */ float target[3];
/* 002C */ float pitch;
/* 0030 */ float yaw;
/* 0034 */ float distance;
/* 0038 */ float desiredTarget[3];
/* 0044 */ float desiredPitch;
/* 0048 */ float desiredYaw;
/* 004C */ float desiredDistance;
void Reset();
void AddDistance(float delta);
@ -30,13 +30,13 @@ struct CameraProjectionOutputs {
};
struct CameraShake {
float horizontal;
float distance;
float pitch;
unsigned unknown_0010;
int enabled;
unsigned start;
unsigned duration;
/* 0004 */ float horizontal;
/* 0008 */ float distance;
/* 000C */ float pitch;
/* 0010 */ unsigned unknown_0010;
/* 0014 */ int enabled;
/* 0018 */ unsigned start;
/* 001C */ unsigned duration;
void Apply(CameraState& camera, int& frameLatch);
void Start(int enabled, unsigned duration, float horizontal, float distance, float pitch);
@ -44,5 +44,6 @@ struct CameraShake {
};
static_assert(sizeof(CameraState) == 48);
static_assert(sizeof(CameraShake) == 28);
#endif

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -303,22 +303,22 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "Pong%d.str", std::rand() % 3 + 1);
break;
case 204:
std::sprintf(name, "\273\241\260\243\306\367\274\307.str");
std::sprintf(name, "빨간포션.str");
break;
case 205:
std::sprintf(name, "\301\326\310\253\306\367\274\307.str");
std::sprintf(name, "주홍포션.str");
break;
case 206:
std::sprintf(name, "\263\353\266\365\306\367\274\307.str");
std::sprintf(name, "노란포션.str");
break;
case 207:
std::sprintf(name, "\307\317\276\341\306\367\274\307.str");
std::sprintf(name, "하얀포션.str");
break;
case 208:
std::sprintf(name, "\306\304\266\365\306\367\274\307.str");
std::sprintf(name, "파란포션.str");
break;
case 209:
std::sprintf(name, "\303\312\267\317\306\367\274\307.str");
std::sprintf(name, "초록포션.str");
break;
case 210:
std::sprintf(name, "fruit.str");
@ -333,23 +333,23 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "Keeping.str");
break;
case 218:
std::sprintf(name, "\301\375\301\337.str");
std::sprintf(name, "집중.str");
break;
case 219:
std::sprintf(name, "\260\242\274\272.str");
std::sprintf(name, "각성.str");
break;
case 220:
case 756:
std::sprintf(name, "\271\366\274\255\305\251.str");
std::sprintf(name, "버서크.str");
break;
case 234:
std::sprintf(name, "spell.str");
break;
case 235:
std::sprintf(name, "\265\360\275\272\306\347.str");
std::sprintf(name, "디스펠.str");
break;
case 244:
std::sprintf(name, "\270\305\301\367\267\316\265\345.str");
std::sprintf(name, "매직로드.str");
break;
case 245:
std::sprintf(name, "holy_cross.str");
@ -391,7 +391,7 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "strip_helm.str");
break;
case 273:
std::sprintf(name, "\277\254\310\257.str");
std::sprintf(name, "연환.str");
break;
case 305:
std::sprintf(name, "p_success.str");
@ -419,16 +419,16 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "sword.str");
break;
case 406:
std::sprintf(name, "\274\322\277\357\271\370.str");
std::sprintf(name, "소울번.str");
break;
case 407:
std::sprintf(name, "\273\347\266\367\310\277\260\372.str");
std::sprintf(name, "사람효과.str");
break;
case 440:
std::sprintf(name, "asum.str");
break;
case 491:
std::sprintf(name, "\302\375\275\322\266\261.str");
std::sprintf(name, "찹쌀떡.str");
break;
case 492:
std::sprintf(name, "ramadan.str");
@ -486,10 +486,10 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "icy.str");
break;
case 646:
std::sprintf(name, "\306\256\267\242\305\267.str");
std::sprintf(name, "트랙킹.str");
break;
case 649:
std::sprintf(name, "\272\322\275\272\276\306\300\314.str");
std::sprintf(name, "불스아이.str");
break;
case 668:
case 670:
@ -523,7 +523,7 @@ static void SelectRagEffectResource(RagEffectState& effect, ServiceOptions& opti
std::sprintf(name, "ado.str");
break;
case 722:
std::sprintf(name, "\300\314\261\327\264\317\274\307\272\352\267\271\300\314\305\251.str");
std::sprintf(name, "이그니션브레이크.str");
break;
case 727:
std::sprintf(name, "crimson_r.str");

View file

@ -3,7 +3,7 @@
#include "Network/Http/CURLPostHander.h"
#include "Network/TextEncoding.h"
#include <cstdio>
#include <stdio.h>
#include <windows.h>
#include <timeapi.h>

View file

@ -69,7 +69,7 @@ float GroundWaterState::Level(int width, int height, int column, int row) const
// FUNCTION: fn_17581
void GroundWaterState::Update(TextureCache& textures) {
// STATIC: 0x01159248
constexpr char format[] = "\xBF\xF6\xC5\xCD\\water%d%02d.jpg";
constexpr char format[] = "워터\\water%d%02d.jpg";
char name[32]{};
for (GroundWaterSurface& surface : this->surfaces) {

View file

@ -89,7 +89,7 @@ ITEM_DESC& ItemDescriptions::Ensure(int id) {
void ItemDescriptions::IconPath(char* output, const char* id, int identified) {
const ITEM_DESC& value = this->Find(std::atoi(id));
const char* resource = identified != 0 ? value.identifiedResource : value.unidentifiedResource;
std::sprintf(output, "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\item\\%s.bmp", resource);
std::sprintf(output, "유저인터페이스\\item\\%s.bmp", resource);
}
// OFFSET: 0x006D5730

View file

@ -9,10 +9,10 @@
// FUNCTION: fn_23391
const char* ItemDragResource(ItemDescriptions& descriptions, const char* id, int identified) {
static std::string resource;
resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\";
resource = "아이템\\";
const ITEM_DESC& value = descriptions.Find(std::atoi(id));
const char* name = identified != 0 ? value.identifiedResource : value.unidentifiedResource;
resource += name ? name : "\xBB\xE7\xB0\xFA";
resource += name ? name : "사과";
return resource.c_str();
}
@ -21,11 +21,11 @@ const char* ItemDragResource(ItemDescriptions& descriptions, const char* id, int
// FUNCTION: fn_23392
const char* SkillDragResource(ResourceMgr& resources, const char* name) {
static std::string resource;
resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\";
resource = "아이템\\";
resource += name;
if (!resources.Exists((resource + ".act").c_str())) {
resource = "\xBE\xC6\xC0\xCC\xC5\xDB\\am_berserkpitcher";
resource = "아이템\\am_berserkpitcher";
}
return resource.c_str();

View file

@ -56,15 +56,15 @@ void JobNames::Initialize(JobNameInitialization& context) {
this->names[JT_MER_SERA] = "MER_SERA";
for (unsigned id = JT_MER_ARCHER01; id <= JT_MER_ARCHER10; ++id) {
this->names[id] = "\xBF\xA9\\\xC8\xB0\xBF\xEB\xBA\xB4";
this->names[id] = "여\\활용병";
}
for (unsigned id = JT_MER_LANCER01; id <= JT_MER_LANCER10; ++id) {
this->names[id] = "\xB3\xB2\\\xC3\xA2\xBF\xEB\xBA\xB4";
this->names[id] = "남\\창용병";
}
for (unsigned id = JT_MER_SWORDMAN01; id <= JT_MER_SWORDMAN10; ++id) {
this->names[id] = "\xB3\xB2\\\xB0\xCB\xBF\xEB\xBA\xB4";
this->names[id] = "남\\검용병";
}
context.sexLabels.resize(2, "F");

View file

@ -552,7 +552,7 @@ void CSoundMgr::PlayWave(const char* name, float x, float y, float z, int maximu
return;
}
static constexpr char permittedName[] = "\xB9\xF6\xC6\xB0\xBC\xD2\xB8\xAE.wav";
static constexpr char permittedName[] = "버튼소리.wav";
if (this->unknown != 0 && std::strcmp(name, permittedName) != 0) {
return;

View file

@ -205,8 +205,8 @@ bool C3dModelResV1::Load(const char* name) {
input.Read(magic, 4);
if (std::strcmp(magic, "GRSM") != 0) {
constexpr char message[] = "\xB8\xF0\xB5\xA8\xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. \xC7\xFC\xBD\xC4\xC0\xBB "
"\xB4\xD9\xBD\xC3\xC7\xD1\xB9\xF8 \xC8\xAE\xC0\xCE\xC7\xD8\xC1\xD6\xBC\xBC\xBF\xE4.";
constexpr char message[] = "모델파일이 아닙니다. 형식을 "
"다시한번 확인해주세요.";
ShowErrorDialog(this->m_context->renderSystem, message, 0);
file.Close();
@ -220,8 +220,8 @@ bool C3dModelResV1::Load(const char* name) {
input.Read(&minor, 1);
if (major != 1 || minor > 5) {
constexpr char message[] = "\xC1\xF6\xBF\xF8\xB5\xC7\xC1\xF6 \xBE\xCA\xB4\xC2 \xB9\xF6\xC1\xAF\xC0\xD4\xB4\xCF\xB4\xD9. "
"\xB3\xBB\xBF\xEB\xB9\xB0\xC0\xCC \xB1\xFA\xC1\xAE\xC0\xD6\xC0\xBB \xBC\xF6 \xC0\xD6\xBD\xC0\xB4\xCF\xB4\xD9";
constexpr char message[] = "지원되지 않는 버젼입니다. "
"내용물이 깨져있을 수 있습니다";
ShowErrorDialog(this->m_context->renderSystem, message, 0);
file.Close();

View file

@ -65,8 +65,7 @@ bool C3dModelResV2::Load(const char* name) {
input.Read(magic, 4);
if (std::strcmp(magic, "GRSM") != 0) {
constexpr char message[] = "\xB8\xF0\xB5\xA8\xC6\xC4\xC0\xCF\xC0\xCC \xBE\xC6\xB4\xD5\xB4\xCF\xB4\xD9. \xC7\xFC\xBD\xC4\xC0\xBB "
"\xB4\xD9\xBD\xC3\xC7\xD1\xB9\xF8 \xC8\xAE\xC0\xCE\xC7\xD8\xC1\xD6\xBC\xBC\xBF\xE4.";
constexpr char message[] = "모델파일이 아닙니다. 형식을 다시한번 확인해주세요.";
ShowErrorDialog(this->m_context->renderSystem, message, 0);
file.Close();

View file

@ -30,7 +30,7 @@ const char* TextureNames::Resolve(const char* name) {
}
const std::string original(name);
constexpr char marker[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA";
constexpr char marker[] = "유저인터페이스";
if (original.find(marker, 0, 14) == std::string::npos) {
return name;

View file

@ -10,7 +10,7 @@
#include <cstring>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
}
// OFFSET: 0x008C73C0

View file

@ -40,7 +40,7 @@ void UIBasicButton::Paint() {
if (this->m_disabled == 1 || this->geometry.unknown_0030 <= 2) {
static constexpr const char* skins[] = {"out", "over", "press", "disable"};
const std::string prefix = std::string("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\btn_") + skins[state];
const std::string prefix = std::string("유저인터페이스\\basic_interface\\btn_") + skins[state];
const auto drawBitmap = [&](const char* suffix, int x) {
auto* bitmap = static_cast<CBitmapRes*>(this->m_buttonContext->resources.Load((prefix + suffix).c_str()));
this->DrawBitmap(x, 0, bitmap ? &bitmap->image : nullptr, false);

View file

@ -28,9 +28,9 @@ void UIButton::Paint() {
}
static const char* const backgrounds[] = {
"\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_up.bmp",
"\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_act.bmp",
"\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\sml_button_down.bmp"
"유저인터페이스\\sml_button_up.bmp",
"유저인터페이스\\sml_button_act.bmp",
"유저인터페이스\\sml_button_down.bmp"
};
CBitmapRes* bitmap;

View file

@ -6,7 +6,7 @@
#include "UI/Window/WindowPolicy.h"
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
}
// OFFSET: 0x0086CC20

View file

@ -11,7 +11,7 @@
namespace {
unsigned Palette(ResourceMgr& resources, int column, int row) {
constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp";
constexpr char path[] = "유저인터페이스\\colorchip.bmp";
auto* chip = static_cast<CBitmapRes*>(resources.Load(path));
const int x = column * 4 + 2;
const int y = row * 4 + 2;
@ -233,7 +233,7 @@ void UIComboBoxEx::Paint() {
auto& resources = this->m_listContext->resources;
this->geometry.surface->Fill(nullptr, Palette(resources, 6, 6));
this->FillRegion(1, 1, (this->geometry.width - 2), (this->geometry.height - 2), Palette(resources, 2, 2));
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\";
constexpr char prefix[] = "유저인터페이스\\basic_interface\\";
const char* names[] = {"sysboxs_lu.bmp", "sysboxs_ld.bmp", "sysboxs_ru.bmp", "sysboxs_rd.bmp"};
for (int corner = 0; corner < 4; ++corner) {

View file

@ -18,7 +18,7 @@ UIListBox::UIListBox(UIWindowContext& windows, UIListBoxContext& list)
: UIWindow(windows, 0), backgroundRed(255), backgroundGreen(255), backgroundBlue(255), selected(0), topLine(0), horizontalOffset(0), contentWidth(0),
verticalOverflow(0), bottomMargin(0), verticalBar(nullptr), horizontalBar(nullptr), transparent(0), lineHeight(16), selectable(1), textColor(0),
centerVertically(0), textInset(3), m_listContext(&list) {
constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp";
constexpr char path[] = "유저인터페이스\\colorchip.bmp";
const auto* chip = static_cast<CBitmapRes*>(list.resources.Load(path));
this->selectionColor = 0;

View file

@ -14,7 +14,7 @@ UIListBoxEx::UIListBoxEx(UIWindowContext& windows, UIListBoxContext& list)
: UIWindow(windows, 0), backgroundRed(255), backgroundGreen(255), backgroundBlue(255), selected(0), topLine(0), horizontalOffset(0), contentWidth(0),
verticalOverflow(0), bottomMargin(0), verticalBar(nullptr), horizontalBar(nullptr), transparent(0), lineHeight(16), selectionColor(0),
m_listContext(&list) {
constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp";
constexpr char path[] = "유저인터페이스\\colorchip.bmp";
const auto* chip = static_cast<CBitmapRes*>(list.resources.Load(path));
if (chip) {

View file

@ -248,7 +248,7 @@ void UIScrollBar::Paint() {
return;
}
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
const bool vertical = this->vertical == 1;
const int length = vertical ? this->geometry.height : this->geometry.width;
const auto draw = [&](const char* name, int coordinate, bool transparent) {

View file

@ -23,7 +23,7 @@ void UIScrollBar_Navi::Paint() {
}
if (this->vertical == 1) {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\navigation_interface3\\";
constexpr char prefix[] = "유저인터페이스\\navigation_interface3\\";
const auto load = [&](const char* name) { return static_cast<CBitmapRes*>(this->m_resources->Load((std::string(prefix) + name).c_str())); };
const auto draw = [&](CBitmapRes* image, int y, bool transparent) { this->DrawBitmap(0, y, image ? &image->image : nullptr, transparent); };
auto* up = load("Navi_scroll_up.bmp");

View file

@ -24,7 +24,7 @@
#include <cstdlib>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\UIadventurerAgency\\";
constexpr char prefix[] = "유저인터페이스\\UIadventurerAgency\\";
}
// OFFSET: 0x007BAC40
@ -221,7 +221,7 @@ void UIAdvenPartyBoardWnd::Slot15(int, int) {
this->stop->Enable(0);
auto* titleClose = new UIBitmapButton(*this->m_context, controls);
const std::string basic = std::string("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\");
const std::string basic = std::string("유저인터페이스\\basic_interface\\");
titleClose->SetBitmap((basic + "sys_close_off.bmp").c_str(), 0, 0);
titleClose->SetBitmap((basic + "sys_close_on.bmp").c_str(), 1, 0);
titleClose->SetBitmap((basic + "sys_close_on.bmp").c_str(), 2, 0);
@ -561,7 +561,7 @@ void UIAdvenPartyBoardWnd::Paint() {
const auto load = [&](const char* path) { return static_cast<CBitmapRes*>(controls.resources.Load(path)); };
auto* background = load((std::string(prefix) + "bg_agencyList.bmp").c_str());
this->DrawBitmap(0, 0, background ? &background->image : nullptr, false);
constexpr char basic[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\";
constexpr char basic[] = "유저인터페이스\\basic_interface\\";
const auto skin = [&](const char* name) { return load((std::string(basic) + name).c_str()); };
int left = 0;
int right = 0;

View file

@ -16,7 +16,7 @@
#include <cstdio>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
}
// OFFSET: 0x007BAD00

View file

@ -85,7 +85,7 @@ void UIPartyInfoWnd::Paint() {
const auto text = [&](int x, const char* value, int bytes = 0) { this->DrawTextAt(controls.fonts, controls.locale, x, 5, value, bytes, 0, 12, 0, 0, 0); };
text(11, this->levels.c_str());
text(64, TypeName(this->type, controls.services));
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\UIadventurerAgency\\";
constexpr char prefix[] = "유저인터페이스\\UIadventurerAgency\\";
const char* jobs[] = {"def", "heal", "atk", "buf"};
const bool flags[] = {this->info.tanker, this->info.healer, this->info.dealer, this->info.assist};

View file

@ -26,7 +26,7 @@
#include <cstdlib>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
// OFFSET: 0x007BBFC0
// FUNCTION: fn_09295

View file

@ -16,7 +16,7 @@
#include <cstdio>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
}
// OFFSET: 0x007BB030

View file

@ -5,7 +5,7 @@
#include <new>
#define SHORTCUT_RESOURCE "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA"
#define SHORTCUT_RESOURCE "유저인터페이스"
// OFFSET: 0x0092A190
// FUNCTION: fn_12654
@ -22,8 +22,8 @@ ShortcutControls ShortcutControls::Create(
result.bank = new (std::nothrow) UICheckBox(windows, buttons);
result.bank->SetSize(10, 26);
result.bank->SetImages(
"\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\shortcut_2_bts.bmp",
"\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\shortcut_1_bts.bmp", ""
"유저인터페이스\\shortcut_2_bts.bmp",
"유저인터페이스\\shortcut_1_bts.bmp", ""
);
result.bank->SetId(549);
result.bank->Move(3, 4);

View file

@ -9,7 +9,7 @@
#include <cstring>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA";
constexpr char prefix[] = "유저인터페이스";
// INLINED
CBitmapRes* Load(ResourceMgr& resources, const char* tail) {

View file

@ -56,7 +56,7 @@ namespace {
UITextViewer::UITextViewer(UIWindowContext& windows, UITextViewerContext& text)
: UIListBox(windows, text.list), splitTipLinks(0), outline(0), bold(0), m_text(&text) {
this->lineHeight = 18;
constexpr char path[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\colorchip.bmp";
constexpr char path[] = "유저인터페이스\\colorchip.bmp";
const auto* chip = static_cast<CBitmapRes*>(text.list.resources.Load(path));
const auto& image = chip->image;
const std::uint32_t pixel = image.width > 18 && image.height > 2 ? image.pixels[18 + 2 * image.width] : 0x00FF0000u;

View file

@ -189,9 +189,9 @@ UIBitmapButton* UIFrameWnd::AddCloseButton(UIButtonContext& controls, const char
}
UIBitmapButton* button = new UIBitmapButton(*this->m_context, controls);
button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_off.bmp", 0, 0);
button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_on.bmp", 1, 0);
button->SetBitmap("\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\basic_interface\\sys_close_on.bmp", 2, 0);
button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_off.bmp", 0, 0);
button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_on.bmp", 1, 0);
button->SetBitmap("유저인터페이스\\basic_interface\\sys_close_on.bmp", 2, 0);
button->SetSize(button->BitmapWidth(), button->BitmapHeight());
button->Move(width - 14, 3);
button->SetId(201);

View file

@ -15,7 +15,7 @@
#include <shellapi.h>
namespace {
constexpr char prefix[] = "\xC0\xAF\xC0\xFA\xC0\xCE\xC5\xCD\xC6\xE4\xC0\xCC\xBD\xBA\\";
constexpr char prefix[] = "유저인터페이스\\";
std::uint32_t Palette(ResourceMgr& resources, int x, int y) {
const auto* resource = static_cast<CBitmapRes*>(resources.Load((std::string(prefix) + "colorchip.bmp").c_str()));

View file

@ -3,6 +3,7 @@
#include <limits>
// INLINED
inline int TruncateToInt(double value) {
return value > -2147483649.0 && value < 2147483648.0 ? static_cast<int>(value) : std::numeric_limits<int>::min();
}

View file

@ -20,6 +20,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -40,6 +42,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -64,6 +68,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -85,6 +91,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -109,6 +117,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -128,6 +138,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -141,6 +153,8 @@
"/DNDEBUG",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -156,6 +170,8 @@
"/DNDEBUG",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -175,6 +191,8 @@
"-std:c++20",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
],
[
@ -188,6 +206,8 @@
"/DNDEBUG",
"-MD",
"/FS",
"/source-charset:utf-8",
"/execution-charset:.949",
"-c"
]
],