summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-10-02 05:14:40 +0200
committerGitHub <noreply@github.com>2025-10-02 05:14:40 +0200
commit2524d3f53441a99629e867e358ec41e9bf2ece85 (patch)
tree949e9bb8175ef95d834fe5ca962f55ad3b5cb26d /src/d
parent0b05b4a9e75bf511ea81b332fb869110802d091f (diff)
parentfd9b74877f5154042b770a4d1ae85733c5f9d492 (diff)
Merge pull request #250 from robojumper/select-btn
d_lyt_msg_window_select_btn mostly OK
Diffstat (limited to 'src/d')
-rw-r--r--src/d/d_tag_processor.cpp277
-rw-r--r--src/d/lyt/d_lyt_game_over.cpp18
-rw-r--r--src/d/lyt/d_lyt_save_msg_window.cpp22
-rw-r--r--src/d/lyt/d_textbox.cpp12
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window.cpp22
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_get.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_link.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp904
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp4
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_sword.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_talk.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp2
13 files changed, 1000 insertions, 271 deletions
diff --git a/src/d/d_tag_processor.cpp b/src/d/d_tag_processor.cpp
index af0c2be7..675c0e8b 100644
--- a/src/d/d_tag_processor.cpp
+++ b/src/d/d_tag_processor.cpp
@@ -252,14 +252,14 @@ const u16 sMsgWindowFlags[2050] = {
dTagProcessor_c::dTagProcessor_c() {
field_0x82C = -1;
- field_0x828 = -1;
- field_0x90E = 0;
+ mCancelBtnIdx = -1;
+ mCurrentOptionIdx = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 256; j++) {
- field_0x008[i][j] = 0;
+ mOptionBufs[i][j] = 0;
}
- field_0x808[i] = 0;
- field_0x90F[i] = 0;
+ mOptionLengths[i] = 0;
+ mOptionSound[i] = 0;
}
field_0x904 = 0.0f;
@@ -327,7 +327,7 @@ dTagProcessor_c::dTagProcessor_c() {
field_0xEEE = 0;
field_0xEEF = 0;
field_0xEE0 = 0;
- field_0xEE1 = 0;
+ mIsShadowText = false;
field_0xEE2 = 0;
field_0xEE3 = 0;
field_0xEE4 = 0;
@@ -356,11 +356,11 @@ void dTagProcessor_c::format(
void dTagProcessor_c::formatV(
dTextBox_c *textBox, const wchar_t *src, wchar_t *dest, u32 destLen, u32 *pOutLen, void *unk, va_list list
) {
- s32 state3 = 0;
- s32 state4 = 0;
+ s32 optionIdx = 0;
+ bool isProcessingOption = false;
s32 state1 = -1;
- s32 state2 = -1;
+ s32 cancelBtnIdx = -1;
f32 currScale, backupScale;
backupScale = currScale = fn_800B8040(0, mMsgWindowSubtype);
@@ -371,8 +371,9 @@ void dTagProcessor_c::formatV(
textBox->set0x1F8(0);
}
- s32 local_b4 = 0;
+ s32 optionLength = 0;
+ // 0xE TAG_CMD_0x0F0F0F0F 0x00 0x02
StackThing x = {0x000E, 0x0F0F, 0x0F0F, 0x0002};
wchar_t *writePtr = dest;
if (textBox != nullptr) {
@@ -384,6 +385,7 @@ void dTagProcessor_c::formatV(
dest[4] = mLineData.mNumLines;
}
+ // 0xE TAG_CMD_0x0F0F0F0E 0x00 0x01
StackThing yTmp;
StackThing y = {0x000E, 0x0F0F, 0x0F0E, 0x0001};
@@ -402,16 +404,16 @@ void dTagProcessor_c::formatV(
s32 cmd = 0;
wchar_t *endPtr = nullptr;
getTextCommand(c, src + 1, &cmdLen, &cmd, &endPtr);
- bool bVar3 = false;
+ bool processingOption = false;
switch (cmd) {
- case 0x0F0F0F0F:
- if (state4 != 0 && field_0x90E != 0) {
+ case TAG_CMD_0x0F0F0F0F:
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
const wchar_t *t = src;
u32 len = (cmdLen / 2) + 1;
for (int i = 0; i < len; i++) {
- getTmpBuffer()[local_b4] = *(t++);
- onWriteTmpBuffer();
- local_b4++;
+ getOptionBuf()[optionLength] = *(t++);
+ onWriteOptionBuf();
+ optionLength++;
}
} else {
const wchar_t *t = src;
@@ -421,67 +423,67 @@ void dTagProcessor_c::formatV(
}
}
break;
- case 0x10000: {
+ case TAG_CMD_OPTION_0: {
u8 a = READ_U8(endPtr, 0);
u8 b = READ_U8(endPtr, 1);
switch (a) {
- case 0: state2 = 0; break;
+ case 0: cancelBtnIdx = 0; break;
case 1: state1 = 0; break;
}
- field_0x90F[0] = b;
+ mOptionSound[0] = b;
yTmp = y;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 256; j++) {
if (j < 4) {
- field_0x008[i][j] = yTmp.us[j];
+ mOptionBufs[i][j] = yTmp.us[j];
} else {
- field_0x008[i][j] = 0;
+ mOptionBufs[i][j] = 0;
}
}
- field_0x808[i] = 4;
+ mOptionLengths[i] = 4;
}
- state3 = 1;
- bVar3 = true;
+ optionIdx = 1;
+ processingOption = true;
} break;
- case 0x10001: {
+ case TAG_CMD_OPTION_1: {
u8 a = READ_U8(endPtr, 0);
u8 b = READ_U8(endPtr, 1);
switch (a) {
- case 0: state2 = 1; break;
+ case 0: cancelBtnIdx = 1; break;
case 1: state1 = 1; break;
}
- field_0x90F[1] = b;
- state3 = 2;
- bVar3 = true;
+ mOptionSound[1] = b;
+ optionIdx = 2;
+ processingOption = true;
} break;
- case 0x10002: {
+ case TAG_CMD_OPTION_2: {
u8 a = READ_U8(endPtr, 0);
u8 b = READ_U8(endPtr, 1);
switch (a) {
- case 0: state2 = 2; break;
+ case 0: cancelBtnIdx = 2; break;
case 1: state1 = 2; break;
}
- field_0x90F[2] = b;
- state3 = 3;
- bVar3 = true;
+ mOptionSound[2] = b;
+ optionIdx = 3;
+ processingOption = true;
} break;
- case 0x10003: {
+ case TAG_CMD_OPTION_3: {
u8 a = READ_U8(endPtr, 0);
u8 b = READ_U8(endPtr, 1);
switch (a) {
- case 0: state2 = 3; break;
+ case 0: cancelBtnIdx = 3; break;
case 1: state1 = 3; break;
}
- field_0x90F[3] = b;
- state3 = 4;
- bVar3 = true;
+ mOptionSound[3] = b;
+ optionIdx = 4;
+ processingOption = true;
} break;
case 0x10008:
if (textBox != nullptr) {
currScale = fn_800B8040(READ_U8(endPtr, 0), mMsgWindowSubtype);
currScale *= textBox->getMyScale();
}
- writePtr = writeTextNormal(src, writePtr, &local_b4, cmdLen, state4);
+ writePtr = writeTextNormal(src, writePtr, &optionLength, cmdLen, isProcessingOption);
break;
case 0x30000: {
if (textBox != nullptr) {
@@ -489,35 +491,45 @@ void dTagProcessor_c::formatV(
currScale *= dLyt_HIO_c::getField0x768();
currScale *= textBox->getMyScale();
}
- writePtr = writeTextNormal(src, writePtr, &local_b4, cmdLen, state4);
+ writePtr = writeTextNormal(src, writePtr, &optionLength, cmdLen, isProcessingOption);
} break;
case 0x10010: fn_800B5520(endPtr); break;
case 0x20004:
if (textBox != nullptr) {
saveIconWidth(textBox, endPtr, currScale);
}
- writePtr = writeTextNormal(src, writePtr, &local_b4, cmdLen, state4);
+ writePtr = writeTextNormal(src, writePtr, &optionLength, cmdLen, isProcessingOption);
+ break;
+ case TAG_CMD_WRITE_HERONAME:
+ writePtr = writeHeroname(writePtr, &optionLength, isProcessingOption);
+ break;
+ case TAG_CMD_WRITE_ITEM:
+ writePtr = writeItem(writePtr, endPtr, &optionLength, isProcessingOption);
+ break;
+ case TAG_CMD_WRITE_STRING_ARG:
+ writePtr = writeStringArg(writePtr, endPtr, &optionLength, isProcessingOption);
+ break;
+ case TAG_CMD_WRITE_NUMERIC_ARG:
+ writePtr = writeNumericArg(writePtr, endPtr, &optionLength, isProcessingOption);
break;
- case 0x20000: writePtr = writeHeroname(writePtr, &local_b4, state4); break;
- case 0x20001: writePtr = writeItem(writePtr, endPtr, &local_b4, state4); break;
- case 0x20002: writePtr = writeStringArg(writePtr, endPtr, &local_b4, state4); break;
- case 0x20003: writePtr = writeNumericArg(writePtr, endPtr, &local_b4, state4); break;
- case 0x30004: writePtr = writeSingularOrPluralWord(writePtr, endPtr, &local_b4, state4); break;
+ case TAG_CMD_WRITE_WORD:
+ writePtr = writeSingularOrPluralWord(writePtr, endPtr, &optionLength, isProcessingOption);
+ break;
case 0x30001:
field_0xEF1 = 1;
- writePtr = writeTextNormal(src, writePtr, &local_b4, cmdLen, state4);
+ writePtr = writeTextNormal(src, writePtr, &optionLength, cmdLen, isProcessingOption);
break;
- default: writePtr = writeTextNormal(src, writePtr, &local_b4, cmdLen, state4); break;
+ default: writePtr = writeTextNormal(src, writePtr, &optionLength, cmdLen, isProcessingOption); break;
}
- if (bVar3) {
+ if (processingOption) {
field_0x82C = state1;
- state4 = 1;
- field_0x828 = state2;
- field_0x90E = state3;
- local_b4 = field_0x808[state3 - 1];
+ isProcessingOption = 1;
+ mCancelBtnIdx = cancelBtnIdx;
+ mCurrentOptionIdx = optionIdx;
+ optionLength = mOptionLengths[optionIdx - 1];
}
src += (cmdLen / 2) + 1;
} else if (c == 0xF) {
@@ -531,11 +543,11 @@ void dTagProcessor_c::formatV(
writePtr[2] = src[2];
writePtr += 3;
src += 3;
- } else if (state4 != 0 && field_0x90E != 0) {
+ } else if (isProcessingOption != 0 && mCurrentOptionIdx != 0) {
// Note: Return ignored here
- writeSingleCharacter(c, &getTmpBuffer()[local_b4], &local_b4);
+ writeSingleCharacter(c, &getOptionBuf()[optionLength], &optionLength);
src++;
- onWriteTmpBuffer();
+ onWriteOptionBuf();
} else {
if (textBox != nullptr) {
if (c == L'\n') {
@@ -618,7 +630,7 @@ beginning:
wchar_t *endPtr = nullptr;
getTextCommand(c, src + 1, &cmdLen, &cmd, &endPtr);
switch (cmd) {
- case 0x0F0F0F0F: {
+ case TAG_CMD_0x0F0F0F0F: {
if (lineNum / getMaxNumLines(mMsgWindowSubtype) == unkArg) {
nw4r::lyt::Size fontSize = getTextBox()->GetFontSize();
posX = getMarginForCenteredLine(lineNum);
@@ -658,11 +670,11 @@ beginning:
}
lineNum++;
} break;
- case 0x10000:
- case 0x10001:
- case 0x10002:
- case 0x10003: b1 = true; break;
- case 0x10008: {
+ case TAG_CMD_OPTION_0:
+ case TAG_CMD_OPTION_1:
+ case TAG_CMD_OPTION_2:
+ case TAG_CMD_OPTION_3: b1 = true; break;
+ case 0x10008: {
if (b2) {
f32 newScale = fn_800B8040(READ_U8(endPtr, 0), mMsgWindowSubtype);
f32 baseScale = fn_800B8040(0, mMsgWindowSubtype);
@@ -787,33 +799,33 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
wchar_t *endPtr = nullptr;
getTextCommand(ch, ctx->str, &cmdLen, &cmd, &endPtr);
switch (cmd) {
- case 0x10000:
+ case TAG_CMD_OPTION_0:
ctx->str += cmdLen / 2;
- ctx->str += field_0x808[0];
+ ctx->str += mOptionLengths[0];
return nw4r::ut::OPERATION_DEFAULT;
- case 0x10001:
+ case TAG_CMD_OPTION_1:
ctx->str += cmdLen / 2;
- ctx->str += field_0x808[1];
+ ctx->str += mOptionLengths[1];
return nw4r::ut::OPERATION_DEFAULT;
- case 0x10002:
+ case TAG_CMD_OPTION_2:
ctx->str += cmdLen / 2;
- ctx->str += field_0x808[2];
+ ctx->str += mOptionLengths[2];
return nw4r::ut::OPERATION_DEFAULT;
- case 0x10003:
+ case TAG_CMD_OPTION_3:
ctx->str += cmdLen / 2;
- ctx->str += field_0x808[3];
+ ctx->str += mOptionLengths[3];
return nw4r::ut::OPERATION_DEFAULT;
- case 0x0F0F0F0F: fn_800B4FF0(rect, ctx, cmdLen, endPtr); break;
- case 0x0F0F0F0E: field_0xEE2 = 1; break;
- case 0x3:
- if (field_0xEE1 == 0) {
+ case TAG_CMD_0x0F0F0F0F: fn_800B4FF0(rect, ctx, cmdLen, endPtr); break;
+ case TAG_CMD_0x0F0F0F0E: field_0xEE2 = 1; break;
+ case TAG_CMD_COLOR:
+ if (!mIsShadowText) {
setColor(rect, ctx, cmdLen, endPtr);
}
break;
- case 0x2: setScale(rect, ctx, cmdLen, endPtr); break;
+ case TAG_CMD_SCALE: setScale(rect, ctx, cmdLen, endPtr); break;
case 0x10004:
// Pause
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEED == 0 && mNumericArgsCopy[8] == field_0x838) {
setFramesLeftOnPause(rect, ctx, cmdLen, endPtr);
field_0xEED = 1;
@@ -823,7 +835,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x10005:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEEE == 0 && mNumericArgsCopy[9] == field_0x83C) {
fn_800B5500(cmdLen, endPtr);
field_0xEEE = 1;
@@ -833,7 +845,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x10007:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEE5 == 0 && mNumericArgsCopy[0] == field_0x87C) {
fn_800B60E0(cmdLen, endPtr);
field_0xEE5 = 1;
@@ -845,7 +857,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
case 0x10008: fn_800B61D0(rect, ctx, cmdLen, endPtr); break;
case 0x30000: changeScale(rect, ctx, false); break;
case 0x10009:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEE6 == 0 && mNumericArgsCopy[1] == field_0x880) {
fn_800B6110(cmdLen, endPtr);
field_0xEE6 = 1;
@@ -855,7 +867,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x1000A:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEE7 == 0 && mNumericArgsCopy[2] == field_0x884) {
fn_800B6140(cmdLen, endPtr);
field_0xEE7 = 1;
@@ -866,7 +878,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
break;
case 0x1000B:
// Sound
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEE8 == 0 && mNumericArgsCopy[3] == field_0x888) {
playSound(cmdLen, endPtr);
field_0xEE8 = 1;
@@ -877,7 +889,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
break;
case 0x1000C:
// "entrypoint"
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEEA == 0 && mNumericArgsCopy[5] == field_0x890) {
fn_800B6170(cmdLen, endPtr);
field_0xEEA = 1;
@@ -887,7 +899,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x1000D:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEEB == 0 && mNumericArgsCopy[6] == field_0x894) {
fn_800B6190(cmdLen, endPtr);
field_0xEEB = 1;
@@ -897,7 +909,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x1000E:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEEC == 0 && mNumericArgsCopy[7] == field_0x898) {
fn_800B61B0(cmdLen, endPtr);
field_0xEEC = 1;
@@ -916,7 +928,7 @@ nw4r::ut::Operation dTagProcessor_c::ProcessTags(nw4r::ut::Rect *rect, u16 ch, n
}
break;
case 0x10011:
- if (rect == nullptr && field_0xEE1 == 0) {
+ if (rect == nullptr && !mIsShadowText) {
if (field_0xEEF == 0 && mNumericArgsCopy[10] == field_0x840) {
fn_800B5540(endPtr);
field_0xEEF = 1;
@@ -1096,13 +1108,13 @@ void dTagProcessor_c::fn_800B5540(wchar_t *src) {
dLytMsgWindow_c::getInstance()->onFlag0x820(sMsgWindowFlags[READ_U8(src, 0)]);
}
-wchar_t *dTagProcessor_c::writeHeroname(wchar_t *dest, s32 *outArg, s32 arg) {
+wchar_t *dTagProcessor_c::writeHeroname(wchar_t *dest, s32 *outArg, bool isProcessingOption) {
if (FileManager::GetInstance()->getHeroname()[0] != '\0') {
for (int i = 0; FileManager::GetInstance()->getHeroname()[i] != '\0'; i++) {
- if (arg != 0 && field_0x90E != 0) {
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
wchar_t *heroName = FileManager::GetInstance()->getHeroname();
- writeSingleCharacter(heroName[i], &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ writeSingleCharacter(heroName[i], &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
} else {
wchar_t *heroName = FileManager::GetInstance()->getHeroname();
dest = writeSingleCharacter(heroName[i], dest, nullptr);
@@ -1112,7 +1124,7 @@ wchar_t *dTagProcessor_c::writeHeroname(wchar_t *dest, s32 *outArg, s32 arg) {
return dest;
}
-wchar_t *dTagProcessor_c::writeItem(wchar_t *dest, wchar_t *src, s32 *outArg, s32 arg) {
+wchar_t *dTagProcessor_c::writeItem(wchar_t *dest, wchar_t *src, s32 *outArg, bool isProcessingOption) {
int itemIndex = READ_U16(src, 0);
wchar_t c;
@@ -1125,10 +1137,10 @@ wchar_t *dTagProcessor_c::writeItem(wchar_t *dest, wchar_t *src, s32 *outArg, s3
while ((c = text[i]) != 0) {
if (c == 0xE) {
int len = ((text[i + 3] / 2) & 0x7F) + 4;
- if (arg != 0 && field_0x90E != 0) {
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
for (int j = 0; j < len; j++) {
- writeSingleCharacter(text[i], &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ writeSingleCharacter(text[i], &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
i++;
}
} else {
@@ -1138,9 +1150,9 @@ wchar_t *dTagProcessor_c::writeItem(wchar_t *dest, wchar_t *src, s32 *outArg, s3
}
}
} else {
- if (arg != 0 && field_0x90E != 0) {
- writeSingleCharacter(c, &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ writeSingleCharacter(c, &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
} else {
dest = writeSingleCharacter(c, dest, nullptr);
}
@@ -1151,17 +1163,17 @@ wchar_t *dTagProcessor_c::writeItem(wchar_t *dest, wchar_t *src, s32 *outArg, s3
return dest;
}
-wchar_t *dTagProcessor_c::writeStringArg(wchar_t *dest, wchar_t *src, s32 *outArg, s32 arg) {
+wchar_t *dTagProcessor_c::writeStringArg(wchar_t *dest, wchar_t *src, s32 *outArg, bool isProcessingOption) {
s32 argIdx = READ_U32(src, 0);
wchar_t c;
int i = 0;
while ((c = mStringArgs[argIdx][i]) != 0) {
if (c == 0xE) {
int len = ((mStringArgs[argIdx][i + 3] / 2) & 0x7F) + 4;
- if (arg != 0 && field_0x90E != 0) {
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
for (int j = 0; j < len; j++) {
- writeSingleCharacter(mStringArgs[argIdx][i], &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ writeSingleCharacter(mStringArgs[argIdx][i], &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
i++;
}
} else {
@@ -1171,9 +1183,9 @@ wchar_t *dTagProcessor_c::writeStringArg(wchar_t *dest, wchar_t *src, s32 *outAr
}
}
} else {
- if (arg != 0 && field_0x90E != 0) {
- writeSingleCharacter(c, &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ writeSingleCharacter(c, &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
} else {
dest = writeSingleCharacter(c, dest, nullptr);
}
@@ -1188,7 +1200,7 @@ wchar_t *dTagProcessor_c::writeStringArg(wchar_t *dest, wchar_t *src, s32 *outAr
return dest;
}
-wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outArg, s32 arg) {
+wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outArg, bool isProcessingOption) {
int numZeroDigits = READ_U8(src, 4);
bool writeZeroDigits = false;
s32 argIdx = READ_U32(src, 0);
@@ -1204,9 +1216,9 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
writeZeroDigits = true;
}
if (digit > 0 || writeZeroDigits) {
- if (arg != 0 && field_0x90E != 0) {
- getTmpBuffer()[*outArg] = '0' + digit;
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ getOptionBuf()[*outArg] = '0' + digit;
+ onWriteOptionBuf();
(*outArg)++;
} else {
*(dest++) = '0' + digit;
@@ -1220,9 +1232,9 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
writeZeroDigits = true;
}
if (digit > 0 || writeZeroDigits) {
- if (arg != 0 && field_0x90E != 0) {
- getTmpBuffer()[*outArg] = '0' + digit;
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ getOptionBuf()[*outArg] = '0' + digit;
+ onWriteOptionBuf();
(*outArg)++;
} else {
*(dest++) = '0' + digit;
@@ -1236,9 +1248,9 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
writeZeroDigits = true;
}
if (digit > 0 || writeZeroDigits) {
- if (arg != 0 && field_0x90E != 0) {
- getTmpBuffer()[*outArg] = '0' + digit;
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ getOptionBuf()[*outArg] = '0' + digit;
+ onWriteOptionBuf();
(*outArg)++;
} else {
*(dest++) = '0' + digit;
@@ -1252,9 +1264,9 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
writeZeroDigits = true;
}
if (digit > 0 || writeZeroDigits) {
- if (arg != 0 && field_0x90E != 0) {
- getTmpBuffer()[*outArg] = '0' + digit;
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ getOptionBuf()[*outArg] = '0' + digit;
+ onWriteOptionBuf();
(*outArg)++;
} else {
*(dest++) = '0' + digit;
@@ -1263,9 +1275,9 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
}
digit = number;
- if (arg != 0 && field_0x90E != 0) {
- getTmpBuffer()[*outArg] = '0' + digit;
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ getOptionBuf()[*outArg] = '0' + digit;
+ onWriteOptionBuf();
(*outArg)++;
} else {
*(dest++) = '0' + digit;
@@ -1273,7 +1285,7 @@ wchar_t *dTagProcessor_c::writeNumericArg(wchar_t *dest, wchar_t *src, s32 *outA
return dest;
}
-wchar_t *dTagProcessor_c::writeSingularOrPluralWord(wchar_t *dest, wchar_t *src, s32 *outArg, s32 arg) {
+wchar_t *dTagProcessor_c::writeSingularOrPluralWord(wchar_t *dest, wchar_t *src, s32 *outArg, bool isProcessingOption) {
int itemIndex = READ_U8(src, 0);
wchar_t c;
@@ -1290,10 +1302,10 @@ wchar_t *dTagProcessor_c::writeSingularOrPluralWord(wchar_t *dest, wchar_t *src,
while ((c = text[i]) != 0) {
if (c == 0xE) {
int len = ((text[i + 3] / 2) & 0x7F) + 4;
- if (arg != 0 && field_0x90E != 0) {
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
for (int j = 0; j < len; j++) {
- writeSingleCharacter(text[i], &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ writeSingleCharacter(text[i], &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
i++;
}
} else {
@@ -1303,9 +1315,9 @@ wchar_t *dTagProcessor_c::writeSingularOrPluralWord(wchar_t *dest, wchar_t *src,
}
}
} else {
- if (arg != 0 && field_0x90E != 0) {
- writeSingleCharacter(c, &getTmpBuffer()[*outArg], outArg);
- onWriteTmpBuffer();
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
+ writeSingleCharacter(c, &getOptionBuf()[*outArg], outArg);
+ onWriteOptionBuf();
} else {
dest = writeSingleCharacter(c, dest, nullptr);
}
@@ -1498,7 +1510,7 @@ void dTagProcessor_c::drawPicture(
mColor c2(0xF3, 0xEF, 0xE1, alpha);
w->SetTextColor(c1, c2);
}
- if (field_0xEE1 != 0) {
+ if (mIsShadowText) {
// #505050
mColor c1(0x50, 0x50, 0x50, 0);
mColor c2(0x50, 0x50, 0x50, 0x50);
@@ -1635,11 +1647,12 @@ void dTagProcessor_c::restoreColor(nw4r::ut::PrintContext<wchar_t> *ctx, u8 wind
ctx->writer->SetTextColor(c1, c2);
}
-wchar_t *dTagProcessor_c::writeTextNormal(const wchar_t *src, wchar_t *dest, s32 *pArg, u8 cmdLen, s32 arg) {
- if (arg != 0 && field_0x90E != 0) {
+wchar_t *
+dTagProcessor_c::writeTextNormal(const wchar_t *src, wchar_t *dest, s32 *pArg, u8 cmdLen, bool isProcessingOption) {
+ if (isProcessingOption && mCurrentOptionIdx != 0) {
for (u32 i = 0; i < (cmdLen / 2 + 1); i++) {
- getTmpBuffer()[*pArg] = *(src++);
- onWriteTmpBuffer();
+ getOptionBuf()[*pArg] = *(src++);
+ onWriteOptionBuf();
(*pArg)++;
}
} else {
diff --git a/src/d/lyt/d_lyt_game_over.cpp b/src/d/lyt/d_lyt_game_over.cpp
index b3939590..1b7ae84a 100644
--- a/src/d/lyt/d_lyt_game_over.cpp
+++ b/src/d/lyt/d_lyt_game_over.cpp
@@ -129,9 +129,9 @@ bool dLytGameOver_c::build() {
}
}
- mSelectBtn.setField_0x9C4(1);
- mSelectBtn.setField_0x99C(1);
- mSelectBtn.setField_0x9A0(2);
+ mSelectBtn.setFlipBtnLayout(1);
+ mSelectBtn.setSkipOutAnim(1);
+ mSelectBtn.setInSound(2);
mStateMgr.changeState(StateID_Init);
@@ -253,8 +253,8 @@ void dLytGameOver_c::executeState_Wait() {
anm.play();
switch (mStep) {
case 0: {
- if (mSelectBtn.getField_0x9B4() >= 0) {
- mSelectedOption = mSelectBtn.getField_0x9B4();
+ if (mSelectBtn.getDecidedBtnIdx() >= 0) {
+ mSelectedOption = mSelectBtn.getDecidedBtnIdx();
mStep += 1;
mIsChangingState = true;
}
@@ -344,15 +344,15 @@ void dLytGameOver_c::setupButtons() {
}
for (int i = 0; i < numOptions; i++) {
- const wchar_t *buf = dMessage_c::getGlobalTagProcessor()->getBuf(i);
+ const wchar_t *buf = dMessage_c::getGlobalTagProcessor()->getOptionString(i);
mSelectBtn.getSelectTextBox(i, 0)->setTextWithGlobalTextProcessor(buf);
mSelectBtn.getSelectTextBox(i, 1)->setTextWithGlobalTextProcessor(buf);
}
mSelectBtn.setTagProcessor(dMessage_c::getGlobalTagProcessor());
- u32 tmp = dMessage_c::getGlobalTagProcessor()->getField_0x828();
- mSelectBtn.setField_0x9BC(tmp);
+ u32 tmp = dMessage_c::getGlobalTagProcessor()->getCancelBtnIdx();
+ mSelectBtn.setCancelBtnIdx(tmp);
mSelectBtn.setField_0x990(tmp);
- mSelectBtn.fn_8011E5D0(numOptions, true);
+ mSelectBtn.requestIn(numOptions, true);
}
SPECIAL_BASE_PROFILE(LYT_GAMEOVER_MGR, dLytGameOverMgr_c, fProfile::LYT_GAMEOVER_MGR, 0x02AC, 0x0201);
diff --git a/src/d/lyt/d_lyt_save_msg_window.cpp b/src/d/lyt/d_lyt_save_msg_window.cpp
index cc8fd0f0..7d493b82 100644
--- a/src/d/lyt/d_lyt_save_msg_window.cpp
+++ b/src/d/lyt/d_lyt_save_msg_window.cpp
@@ -67,11 +67,11 @@ bool dLytSaveMsgWindow_c::build(bool arg) {
}
}
- mBtn.setField_0x9C4(1);
+ mBtn.setFlipBtnLayout(1);
if (arg) {
- mBtn.setField_0x99C(1);
+ mBtn.setSkipOutAnim(1);
}
- mBtn.setField_0x9A0(1);
+ mBtn.setInSound(1);
mStateMgr.changeState(StateID_Init);
mLineSpace = mLyt.getTextBox("T_text_00")->GetLineSpace();
@@ -222,8 +222,8 @@ void dLytSaveMsgWindow_c::initializeState_Wait() {
}
void dLytSaveMsgWindow_c::executeState_Wait() {
if (field_0x10C0 == 0) {
- field_0x10C4 = mBtn.getField_0x9B4();
- field_0x10C8 = mBtn.getField_0x9B0();
+ field_0x10C4 = mBtn.getDecidedBtnIdx();
+ field_0x10C8 = mBtn.getConfirmedBtnIdx();
}
if (field_0x10DB == 1) {
field_0x10DB = 0;
@@ -279,7 +279,7 @@ void dLytSaveMsgWindow_c::executeState_Out() {
}
}
void dLytSaveMsgWindow_c::finalizeState_Out() {
- if (mBtn.getField_0x9A4() == 0) {
+ if (!mBtn.isVisible()) {
mLyt.findPane("N_messageBtn_00")->SetVisible(false);
}
mWillFinishOut = 0;
@@ -375,7 +375,7 @@ void dLytSaveMsgWindow_c::updateSaveText() {
numOptions = 4;
}
for (s32 i = 0; i < numOptions; i++) {
- const wchar_t *text = dMessage_c::getGlobalTagProcessor()->getBuf(i);
+ const wchar_t *text = dMessage_c::getGlobalTagProcessor()->getOptionString(i);
mBtn.getSelectTextBox(i, 0)->setTextWithGlobalTextProcessor(text);
mBtn.getSelectTextBox(i, 1)->setTextWithGlobalTextProcessor(text);
}
@@ -383,10 +383,10 @@ void dLytSaveMsgWindow_c::updateSaveText() {
if (field_0x10B0 != 0) {
mBtn.setTagProcessor(dMessage_c::getGlobalTagProcessor());
static const u32 sInts[] = {0, 2, 3, 4};
- u32 unkInt = sInts[field_0x10B0];
- s32 f = dMessage_c::getGlobalTagProcessor()->getField_0x828();
- mBtn.setField_0x9BC(f);
+ u32 numOptions = sInts[field_0x10B0];
+ s32 f = dMessage_c::getGlobalTagProcessor()->getCancelBtnIdx();
+ mBtn.setCancelBtnIdx(f);
mBtn.setField_0x990(f);
- mBtn.fn_8011E5D0(unkInt, true);
+ mBtn.requestIn(numOptions, true);
}
}
diff --git a/src/d/lyt/d_textbox.cpp b/src/d/lyt/d_textbox.cpp
index 7f77feb6..abc1ecaf 100644
--- a/src/d/lyt/d_textbox.cpp
+++ b/src/d/lyt/d_textbox.cpp
@@ -261,7 +261,7 @@ void dTextBox_c::setTextWithGlobalTextProcessorV(const wchar_t *str, void *unk,
mpMyTagProcessor = dMessage_c::getGlobalTagProcessor();
u32 outLen = 0;
mWindowSubtype = mpMyTagProcessor->getMsgWindowSubtype();
- mpMyTagProcessor->setField_0xEE1(field_0x1F6);
+ mpMyTagProcessor->setIsShadowText(mIsShadowTextBox);
mpMyTagProcessor->setField_0xEE2(0);
mpMyTagProcessor->setField_0xEE3(1);
@@ -283,7 +283,7 @@ void dTextBox_c::setTextWithTextProcessorV(const wchar_t *str, dTagProcessor_c *
u32 outLen = 0;
mpMyTagProcessor = tagProcessor;
mWindowSubtype = mpMyTagProcessor->getMsgWindowSubtype();
- mpMyTagProcessor->setField_0xEE1(field_0x1F6);
+ mpMyTagProcessor->setIsShadowText(mIsShadowTextBox);
mpMyTagProcessor->setField_0xEE2(0);
mpMyTagProcessor->setField_0xEE3(1);
@@ -325,7 +325,7 @@ void dTextBox_c::setMessageWithGlobalTextProcessorAndMsbtInfo(
mpMyTagProcessor = dMessage_c::getGlobalTagProcessor();
mpMyTagProcessor->setMsgWindowSubtype(dLytMsgWindow_c::MSG_WINDOW_34);
mWindowSubtype = mpMyTagProcessor->getMsgWindowSubtype();
- mpMyTagProcessor->setField_0xEE1(field_0x1F6);
+ mpMyTagProcessor->setIsShadowText(mIsShadowTextBox);
mpMyTagProcessor->setField_0xEE2(0);
mpMyTagProcessor->setField_0xEE3(1);
@@ -472,7 +472,7 @@ void dTextBox_c::init() {
mIsWidthFixed = false;
mFixedWidth = 0.0f;
mHasTextWriter = true;
- field_0x1F6 = 0;
+ mIsShadowTextBox = false;
field_0x1F7 = 0;
field_0x1F9 = false;
field_0x1FA = 0;
@@ -522,7 +522,7 @@ bool dTextBox_c::hasDynamicText() {
}
if (userDatName == "copy" && myList->GetType() == nw4r::lyt::res::TYPE_STRING) {
- field_0x1F6 = true;
+ mIsShadowTextBox = true;
dTextBox_c *other = mpLytBase->getTextBox(myList->GetString());
if (other != nullptr) {
u16 otherNum = other->GetExtUserDataNum();
@@ -607,7 +607,7 @@ void dTextBox_c::DrawSelf(const nw4r::lyt::DrawInfo &drawInfo) {
if (mpMyTagProcessor != nullptr) {
mpMyTagProcessor->setMsgWindowSubtype(mWindowSubtype);
- mpMyTagProcessor->setField_0xEE1(field_0x1F6);
+ mpMyTagProcessor->setIsShadowText(mIsShadowTextBox);
mpMyTagProcessor->setField_0xEE2(0);
if (mAlpha != 0) {
mpMyTagProcessor->setField_0xEE3(1);
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window.cpp b/src/d/lyt/msg_window/d_lyt_msg_window.cpp
index 4e08a12a..35d987f9 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window.cpp
@@ -142,7 +142,7 @@ bool dLytMsgWindow_c::build() {
field_0x81C = 0;
field_0x81D = 0;
- field_0x824 = 0;
+ mNumOptions = 0;
field_0x820 = 0;
field_0x81E = 0;
@@ -161,7 +161,7 @@ bool dLytMsgWindow_c::remove() {
mpTagProcessor = nullptr;
mSelectBtn.remove();
removeSubMsgManagers();
- field_0x824 = 0;
+ mNumOptions = 0;
mResAcc1.detach();
mResAcc2.detach();
return true;
@@ -494,36 +494,36 @@ static wchar_t *sBufs[4];
void dLytMsgWindow_c::initializeState_WaitKeySelectQuestion() {
// TODO regswaps
- field_0x824 = mpTagProcessor->getField_0x90E();
+ mNumOptions = mpTagProcessor->getField_0x90E();
mSelectBtn.setField_0x9B8(mpTagProcessor->getField_0x82C());
- s32 tmp = mpTagProcessor->getField_0x828();
- mSelectBtn.setField_0x9BC(tmp);
+ s32 tmp = mpTagProcessor->getCancelBtnIdx();
+ mSelectBtn.setCancelBtnIdx(tmp);
mSelectBtn.setField_0x990(tmp);
mSelectBtn.setTagProcessor(mpTagProcessor);
for (s32 i = 0; i < 4; i++) {
- sBufs[i] = mpTagProcessor->getBuf(i);
+ sBufs[i] = mpTagProcessor->getOptionString(i);
}
- mSelectBtn.fn_8011E5D0(field_0x824, true);
+ mSelectBtn.requestIn(mNumOptions, true);
- for (s32 i = 0, option = 0; i < field_0x824; option++, i++) {
+ for (s32 i = 0, option = 0; i < mNumOptions; option++, i++) {
for (s32 j = 0; j < 2; j++) {
mSelectBtn.getSelectTextBox(option, j)->setTextWithGlobalTextProcessor(sBufs[i]);
}
}
}
void dLytMsgWindow_c::executeState_WaitKeySelectQuestion() {
- s32 selection = mSelectBtn.getField_0x9B4();
+ s32 selection = mSelectBtn.getDecidedBtnIdx();
if (selection >= 0) {
if (mSelectBtn.isStateWait()) {
bool doFiThing = false;
mpTagProcessor->setField_0x90E(0);
mpTagProcessor->setField_0x82C(-1);
- mpTagProcessor->setField_0x828(-1);
+ mpTagProcessor->setCancelBtnIdx(-1);
mSelectBtn.setTagProcessor(nullptr);
- field_0x824 = 0;
+ mNumOptions = 0;
mTextOptionSelection = selection;
field_0x1220 = 0;
if (FiContext::GetInstance() != nullptr) {
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp
index 2e15b7ce..8e740d14 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_demo.cpp
@@ -54,7 +54,7 @@ bool dLytMsgWindowDemo_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAc
mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
mpTagProcessor = tagProcessor;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_get.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_get.cpp
index d595badc..c878dab5 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_get.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_get.cpp
@@ -64,7 +64,7 @@ bool dLytMsgWindowGet_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_link.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_link.cpp
index 7b03ef4b..12c9dc7b 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_link.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_link.cpp
@@ -68,7 +68,7 @@ bool dLytMsgWindowLink_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAc
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp
index 23b4ce88..0dc84e66 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp
@@ -1,11 +1,21 @@
#include "d/lyt/msg_window/d_lyt_msg_window_select_btn.h"
#include "common.h"
+#include "d/d_gfx.h"
+#include "d/d_lyt_hio.h"
#include "d/d_pad.h"
#include "d/d_pad_nav.h"
#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_cursor_stick.h"
+#include "d/lyt/d_lyt_system_window.h"
+#include "d/lyt/meter/d_lyt_meter.h"
+#include "d/lyt/msg_window/d_lyt_msg_window.h"
#include "d/snd/d_snd_player_mgr.h"
#include "d/snd/d_snd_small_effect_mgr.h"
+#include "m/m_angle.h"
+#include "m/m_pad.h"
+#include "m/m_vec.h"
+#include "nw4r/math/math_types.h"
STATE_DEFINE(dLytMsgWindowSelectBtnParts_c, Wait);
STATE_DEFINE(dLytMsgWindowSelectBtnParts_c, On);
@@ -22,28 +32,572 @@ STATE_DEFINE(dLytMsgWindowSelectBtn_c, Out);
SelectBtnHelper::SelectBtnHelper() {
field_0x4C = -1;
- field_0x50 = -1;
- field_0x44 = field_0x48 = 0;
- field_0x34 = field_0x3C = 0.0f;
- field_0x38 = field_0x40 = 0.0f;
- field_0x52 = 0;
- field_0x51 = 1;
-
- panes[0] = 0;
- panes[1] = 0;
- panes[2] = 0;
- panes[3] = 0;
- panes[4] = 0;
- panes[5] = 0;
- panes[6] = 0;
- panes[7] = 0;
- panes[8] = 0;
+ mSelectedBtnIdx = -1;
+ mButtonMode = 0;
+ mCursorSelectTimer = 0;
+ mAngX = mAngXCenter = 0.0f;
+ mAngY = mAngYCenter = 0.0f;
+ mIsNavEnabled = false;
+ mIsCursorActive = true;
+
+ panes[0] = nullptr;
+ panes[1] = nullptr;
+ panes[2] = nullptr;
+ panes[3] = nullptr;
+ panes[4] = nullptr;
+ panes[5] = nullptr;
+ panes[6] = nullptr;
+ panes[7] = nullptr;
+ panes[8] = nullptr;
}
SelectBtnHelper::~SelectBtnHelper() {}
+void SelectBtnHelper::init() {
+ field_0x24 = dPad::getDpdPosScreen();
+ fn_8011E110(field_0x24);
+ field_0x2C = dPad::getDpdPosScreen();
+ resetCursor();
+}
+
+void SelectBtnHelper::remove() {
+ // no-op
+}
+
+void SelectBtnHelper::resetCursor() {
+ mAngX = mAngXCenter = mAng::ang2deg_c(dPad::ex_c::getInstance()->mMPLS.getHorizontalAngle());
+ mAngY = mAngYCenter = mAng::ang2deg_c(dPad::ex_c::getInstance()->mMPLS.getVerticalAngle());
+}
+
+u8 SelectBtnHelper::execute() {
+ u8 ret = EXECUTE_NONE;
+ if (mIsCursorActive && hasNewFSStickButtonSelect() && !mIsNavEnabled) {
+ mIsNavEnabled = true;
+ dPadNav::setNavEnabled(true, false);
+ dPadNav::hidePointer();
+ }
+
+ if (mIsCursorActive != dPadNav::isPointerVisible()) {
+ mIsCursorActive = dPadNav::isPointerVisible();
+ if (mIsCursorActive == true) {
+ if (mIsNavEnabled) {
+ mIsNavEnabled = false;
+ dPadNav::setNavEnabled(false, false);
+ }
+ resetCursor();
+ }
+ ret = EXECUTE_SWITCH_CURSOR;
+ }
+
+ s8 btn = mSelectedBtnIdx;
+ if (mIsCursorActive) {
+ if (handleCursorInput()) {
+ return EXECUTE_RESET_CURSOR;
+ } else if (btn == -1 && mSelectedBtnIdx != -1) {
+ ret = EXECUTE_SWITCH_CURSOR;
+ }
+ } else {
+ handleButtonInput();
+ if (btn == -1 && mSelectedBtnIdx != -1) {
+ ret = EXECUTE_SWITCH_STICK;
+ }
+ }
+
+ return ret;
+}
+
+bool SelectBtnHelper::handleCursorInput() {
+ if (dPad::getDownTrigDown()) {
+ resetCursor();
+ return true;
+ }
+
+ mAngX = mAng::ang2deg_c(dPad::ex_c::getInstance()->mMPLS.getHorizontalAngle());
+ mAngY = mAng::ang2deg_c(dPad::ex_c::getInstance()->mMPLS.getVerticalAngle());
+
+ mVec2_c screenPos = dPad::getDpdPosScreen();
+ if (mCursorSelectTimer > 0) {
+ mCursorSelectTimer--;
+ if (mCursorSelectTimer == 0) {
+ fn_8011E110(screenPos);
+ field_0x2C = dPad::getDpdPosScreen();
+ mAngXCenter = mAngX;
+ mAngYCenter = mAngY;
+ }
+ } else {
+ s32 btn = calculatePointedAtButton(mAngX - mAngXCenter, mAngY - mAngYCenter);
+ if (mSelectedBtnIdx != btn) {
+ mSelectedBtnIdx = btn;
+ mCursorSelectTimer = dLyt_HIO_c::getInstance()->getField0x796();
+ if (mSelectedBtnIdx != -1) {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR);
+ mPad::getCore()->startPatternRumble("**-*----", 0, false);
+ }
+ fn_8011E110(screenPos);
+ // TODO additional stack stores
+ field_0x2C = dPad::getDpdPosScreen();
+ mAngXCenter = mAngX;
+ mAngYCenter = mAngY;
+ }
+
+ f32 length = 0.0f;
+ f32 angle = 0.0f;
+ s32 selected = mSelectedBtnIdx;
+ mVec2_c v(
+ -(mAngX - mAngXCenter) / dLyt_HIO_c::getInstance()->getField0x778(),
+ (mAngY - mAngYCenter) / dLyt_HIO_c::getInstance()->getField0x780()
+ );
+
+ if (v.x > 1.0f) {
+ v.x = 1.0f;
+ }
+ if (v.x < -1.0f) {
+ v.x = -1.0f;
+ }
+ if (v.y > 1.0f) {
+ v.y = 1.0f;
+ }
+ if (v.y < -1.0f) {
+ v.y = -1.0f;
+ }
+
+ if (selected != -1) {
+ nw4r::math::MTX34 mtx0 = getRootPane()->GetGlobalMtx();
+ mVec2_c pos0 = mVec2_c(mtx0._03, mtx0._13);
+ nw4r::math::MTX34 mtxi = getPosPane(selected)->GetGlobalMtx();
+ mVec2_c posi = mVec2_c(mtxi._03, mtxi._13);
+ mVec2_c d1 = posi - pos0;
+ s16 ang = d1.ang();
+
+ mVec2_c adj;
+ adj.x = v.x * dLyt_HIO_c::getInstance()->getField0x770();
+ adj.y = v.y * dLyt_HIO_c::getInstance()->getField0x774();
+ mVec2_c d2 = posi + adj - pos0;
+ s16 ang2 = d2.ang();
+
+ angle = mAng::ang2deg_c(ang2) - mAng::ang2deg_c(ang);
+ length = d2.length() / d1.length();
+ }
+ if (length > 1.0f) {
+ length = 1.0f;
+ }
+
+ if ((mButtonMode == MODE_3_UP && selected == 0) || (mButtonMode == MODE_3_DOWN && selected == 1)) {
+ // "middle" button
+ length *= 0.53f;
+ }
+
+ dLytMeter_c::setSelectBtn(angle + getAngleForButtonIdx(selected), length);
+ dLytSystemWindow_c::setSelectBtn(angle + getAngleForButtonIdx(selected), length);
+ }
+ return false;
+}
+
+bool SelectBtnHelper::handleButtonInput() {
+ if (dPad::getDownTrigDown()) {
+ resetCursor();
+ }
+
+ s8 btn = mSelectedBtnIdx;
+ if (btn != -1) {
+#define IS(dir) (dPadNav::getFSStickNavDirection() == dPadNav::FS_STICK_##dir)
+
+ switch (mButtonMode) {
+ case MODE_2:
+ if (btn == 0) {
+ if (IS(LEFT) || IS(UP_LEFT) || IS(DOWN_LEFT)) {
+ btn = 1;
+ }
+ } else if (btn == 1) {
+ if (IS(RIGHT) || IS(UP_RIGHT) || IS(DOWN_RIGHT)) {
+ btn = 0;
+ }
+ }
+ break;
+ case MODE_3_UP:
+ if (btn == 0) {
+ if (IS(RIGHT) || IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(LEFT) || IS(DOWN_LEFT)) {
+ btn = 2;
+ }
+ } else if (btn == 1) {
+ if (IS(UP) || IS(UP_LEFT)) {
+ btn = 0;
+ } else if (IS(DOWN_LEFT) || IS(LEFT)) {
+ btn = 2;
+ }
+ } else if (btn == 2) {
+ if (IS(UP) || IS(UP_RIGHT)) {
+ btn = 0;
+ } else if (IS(DOWN_RIGHT) || IS(RIGHT)) {
+ btn = 1;
+ }
+ }
+ break;
+ case MODE_4:
+ if (btn == 0) {
+ if (IS(DOWN) || IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(LEFT) || IS(UP_LEFT)) {
+ btn = 2;
+ } else if (IS(DOWN_LEFT)) {
+ btn = 3;
+ }
+ } else if (btn == 1) {
+ if (IS(UP) || IS(UP_RIGHT)) {
+ btn = 0;
+ } else if (IS(UP_LEFT)) {
+ btn = 2;
+ } else if (IS(LEFT) || IS(DOWN_LEFT)) {
+ btn = 3;
+ }
+ } else if (btn == 2) {
+ if (IS(RIGHT) || IS(UP_RIGHT)) {
+ btn = 0;
+ } else if (IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(DOWN) || IS(DOWN_LEFT)) {
+ btn = 3;
+ }
+ } else if (btn == 3) {
+ if (IS(UP_RIGHT)) {
+ btn = 0;
+ } else if (IS(RIGHT) || IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(UP) || IS(UP_LEFT)) {
+ btn = 2;
+ }
+ }
+ break;
+ case MODE_3_DOWN:
+ if (btn == 1) {
+ if (IS(RIGHT) || IS(UP_RIGHT)) {
+ btn = 0;
+ } else if (IS(LEFT) || IS(UP_LEFT)) {
+ btn = 2;
+ }
+ } else if (btn == 0) {
+ if (IS(DOWN) || IS(DOWN_LEFT)) {
+ btn = 1;
+ } else if (IS(UP_LEFT) || IS(LEFT)) {
+ btn = 2;
+ }
+ } else if (btn == 2) {
+ if (IS(DOWN) || IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(UP_RIGHT) || IS(RIGHT)) {
+ btn = 0;
+ }
+ }
+ break;
+ }
+
+#undef IS
+ } else {
+#define IS(dir) (dPadNav::getFSStickDirectionTrig() == dPadNav::FS_STICK_##dir)
+
+ switch (mButtonMode) {
+ case MODE_2:
+ if (IS(UP_RIGHT) || IS(RIGHT) || IS(DOWN_RIGHT)) {
+ btn = 0;
+ } else if (IS(UP_LEFT) || IS(LEFT) || IS(DOWN_LEFT)) {
+ btn = 1;
+ }
+ break;
+ case MODE_3_UP:
+ if (IS(UP_RIGHT) || IS(UP) || IS(UP_LEFT)) {
+ btn = 0;
+ } else if (IS(LEFT) || IS(DOWN_LEFT)) {
+ btn = 2;
+ } else if (IS(RIGHT) || IS(DOWN_RIGHT)) {
+ btn = 1;
+ }
+ break;
+ case MODE_4:
+ if (IS(UP_RIGHT) || IS(RIGHT)) {
+ btn = 0;
+ } else if (IS(DOWN_RIGHT)) {
+ btn = 1;
+ } else if (IS(DOWN_LEFT) || IS(LEFT)) {
+ btn = 3;
+ } else if (IS(UP_LEFT)) {
+ btn = 2;
+ }
+ break;
+ case MODE_3_DOWN:
+ if (IS(DOWN_RIGHT) || IS(DOWN) || IS(DOWN_LEFT)) {
+ btn = 1;
+ } else if (IS(LEFT) || IS(UP_LEFT)) {
+ btn = 2;
+ } else if (IS(RIGHT) || IS(UP_RIGHT)) {
+ btn = 0;
+ }
+ break;
+ }
+
+#undef IS
+
+ if (btn == -1) {
+ // TODO
+ btn = field_0x4C != -1 ? field_0x4C : 0;
+ }
+ }
+
+ if (mSelectedBtnIdx != btn) {
+ mSelectedBtnIdx = btn;
+ if (mSelectedBtnIdx != -1) {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR);
+ mPad::getCore()->startPatternRumble("**-*----", 0, false);
+ // TODO - pane array
+ dLytCursorStick_c::GetInstance()->setTargetPane(getBounding(btn));
+ }
+ }
+
+ return false;
+}
+
+f32 SelectBtnHelper::getAngleForButtonIdx(s32 idx) const {
+ f32 ret = 0.0f;
+ switch (mButtonMode) {
+ case MODE_2:
+ if (idx == 0) {
+ ret = -90.0f;
+ } else {
+ ret = 90.0f;
+ }
+ break;
+ case MODE_3_UP:
+ if (idx == 0) {
+ return 0.0f;
+ } else if (idx == 1) {
+ return -90.0f;
+ } else {
+ ret = 90.0f;
+ }
+ break;
+ case MODE_4:
+ if (idx == 0) {
+ return -75.0f;
+ } else if (idx == 1) {
+ return -105.0f;
+ } else if (idx == 2) {
+ return 75.0f;
+ } else {
+ ret = 105.0f;
+ }
+ break;
+ case MODE_3_DOWN:
+ if (idx == 1) {
+ return -180.0f;
+ } else if (idx == 0) {
+ return -90.0f;
+ } else {
+ ret = 90.0f;
+ }
+ break;
+ }
+
+ return ret;
+}
+
+bool SelectBtnHelper::hasNewFSStickButtonSelect() const {
+ if (dPadNav::getFSStickDirectionTrig() == dPadNav::FS_STICK_NONE) {
+ return false;
+ }
+
+#define TRIG(dir) (dPadNav::getFSStickDirectionTrig() == dPadNav::FS_STICK_##dir)
+
+ switch (mButtonMode) {
+ case MODE_2:
+ if (TRIG(UP) || TRIG(DOWN) ||
+ ((TRIG(RIGHT) || TRIG(UP_RIGHT) || TRIG(DOWN_RIGHT)) && mSelectedBtnIdx == 0) ||
+ ((TRIG(LEFT) || TRIG(UP_LEFT) || TRIG(DOWN_LEFT)) && mSelectedBtnIdx == 1)) {
+ return false;
+ }
+ break;
+ case MODE_3_UP:
+ if (((TRIG(UP) || TRIG(UP_RIGHT) || TRIG(UP_LEFT)) && mSelectedBtnIdx == 0) ||
+ ((TRIG(DOWN) || TRIG(DOWN_RIGHT) || TRIG(DOWN_LEFT)) && (mSelectedBtnIdx == 1 || mSelectedBtnIdx == 2)
+ ) ||
+ ((TRIG(RIGHT) || TRIG(UP_RIGHT) || TRIG(DOWN_RIGHT)) && mSelectedBtnIdx == 1) ||
+ ((TRIG(LEFT) || TRIG(UP_LEFT) || TRIG(DOWN_LEFT)) && mSelectedBtnIdx == 2)) {
+ return false;
+ }
+ break;
+ case MODE_3_DOWN:
+ if (((TRIG(UP) || TRIG(UP_LEFT) || TRIG(UP_RIGHT)) && (mSelectedBtnIdx == 0 || mSelectedBtnIdx == 2)) ||
+ ((TRIG(DOWN) || TRIG(DOWN_RIGHT) || TRIG(DOWN_LEFT)) && mSelectedBtnIdx == 1) ||
+ ((TRIG(RIGHT) || TRIG(UP_RIGHT) || TRIG(DOWN_RIGHT)) && mSelectedBtnIdx == 0) ||
+ ((TRIG(LEFT) || TRIG(UP_LEFT) || TRIG(DOWN_LEFT)) && mSelectedBtnIdx == 2)) {
+ return false;
+ }
+ break;
+ case MODE_4:
+ if ((TRIG(UP) && (mSelectedBtnIdx == 0 || mSelectedBtnIdx == 2)) ||
+ (TRIG(DOWN) && (mSelectedBtnIdx == 1 || mSelectedBtnIdx == 3)) ||
+ (TRIG(RIGHT) && (mSelectedBtnIdx == 0 || mSelectedBtnIdx == 1)) ||
+ (TRIG(LEFT) && (mSelectedBtnIdx == 2 || mSelectedBtnIdx == 3)) ||
+ (TRIG(UP_RIGHT) && mSelectedBtnIdx == 0) || (TRIG(UP_LEFT) && mSelectedBtnIdx == 2) ||
+ (TRIG(DOWN_RIGHT) && mSelectedBtnIdx == 1) || (TRIG(DOWN_LEFT) && mSelectedBtnIdx == 3)) {
+ return false;
+ }
+ break;
+ }
+
+#undef TRIG
+
+ return true;
+}
+
+s8 SelectBtnHelper::calculatePointedAtButton(f32 x, f32 y) {
+ s32 ret = mSelectedBtnIdx;
+ switch (mButtonMode) {
+ case MODE_2:
+ if (x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 0;
+ } else if (x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 1;
+ }
+ if (mSelectedBtnIdx == 0 && x < 0) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 1 && x > 0) {
+ mAngXCenter = mAngX;
+ }
+ break;
+ case MODE_3_UP:
+ if (y >= dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 0;
+ } else if (x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 1;
+ } else if (x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 2;
+ } else if (y <= -dLyt_HIO_c::getInstance()->getField0x780()) {
+ if (x < 0.0f) {
+ ret = 1;
+ } else {
+ ret = 2;
+ }
+ }
+ if (mSelectedBtnIdx == 0 && y > 0) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 1 && x < 0) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 2 && x > 0) {
+ mAngXCenter = mAngX;
+ }
+ break;
+ case MODE_4:
+ if (mSelectedBtnIdx == -1) {
+ if (y >= dLyt_HIO_c::getInstance()->getField0x780() &&
+ x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 0;
+ } else if (y <= -dLyt_HIO_c::getInstance()->getField0x780() &&
+ x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 1;
+ } else if (y >= dLyt_HIO_c::getInstance()->getField0x780() &&
+ x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 2;
+ } else if (y <= -dLyt_HIO_c::getInstance()->getField0x780() &&
+ x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 3;
+ }
+ } else if (mSelectedBtnIdx == 0) {
+ if (y <= -dLyt_HIO_c::getInstance()->getField0x784() &&
+ x >= dLyt_HIO_c::getInstance()->getField0x77C()) {
+ ret = 3;
+ } else if (y <= -dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 1;
+ } else if (x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 2;
+ }
+ } else if (mSelectedBtnIdx == 1) {
+ if (y >= dLyt_HIO_c::getInstance()->getField0x784() &&
+ x >= dLyt_HIO_c::getInstance()->getField0x77C()) {
+ ret = 2;
+ } else if (y >= dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 0;
+ } else if (x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 3;
+ }
+ } else if (mSelectedBtnIdx == 2) {
+ if (y <= -dLyt_HIO_c::getInstance()->getField0x784() &&
+ x <= -dLyt_HIO_c::getInstance()->getField0x77C()) {
+ ret = 1;
+ } else if (y <= -dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 3;
+ } else if (x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 0;
+ }
+ } else if (mSelectedBtnIdx == 3) {
+ if (y >= dLyt_HIO_c::getInstance()->getField0x784() &&
+ x <= -dLyt_HIO_c::getInstance()->getField0x77C()) {
+ ret = 0;
+ } else if (y >= dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 2;
+ } else if (x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 1;
+ }
+ }
+
+ if (mSelectedBtnIdx == 0 && y > 0.0f) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 0 && x < 0.0f) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 1 && y < 0.0f) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 1 && x < 0.0f) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 2 && y > 0.0f) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 2 && x > 0.0f) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 3 && y < 0.0f) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 3 && x > 0.0f) {
+ mAngXCenter = mAngX;
+ }
+ break;
+ case MODE_3_DOWN:
+ if (y <= -dLyt_HIO_c::getInstance()->getField0x780()) {
+ ret = 1;
+ } else if (x <= -dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 0;
+ } else if (x >= dLyt_HIO_c::getInstance()->getField0x778()) {
+ ret = 2;
+ } else if (y >= dLyt_HIO_c::getInstance()->getField0x780()) {
+ if (x < 0.0f) {
+ ret = 0;
+ } else {
+ ret = 2;
+ }
+ }
+ if (mSelectedBtnIdx == 1 && y < 0) {
+ mAngYCenter = mAngY;
+ } else if (mSelectedBtnIdx == 0 && x < 0) {
+ mAngXCenter = mAngX;
+ } else if (mSelectedBtnIdx == 2 && x > 0) {
+ mAngXCenter = mAngX;
+ }
+ break;
+ }
+
+ return ret;
+}
+
+void SelectBtnHelper::convertScreenPosToDpdPos(mVec2_c *pOutDpd, mVec2_c *screenPos) const {
+ pOutDpd->x = (screenPos->x - dGfx_c::getWidth4x3LeftF()) / (dGfx_c::getWidth4x3F() * 0.5f) - 1.0f;
+ pOutDpd->y = (screenPos->y - dGfx_c::getCurrentScreenTopF()) / (dGfx_c::getCurrentScreenHeightF() * -0.5f) - 1.0f;
+}
+
+void SelectBtnHelper::fn_8011E110(mVec2_c screenPos) const {
+ mVec2_c dpdPos;
+ convertScreenPosToDpdPos(&dpdPos, &screenPos);
+ dPad::ex_c::getInstance()->fn_80056580(mPad::getCurrentCoreID(), dpdPos);
+}
+
void dLytMsgWindowSelectBtnParts_c::initializeState_Wait() {}
void dLytMsgWindowSelectBtnParts_c::executeState_Wait() {
- if (field_0x48 != 0) {
+ if (mShouldBeOn != 0) {
for (int i = 0; i <= 1; i++) {
mpAnms[i]->setForwardOnce();
mpAnms[i]->setFrame(0.0f);
@@ -71,7 +625,7 @@ void dLytMsgWindowSelectBtnParts_c::finalizeState_On() {}
void dLytMsgWindowSelectBtnParts_c::initializeState_Select() {}
void dLytMsgWindowSelectBtnParts_c::executeState_Select() {
- if (field_0x48 == 0) {
+ if (mShouldBeOn == 0) {
for (int i = 0; i <= 1; i++) {
mpAnms[i]->setBackwardsOnce();
mpAnms[i]->setToStart();
@@ -99,7 +653,7 @@ void dLytMsgWindowSelectBtnParts_c::finalizeState_Off() {}
void dLytMsgWindowSelectBtnParts_c::init() {
mStateMgr.changeState(StateID_Wait);
- field_0x48 = 0;
+ mShouldBeOn = 0;
field_0x50 = 0;
field_0x4C = 3;
}
@@ -109,6 +663,14 @@ void dLytMsgWindowSelectBtnParts_c::execute() {
mpAnms[2]->play();
}
+const char *d_lyt_msg_window_select_btn_string_order_1() {
+ return "N_allBtn_00";
+}
+
+const char *d_lyt_msg_window_select_btn_string_order_2() {
+ return "N_arrowIn_00";
+}
+
#define SELECT_BTN_ANIM_IN 0
#define SELECT_BTN_ANIM_LOOP_REMOCON 1
#define SELECT_BTN_ANIM_INOUT_CURSOR 2
@@ -187,7 +749,7 @@ static const char *sDecideTextBoxes[2] = {
"T_decideS_00",
};
-static const char *sWindowName = "W_bgP_01";
+static const char *sWindowNames[] = {"W_bgP_01"};
static const char *sBoundings[SELECT_BTN_NUM_BTNS] = {
"B_btn_00",
@@ -201,40 +763,76 @@ static const char *sSelectPanes[7] = {
"N_messageBtn_01", "N_messageBtn_02", "N_messageBtn_03",
};
+#define SELECT_BTN_PANE_ITEM_ARROW_0 0
+#define SELECT_BTN_PANE_ARROW_HAND 1
+#define SELECT_BTN_PANE_BTN_0 2
+
+void dLytMsgWindowSelectBtn_c::requestIn(s32 numBtns, bool playSound) {
+ mPlayInSound = playSound;
+ mBtnHelper.mSelectedBtnIdx = -1;
+
+ if (numBtns < 2) {
+ numBtns = 2;
+ } else if (numBtns > 4) {
+ numBtns = 4;
+ }
+
+ mNumBtns = numBtns;
+ switch (numBtns) {
+ case 2: field_0x9AC = 2; break;
+ case 3: field_0x9AC = 1; break;
+ case 4: field_0x9AC = 0; break;
+ }
+
+ mIsVisible = true;
+ if (mFlipBtnLayout == 1 && mNumBtns == 3) {
+ mAnm[SELECT_BTN_ANIM_MESSAGE_BTN].setFrame(3.0f);
+ } else {
+ mAnm[SELECT_BTN_ANIM_MESSAGE_BTN].setFrame(mNumBtns - 2);
+ }
+ mAnm[SELECT_BTN_ANIM_MESSAGE_BTN].setAnimEnable(true);
+ mAnm[SELECT_BTN_ANIM_IN].setAnimEnable(false);
+ mConfirmedBtnIdx = -1;
+ mStateMgr.changeState(StateID_In);
+}
+
void dLytMsgWindowSelectBtn_c::initializeState_Wait() {
- field_0x9A4 = 0;
+ mIsVisible = false;
field_0x9B8 = -1;
- field_0x9BC = -1;
+ mCancelBtnIdx = -1;
- field_0x9CC = 0xFF;
- field_0x9C0 = 10;
+ mCanceledViaBBtnIdx = 0xFF;
+ mWaitCancelTimer = 10;
field_0x9CD = 1;
}
void dLytMsgWindowSelectBtn_c::executeState_Wait() {}
void dLytMsgWindowSelectBtn_c::finalizeState_Wait() {}
void dLytMsgWindowSelectBtn_c::initializeState_In() {
- field_0x9A4 = 1;
- field_0x9B4 = -1;
+ mIsVisible = true;
+ mDecidedBtnIdx = -1;
for (int i = 0; i < 2; i++) {
// "Select"
mLyt.loadTextVariant(mpDecideTextBoxes[i], 1);
}
- mpWindow->UpdateSize(mpSizeBox, 32.0f);
+ mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
for (int i = SELECT_BTN_ANIM_MESSAGE_BTN_CANCEL_0; i <= SELECT_BTN_ANIM_MESSAGE_BTN_CANCEL_3; i++) {
- if (field_0x9BC == i - SELECT_BTN_ANIM_MESSAGE_BTN_CANCEL_0) {
+ if (mCancelBtnIdx == i - SELECT_BTN_ANIM_MESSAGE_BTN_CANCEL_0) {
mAnm[i].setFrame(1.0f);
} else {
mAnm[i].setFrame(0.0f);
}
}
- mBtnHelper.field_0x50 = -1;
- mBtnHelper.field_0x51 = 1;
- // ??????
- f32 v = mBtnHelper.fn_8011D690(mBtnHelper.field_0x50);
+ mBtnHelper.mSelectedBtnIdx = -1;
+ mBtnHelper.mIsCursorActive = true;
+ if (mBtnHelper.getSelectedtBtnIdx() != -1) {
+ // unreachable but the call isn't eliminated
+ dLytCursorStick_c::GetInstance()->setTargetPane(mBtnHelper.getBounding(mBtnHelper.getSelectedtBtnIdx()));
+ }
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mBtnHelper.getSelectedtBtnIdx()), 0.0f);
mLyt.findPane("N_allBtn_00")->SetVisible(true);
mLyt.findPane("N_arrowIn_00")->SetVisible(true);
@@ -277,10 +875,10 @@ void dLytMsgWindowSelectBtn_c::initializeState_In() {
mAnm[SELECT_BTN_ANIM_IN].setToEnd();
field_0x9D1 = false;
} else {
- if (field_0x9CF != 0) {
- if (field_0x9A0 == 1) {
+ if (mPlayInSound) {
+ if (mInSound == 1) {
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_CHOICE_START);
- } else if (field_0x9A0 == 2) {
+ } else if (mInSound == 2) {
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_CHOICE_START_GAMEOVER);
} else {
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CHOICE_START);
@@ -300,65 +898,106 @@ void dLytMsgWindowSelectBtn_c::finalizeState_In() {
}
void dLytMsgWindowSelectBtn_c::initializeState_WaitSelect() {
- if (field_0x9D0 == 0) {
+ if (!field_0x9D0) {
field_0x9D0 = true;
dSndPlayerMgr_c::GetInstance()->enterMsgWait();
}
- mBtnHelper.fn_8011C970();
- mBtnHelper.field_0x48 = fn_8011FE50();
+ mBtnHelper.init();
+ mBtnHelper.mButtonMode = getSelectBtnMode();
}
void dLytMsgWindowSelectBtn_c::executeState_WaitSelect() {
- u8 v = mBtnHelper.fn_8011CAC0();
- if (v == 1) {
+ u8 v = mBtnHelper.execute();
+ if (v == SelectBtnHelper::EXECUTE_SWITCH_CURSOR) {
mStateMgr.changeState(StateID_CursorInOut);
return;
- } else if (v == 2) {
- f32 f = mBtnHelper.fn_8011D690(mBtnHelper.field_0x50);
- // TODO
+ } else if (v == SelectBtnHelper::EXECUTE_SWITCH_STICK) {
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mBtnHelper.getSelectedtBtnIdx()), 1.0f);
for (int i = 0; i < 2; i++) {
// "Confirm"
mLyt.loadTextVariant(mpDecideTextBoxes[i], 0);
}
- mpWindow->UpdateSize(mpSizeBox, 32.0f);
- } else if (v == 3) {
+ mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
+ } else if (v == SelectBtnHelper::EXECUTE_RESET_CURSOR) {
field_0x9D1 = 1;
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_POINTER_RESET);
mStateMgr.changeState(StateID_In);
return;
}
- if (mBtnHelper.field_0x50 >= 0 && dPad::getDownTrigA()) {
- field_0x9D0 = 0;
- field_0x9B0 = mBtnHelper.field_0x50;
+ if (mBtnHelper.getSelectedtBtnIdx() >= 0 && dPad::getDownTrigA()) {
+ mConfirmedBtnIdx = mBtnHelper.getSelectedtBtnIdx();
+ field_0x9D0 = false;
mStateMgr.changeState(StateID_WaitDecide);
- // TODO
if (mpTagProcessor != nullptr) {
- dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_CANCEL);
- } else {
- dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_OK);
+ if (mpTagProcessor->getOptionSound(mBtnHelper.getSelectedtBtnIdx()) == 0) {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_CANCEL);
+ } else {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_OK);
+ }
}
dSndPlayerMgr_c::GetInstance()->leaveMsgWait();
- } else if (dPad::getDownTrigB()) {
- f32 f = mBtnHelper.fn_8011D690(field_0x9BC);
- // TODO
- field_0x9CC = field_0x9BC;
- field_0x9D0 = 0;
+ } else if (mCancelBtnIdx >= 0 && dPad::getDownTrigB()) {
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mCancelBtnIdx), 1.0f);
+ mCanceledViaBBtnIdx = mCancelBtnIdx;
+ field_0x9D0 = false;
mStateMgr.changeState(StateID_WaitCancel);
- // TODO
if (mpTagProcessor != nullptr) {
- dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_CANCEL);
- } else {
- dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_OK);
+ if (mpTagProcessor->getOptionSound(mCanceledViaBBtnIdx) == 0) {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_CANCEL);
+ } else {
+ dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_TALK_CURSOR_OK);
+ }
}
dSndPlayerMgr_c::GetInstance()->leaveMsgWait();
}
}
-void dLytMsgWindowSelectBtn_c::finalizeState_WaitSelect() {}
+void dLytMsgWindowSelectBtn_c::finalizeState_WaitSelect() {
+ mBtnHelper.remove();
+ if (!field_0x9D0 && mBtnHelper.mIsNavEnabled) {
+ mBtnHelper.mIsNavEnabled = false;
+ dPadNav::setNavEnabled(false, false);
+ }
+}
-void dLytMsgWindowSelectBtn_c::initializeState_CursorInOut() {}
+void dLytMsgWindowSelectBtn_c::initializeState_CursorInOut() {
+ for (int i = 0; i < 2; i++) {
+ // "Confirm"
+ mLyt.loadTextVariant(mpDecideTextBoxes[i], 0);
+ }
+ mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
+
+ if (mBtnHelper.mIsCursorActive) {
+ mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setForwardOnce();
+ if (mBtnHelper.getSelectedtBtnIdx() != -1) {
+ f32 length = 1.0f;
+ if ((mBtnHelper.mButtonMode == SelectBtnHelper::MODE_3_UP && mBtnHelper.getSelectedtBtnIdx() == 0) ||
+ (mBtnHelper.mButtonMode == SelectBtnHelper::MODE_3_DOWN && mBtnHelper.getSelectedtBtnIdx() == 1)) {
+ // "middle" button
+ length *= 0.53f;
+ }
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mBtnHelper.getSelectedtBtnIdx()), length);
+ } else {
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mBtnHelper.getSelectedtBtnIdx()), 0.0f);
+ }
+ } else {
+ f32 length = 1.0f;
+ mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setBackwardsOnce();
+ if (mBtnHelper.getSelectedtBtnIdx() != -1) {
+ dLytCursorStick_c::GetInstance()->setTargetPane(mpBoundings[mBtnHelper.getSelectedtBtnIdx()]);
+ if ((mBtnHelper.mButtonMode == SelectBtnHelper::MODE_3_UP && mBtnHelper.getSelectedtBtnIdx() == 0) ||
+ (mBtnHelper.mButtonMode == SelectBtnHelper::MODE_3_DOWN && mBtnHelper.getSelectedtBtnIdx() == 1)) {
+ // "middle" button
+ length *= 0.53f;
+ }
+ }
+ dLytMeter_c::setSelectBtn(mBtnHelper.getAngleForButtonIdx(mBtnHelper.getSelectedtBtnIdx()), length);
+ }
+ mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setToStart();
+ mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setAnimEnable(true);
+}
void dLytMsgWindowSelectBtn_c::executeState_CursorInOut() {
if (mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].isStop2()) {
mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setAnimEnable(false);
@@ -371,18 +1010,18 @@ void dLytMsgWindowSelectBtn_c::executeState_CursorInOut() {
void dLytMsgWindowSelectBtn_c::finalizeState_CursorInOut() {}
void dLytMsgWindowSelectBtn_c::initializeState_WaitDecide() {
- s32 decideAnm = field_0x9B0 + SELECT_BTN_ANIM_MESSAGE_BTN_DECIDE_OFFSET;
+ s32 decideAnm = mConfirmedBtnIdx + SELECT_BTN_ANIM_MESSAGE_BTN_DECIDE_OFFSET;
mAnm[decideAnm].setAnimEnable(true);
mAnm[decideAnm].setFrame(0.0f);
mAnm[decideAnm].setForwardOnce();
}
void dLytMsgWindowSelectBtn_c::executeState_WaitDecide() {
- s32 decideAnm = field_0x9B0 + SELECT_BTN_ANIM_MESSAGE_BTN_DECIDE_OFFSET;
+ s32 decideAnm = mConfirmedBtnIdx + SELECT_BTN_ANIM_MESSAGE_BTN_DECIDE_OFFSET;
mAnm[decideAnm].play();
if (mAnm[decideAnm].isStop2()) {
mAnm[decideAnm].setAnimEnable(false);
- field_0x9B4 = field_0x9B0;
- if (field_0x99C == 1) {
+ mDecidedBtnIdx = mConfirmedBtnIdx;
+ if (mSkipOutAnim == 1) {
mStateMgr.changeState(StateID_Wait);
} else {
mStateMgr.changeState(StateID_Out);
@@ -392,7 +1031,7 @@ void dLytMsgWindowSelectBtn_c::executeState_WaitDecide() {
void dLytMsgWindowSelectBtn_c::finalizeState_WaitDecide() {}
void dLytMsgWindowSelectBtn_c::initializeState_WaitCancel() {
- field_0x9C0 = 10;
+ mWaitCancelTimer = 10;
mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setForwardOnce();
mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setToEnd2();
mAnm[SELECT_BTN_ANIM_INOUT_CURSOR].setAnimEnable(true);
@@ -401,8 +1040,8 @@ void dLytMsgWindowSelectBtn_c::initializeState_WaitCancel() {
mpSelectPanes[0]->SetAlpha(0xFF);
}
void dLytMsgWindowSelectBtn_c::executeState_WaitCancel() {
- if (--field_0x9C0 <= 0) {
- field_0x9B0 = field_0x9CC;
+ if (--mWaitCancelTimer <= 0) {
+ mConfirmedBtnIdx = mCanceledViaBBtnIdx;
mStateMgr.changeState(StateID_WaitDecide);
}
}
@@ -412,25 +1051,27 @@ void dLytMsgWindowSelectBtn_c::initializeState_Out() {
mAnm[SELECT_BTN_ANIM_OUT].setAnimEnable(true);
mAnm[SELECT_BTN_ANIM_OUT].setFrame(0.0f);
mAnm[SELECT_BTN_ANIM_OUT].setForwardOnce();
- field_0x9C8 = 0;
+ mStep = 0;
}
void dLytMsgWindowSelectBtn_c::executeState_Out() {
- switch (field_0x9C8) {
+ switch (mStep) {
case 0:
mAnm[SELECT_BTN_ANIM_OUT].play();
if (mAnm[SELECT_BTN_ANIM_OUT].isStop2()) {
- field_0x9A4 = 0;
- field_0x9C8 = 1;
+ mIsVisible = false;
+ mStep = 1;
}
break;
case 1:
mAnm[SELECT_BTN_ANIM_OUT].setAnimEnable(false);
- field_0x9B4 = field_0x9B0;
+ mDecidedBtnIdx = mConfirmedBtnIdx;
mStateMgr.changeState(StateID_Wait);
break;
}
}
-void dLytMsgWindowSelectBtn_c::finalizeState_Out() {}
+void dLytMsgWindowSelectBtn_c::finalizeState_Out() {
+ mStep = 0;
+}
bool dLytMsgWindowSelectBtn_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
@@ -467,13 +1108,14 @@ bool dLytMsgWindowSelectBtn_c::build(d2d::ResAccIf_c *resAcc) {
mpDecideTextBoxes[i] = mLyt.getTextBox(sDecideTextBoxes[i]);
}
- mpWindow = mLyt.getWindow(sWindowName);
- mpSizeBox = mLyt.getSizeBoxInWindow(sWindowName);
-
- mpWindow->UpdateSize(mpSizeBox, 32.0f);
+ for (int i = 0; i < 1; i++) {
+ mpWindow[i] = mLyt.getWindow(sWindowNames[i]);
+ mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindowNames[i]);
+ mpWindow[i]->UpdateSize(mpSizeBox[i], 32.0f);
+ }
for (int i = 0; i < SELECT_BTN_NUM_BTNS; i++) {
- mpBoundings[i] = mLyt.findPane(sBoundings[i]);
+ mpBoundings[i] = mLyt.findBounding(sBoundings[i]);
}
mpTagProcessor = nullptr;
@@ -492,7 +1134,7 @@ bool dLytMsgWindowSelectBtn_c::build(d2d::ResAccIf_c *resAcc) {
mBtnHelper.panes[7] = mpBoundings[2];
mBtnHelper.panes[8] = mpBoundings[3];
- field_0x9C4 = 0;
+ mFlipBtnLayout = 0;
mLyt.findPane("N_arrowIn_00")->SetVisible(true);
@@ -514,15 +1156,15 @@ bool dLytMsgWindowSelectBtn_c::build(d2d::ResAccIf_c *resAcc) {
mStateMgr.changeState(StateID_Wait);
- field_0x9A8 = -1;
- field_0x9B0 = -1;
+ mNumBtns = -1;
+ mConfirmedBtnIdx = -1;
- field_0x9D0 = 0;
+ field_0x9D0 = false;
field_0x9D1 = 0;
- field_0x99C = 0;
- field_0x9A0 = 0;
+ mSkipOutAnim = 0;
+ mInSound = 0;
field_0x9CE = 0;
- field_0x9CF = 1;
+ mPlayInSound = true;
return true;
}
@@ -533,8 +1175,8 @@ bool dLytMsgWindowSelectBtn_c::remove() {
mAnm[i].remove();
}
- if (mBtnHelper.field_0x52 != 0) {
- mBtnHelper.field_0x52 = 0;
+ if (mBtnHelper.mIsNavEnabled) {
+ mBtnHelper.mIsNavEnabled = false;
dPadNav::setNavEnabled(false, false);
}
@@ -543,7 +1185,40 @@ bool dLytMsgWindowSelectBtn_c::remove() {
bool dLytMsgWindowSelectBtn_c::execute() {
if (*mStateMgr.getStateID() != StateID_Wait) {
- // TODO
+ if (dLytMsgWindow_c::getInstance() != nullptr && dLytMsgWindow_c::getInstance()->getField_0x81B() != 0) {
+ mIsVisible = false;
+ mAnm[SELECT_BTN_ANIM_IN].setAnimEnable(true);
+ mAnm[SELECT_BTN_ANIM_IN].setFrame(0.0f);
+ mAnm[SELECT_BTN_ANIM_IN].setForwardOnce();
+ mAnm[SELECT_BTN_ANIM_OUT].setAnimEnable(true);
+ mAnm[SELECT_BTN_ANIM_OUT].setToEnd();
+ mAnm[SELECT_BTN_ANIM_OUT].setForwardOnce();
+ mLyt.calc();
+ mAnm[SELECT_BTN_ANIM_IN].setAnimEnable(false);
+ mAnm[SELECT_BTN_ANIM_OUT].setAnimEnable(false);
+ mStateMgr.changeState(StateID_Wait);
+ return true;
+ }
+
+ if (mCanceledViaBBtnIdx >= 0) {
+ for (int i = 0; i < SELECT_BTN_NUM_BTNS; i++) {
+ mParts[i].field_0x50 = 1;
+ if (mCanceledViaBBtnIdx == i) {
+ mParts[i].mShouldBeOn = 1;
+ } else {
+ mParts[i].mShouldBeOn = 0;
+ }
+ }
+ } else {
+ for (int i = 0; i < SELECT_BTN_NUM_BTNS; i++) {
+ mParts[i].field_0x50 = 0;
+ if (mBtnHelper.getSelectedtBtnIdx() == i) {
+ mParts[i].mShouldBeOn = 1;
+ } else {
+ mParts[i].mShouldBeOn = 0;
+ }
+ }
+ }
}
mStateMgr.executeState();
@@ -551,12 +1226,45 @@ bool dLytMsgWindowSelectBtn_c::execute() {
mParts[i].execute();
}
+ f32 angle = dLytMeter_c::getSelectBtnArrowAngle();
+ f32 length = dLytMeter_c::getSelectBtnArrowLength();
+
+ mVec3_c t1(0.0f, 0.0f, 0.0f);
+ t1.z = angle;
+ mpSelectPanes[SELECT_BTN_PANE_ITEM_ARROW_0]->SetRotate(t1);
+ // But rotate the button and the pointer back so that
+ // they point up
+ mVec3_c t2(0.0f, 0.0f, 0.0f);
+ t2.z = -angle;
+ mpSelectPanes[SELECT_BTN_PANE_ARROW_HAND]->SetRotate(t2);
+ mpSelectPanes[SELECT_BTN_PANE_BTN_0]->SetRotate(t2);
+
+ f32 frame0 = mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].getAnimDuration();
+ f32 frame1 = mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].getAnimDuration();
+
+ if (length < 0.0f) {
+ length = 0.0f;
+ }
+ if (length > 1.0f) {
+ length = 1.0f;
+ }
+
+ if (length > 0.0f) {
+ if (!mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].isEnabled()) {
+ mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].setAnimEnable(true);
+ }
+
+ if (field_0x9D0 == true && !mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].isEnabled()) {
+ mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].setAnimEnable(true);
+ }
+ }
+
if (mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].isEnabled()) {
- mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].play();
+ mAnm[SELECT_BTN_ANIM_ITEM_ARROW_0].setFrame(frame0 * length);
}
if (mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].isEnabled()) {
- mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].play();
+ mAnm[SELECT_BTN_ANIM_ITEM_ARROW_1].setFrame(frame1 * length);
}
if (mAnm[SELECT_BTN_ANIM_LOOP_REMOCON].isEnabled()) {
@@ -569,8 +1277,16 @@ bool dLytMsgWindowSelectBtn_c::execute() {
}
bool dLytMsgWindowSelectBtn_c::draw() {
- if (field_0x9A4 != 0) {
+ if (mIsVisible) {
mLyt.addToDrawList();
}
return true;
}
+
+s32 dLytMsgWindowSelectBtn_c::getSelectBtnMode() {
+ s32 mode = mNumBtns - 2;
+ if (mFlipBtnLayout == 1 && mNumBtns == 3) {
+ mode = SelectBtnHelper::MODE_3_DOWN;
+ }
+ return mode;
+}
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp
index 33fc3702..c8ccc99a 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_stone.cpp
@@ -65,8 +65,8 @@ bool dLytMsgWindowStone_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resA
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
- mpTextboxes[2]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
+ mpTextboxes[2]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_sword.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_sword.cpp
index c4bd3d31..27e725f8 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_sword.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_sword.cpp
@@ -79,7 +79,7 @@ bool dLytMsgWindowSword_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resA
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_talk.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_talk.cpp
index 30adeeab..66e226ea 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_talk.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_talk.cpp
@@ -68,7 +68,7 @@ bool dLytMsgWindowTalk_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAc
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;
diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp
index 95751633..d68e4201 100644
--- a/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp
+++ b/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp
@@ -64,7 +64,7 @@ bool dLytMsgWindowWood_c::build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAc
mpTextboxes[i]->SetTextPositionV(0);
}
- mpTextboxes[1]->set0x1F6(1);
+ mpTextboxes[1]->setIsShadow(1);
for (int i = 0; i < 1; i++) {
mNodes[i].mpLytPane = &mBtn;