through sub_8101558
This commit is contained in:
+441
-5
@@ -1,8 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "data_8479668.h"
|
||||
#include "easy_chat.h"
|
||||
#include "graphics.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "text_window.h"
|
||||
|
||||
struct Unk203A11C
|
||||
{
|
||||
@@ -13,8 +16,7 @@ struct Unk203A11C
|
||||
u8 unk7;
|
||||
s8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB[0xC1];
|
||||
u8 unkA[0xC1];
|
||||
u8 unkCC[0x202];
|
||||
u16 unk2CE;
|
||||
int unk2D0;
|
||||
@@ -69,6 +71,7 @@ bool8 sub_8100BF4(void);
|
||||
void sub_8100C5C(void);
|
||||
void sub_8100CBC(void);
|
||||
void sub_8100D24(void);
|
||||
void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow);
|
||||
void sub_8100E34(void);
|
||||
void sub_8100E7C(u8 a0);
|
||||
void sub_8100F18(u8 initialCursorPos);
|
||||
@@ -76,15 +79,21 @@ void sub_8100F44(void);
|
||||
void sub_8100FDC(void);
|
||||
void sub_8101100(u16 *buffer);
|
||||
void sub_81012CC(void);
|
||||
void sub_81012E0(u8 a0);
|
||||
void sub_81012E0(u32 a0);
|
||||
void sub_810131C(void);
|
||||
void sub_810133C(void);
|
||||
void PrintEasyChatKeyboardText(void);
|
||||
void sub_81013DC(void);
|
||||
void sub_81013EC(void);
|
||||
void sub_8101410(void);
|
||||
void sub_8101434(void);
|
||||
void sub_8101478(void);
|
||||
void sub_81014AC(u8 a0, u8 a1);
|
||||
void sub_8101558(u8 a0, u8 a1);
|
||||
void sub_81015BC(void);
|
||||
void sub_81015D4(u8 a0);
|
||||
bool8 sub_81016AC(void);
|
||||
void sub_810198C(void);
|
||||
void sub_81019B0(s16 a0, u8 a1);
|
||||
bool8 sub_8101A10(void);
|
||||
s32 sub_8101A48(void);
|
||||
@@ -243,7 +252,7 @@ const struct WindowTemplate sEasyChatWindowTemplates[] = {
|
||||
DUMMY_WIN_TEMPLATE,
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_843F8D0 = {
|
||||
const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 22,
|
||||
.tilemapTop = 9,
|
||||
@@ -254,7 +263,14 @@ const struct WindowTemplate gUnknown_843F8D0 = {
|
||||
};
|
||||
|
||||
const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}");
|
||||
const u8 gUnknown_843F8DB[] = _("{CLEAR 17}");
|
||||
const u8 sText_Clear17[] = _("{CLEAR 17}");
|
||||
|
||||
const u8 *const sEasyChatKeyboardText[] = {
|
||||
gUnknown_847A8D8,
|
||||
gUnknown_847A8FA,
|
||||
gUnknown_847A913,
|
||||
gUnknown_847A934
|
||||
};
|
||||
|
||||
bool8 sub_80FFF80(void)
|
||||
{
|
||||
@@ -981,3 +997,423 @@ bool8 sub_8100B70(void)
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8100BF4(void)
|
||||
{
|
||||
gUnknown_203ACEC = Alloc(sizeof(*gUnknown_203ACEC));
|
||||
if (!gUnknown_203ACEC)
|
||||
return FALSE;
|
||||
|
||||
gUnknown_203ACEC->unk0 = 0;
|
||||
gUnknown_203ACEC->unk2D8 = NULL;
|
||||
gUnknown_203ACEC->unk2DC = NULL;
|
||||
gUnknown_203ACEC->unk2E0 = NULL;
|
||||
gUnknown_203ACEC->unk2E4 = NULL;
|
||||
gUnknown_203ACEC->unk2E8 = NULL;
|
||||
gUnknown_203ACEC->unk2EC = NULL;
|
||||
gUnknown_203ACEC->unk2F0 = NULL;
|
||||
gUnknown_203ACEC->unk2F4 = NULL;
|
||||
gUnknown_203ACEC->unk2F8 = NULL;
|
||||
gUnknown_203ACEC->unk2FC = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8100C5C(void)
|
||||
{
|
||||
ChangeBgX(3, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
ChangeBgX(1, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgX(2, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
|
||||
}
|
||||
|
||||
void sub_8100CBC(void)
|
||||
{
|
||||
ResetPaletteFade();
|
||||
LoadPalette(gEasyChatMode_Pal, 0, 32);
|
||||
LoadPalette(gUnknown_843F76C, 1 * 16, 32);
|
||||
LoadPalette(gUnknown_843F78C, 4 * 16, 32);
|
||||
LoadPalette(gUnknown_843F874, 10 * 16, 8);
|
||||
LoadPalette(gUnknown_843F87C, 11 * 16, 10);
|
||||
LoadPalette(gUnknown_843F87C, 15 * 16, 10);
|
||||
LoadPalette(gUnknown_843F87C, 3 * 16, 10);
|
||||
}
|
||||
|
||||
void sub_8100D24(void)
|
||||
{
|
||||
int xOffset;
|
||||
const u8 *titleText = GetTitleText();
|
||||
if (!titleText)
|
||||
return;
|
||||
|
||||
xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u;
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
sub_8100DC4(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, 3);
|
||||
}
|
||||
|
||||
void sub_8100D84(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
|
||||
{
|
||||
if (fontId == 1) y += 2;
|
||||
AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
|
||||
}
|
||||
|
||||
void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow)
|
||||
{
|
||||
u8 color[3];
|
||||
if (fontId == 1) y += 2;
|
||||
color[0] = bg;
|
||||
color[1] = fg;
|
||||
color[2] = shadow;
|
||||
AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str);
|
||||
}
|
||||
|
||||
void sub_8100E34(void)
|
||||
{
|
||||
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
|
||||
TextWindow_SetUserSelectedFrame(1, 1, 0xE0);
|
||||
DrawTextBorderOuter(1, 1, 14);
|
||||
sub_8100E7C(0);
|
||||
PutWindowTilemap(1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
}
|
||||
|
||||
void sub_8100E7C(u8 arg0)
|
||||
{
|
||||
const u8 *text2 = NULL;
|
||||
const u8 *text1 = NULL;
|
||||
switch (arg0)
|
||||
{
|
||||
case 0:
|
||||
GetEasyChatInstructionsText(&text1, &text2);
|
||||
break;
|
||||
case 2:
|
||||
sub_80FFDC8(&text1, &text2);
|
||||
break;
|
||||
case 3:
|
||||
GetEasyChatConfirmText(&text1, &text2);
|
||||
break;
|
||||
case 1:
|
||||
GetEasyChatConfirmDeletionText(&text1, &text2);
|
||||
break;
|
||||
}
|
||||
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
if (text1)
|
||||
sub_8100D84(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL);
|
||||
|
||||
if (text2)
|
||||
sub_8100D84(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL);
|
||||
|
||||
CopyWindowToVram(1, 3);
|
||||
}
|
||||
|
||||
void sub_8100F18(u8 initialCursorPos)
|
||||
{
|
||||
CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos);
|
||||
}
|
||||
|
||||
void sub_8100F44(void)
|
||||
{
|
||||
u8 frameId;
|
||||
struct WindowTemplate template;
|
||||
|
||||
frameId = GetEasyChatScreenFrameId();
|
||||
template.bg = 3;
|
||||
template.tilemapLeft = sPhraseFrameDimensions[frameId].left;
|
||||
template.tilemapTop = sPhraseFrameDimensions[frameId].top;
|
||||
template.width = sPhraseFrameDimensions[frameId].width;
|
||||
template.height = sPhraseFrameDimensions[frameId].height;
|
||||
template.paletteNum = 11;
|
||||
template.baseBlock = 0x060;
|
||||
gUnknown_203ACEC->windowId = AddWindow(&template);
|
||||
PutWindowTilemap(gUnknown_203ACEC->windowId);
|
||||
}
|
||||
|
||||
void sub_8100FDC(void)
|
||||
{
|
||||
u16 *ecWord;
|
||||
u8 numColumns, numRows;
|
||||
u8 *str;
|
||||
u8 frameId;
|
||||
int i, j, k;
|
||||
|
||||
ecWord = GetEasyChatWordBuffer();
|
||||
numColumns = GetNumColumns();
|
||||
numRows = GetNumRows();
|
||||
frameId = GetEasyChatScreenFrameId();
|
||||
FillWindowPixelBuffer(gUnknown_203ACEC->windowId, PIXEL_FILL(1));
|
||||
for (i = 0; i < numRows; i++)
|
||||
{
|
||||
str = gUnknown_203ACEC->unkA;
|
||||
str[0] = EOS;
|
||||
str = StringAppend(str, sText_Clear17);
|
||||
for (j = 0; j < numColumns; j++)
|
||||
{
|
||||
if (*ecWord != 0xFFFF)
|
||||
{
|
||||
str = CopyEasyChatWord(str, *ecWord);
|
||||
ecWord++;
|
||||
}
|
||||
else
|
||||
{
|
||||
str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_RED);
|
||||
ecWord++;
|
||||
for (k = 0; k < 7; k++)
|
||||
{
|
||||
*str++ = CHAR_EXTRA_EMOJI;
|
||||
*str++ = 9;
|
||||
}
|
||||
|
||||
str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GREY);
|
||||
}
|
||||
|
||||
str = StringAppend(str, sText_Clear17);
|
||||
if (frameId == 2)
|
||||
{
|
||||
if (j == 0 && i == 4)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*str = EOS;
|
||||
sub_8100D84(gUnknown_203ACEC->windowId, 1, gUnknown_203ACEC->unkA, 0, i * 16, TEXT_SPEED_FF, NULL);
|
||||
}
|
||||
|
||||
CopyWindowToVram(gUnknown_203ACEC->windowId, 3);
|
||||
}
|
||||
|
||||
void sub_8101100(u16 *tilemap)
|
||||
{
|
||||
u8 frameId;
|
||||
int right, bottom;
|
||||
int x, y;
|
||||
|
||||
frameId = GetEasyChatScreenFrameId();
|
||||
CpuFastFill(0, tilemap, BG_SCREEN_SIZE);
|
||||
if (frameId == 2)
|
||||
{
|
||||
right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
|
||||
bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
|
||||
for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++)
|
||||
{
|
||||
x = sPhraseFrameDimensions[frameId].left - 1;
|
||||
tilemap[y * 32 + x] = 0x1005;
|
||||
x++;
|
||||
for (; x < right; x++)
|
||||
tilemap[y * 32 + x] = 0x1000;
|
||||
|
||||
tilemap[y* 32 + x] = 0x1007;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
y = sPhraseFrameDimensions[frameId].top - 1;
|
||||
x = sPhraseFrameDimensions[frameId].left - 1;
|
||||
right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
|
||||
bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
|
||||
tilemap[y * 32 + x] = 0x1001;
|
||||
x++;
|
||||
for (; x < right; x++)
|
||||
tilemap[y * 32 + x] = 0x1002;
|
||||
|
||||
tilemap[y * 32 + x] = 0x1003;
|
||||
y++;
|
||||
for (; y < bottom; y++)
|
||||
{
|
||||
x = sPhraseFrameDimensions[frameId].left - 1;
|
||||
tilemap[y * 32 + x] = 0x1005;
|
||||
x++;
|
||||
for (; x < right; x++)
|
||||
tilemap[y * 32 + x] = 0x1000;
|
||||
|
||||
tilemap[y* 32 + x] = 0x1007;
|
||||
}
|
||||
|
||||
x = sPhraseFrameDimensions[frameId].left - 1;
|
||||
tilemap[y * 32 + x] = 0x1009;
|
||||
x++;
|
||||
for (; x < right; x++)
|
||||
tilemap[y * 32 + x] = 0x100A;
|
||||
|
||||
tilemap[y * 32 + x] = 0x100B;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81012CC(void)
|
||||
{
|
||||
PutWindowTilemap(2);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
}
|
||||
|
||||
void sub_81012E0(u32 arg0)
|
||||
{
|
||||
sub_810198C();
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(1));
|
||||
switch (arg0)
|
||||
{
|
||||
case 0:
|
||||
sub_810133C();
|
||||
break;
|
||||
case 1:
|
||||
PrintEasyChatKeyboardText();
|
||||
break;
|
||||
case 2:
|
||||
sub_81013DC();
|
||||
break;
|
||||
}
|
||||
|
||||
CopyWindowToVram(2, 2);
|
||||
}
|
||||
|
||||
void sub_810131C(void)
|
||||
{
|
||||
if (!sub_80FFE1C())
|
||||
sub_81012E0(0);
|
||||
else
|
||||
sub_81012E0(1);
|
||||
}
|
||||
|
||||
void sub_810133C(void)
|
||||
{
|
||||
int i;
|
||||
int x, y;
|
||||
|
||||
i = 0;
|
||||
y = 96;
|
||||
while (1)
|
||||
{
|
||||
for (x = 0; x < 2; x++)
|
||||
{
|
||||
u8 groupId = GetSelectedGroupByIndex(i++);
|
||||
if (groupId == EC_NUM_GROUPS)
|
||||
{
|
||||
sub_81019B0(sub_80FFE28(), 0);
|
||||
return;
|
||||
}
|
||||
|
||||
sub_8100D84(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL);
|
||||
}
|
||||
|
||||
y += 16;
|
||||
}
|
||||
}
|
||||
|
||||
void PrintEasyChatKeyboardText(void)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++)
|
||||
sub_8100D84(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL);
|
||||
}
|
||||
|
||||
void sub_81013DC(void)
|
||||
{
|
||||
sub_81014AC(0, 4);
|
||||
}
|
||||
|
||||
void sub_81013EC(void)
|
||||
{
|
||||
u8 var0 = sub_80FFE48() + 3;
|
||||
sub_8101558(var0, 1);
|
||||
sub_81014AC(var0, 1);
|
||||
}
|
||||
|
||||
void sub_8101410(void)
|
||||
{
|
||||
u8 var0 = sub_80FFE48();
|
||||
sub_8101558(var0, 1);
|
||||
sub_81014AC(var0, 1);
|
||||
}
|
||||
|
||||
void sub_8101434(void)
|
||||
{
|
||||
u8 var0 = sub_80FFE48();
|
||||
u8 var1 = var0 + 4;
|
||||
u8 var2 = sub_80FFE54() + 1;
|
||||
if (var1 > var2)
|
||||
var1 = var2;
|
||||
|
||||
if (var0 < var1)
|
||||
{
|
||||
u8 var3 = var1 - var0;
|
||||
sub_8101558(var0, var3);
|
||||
sub_81014AC(var0, var3);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8101478(void)
|
||||
{
|
||||
u8 var0 = sub_80FFE48();
|
||||
u8 var1 = sub_8101A48();
|
||||
if (var0 < var1)
|
||||
{
|
||||
u8 var2 = var1 - var0;
|
||||
sub_8101558(var0, var2);
|
||||
sub_81014AC(var0, var2);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81014AC(u8 arg0, u8 arg1)
|
||||
{
|
||||
int i, j;
|
||||
u16 easyChatWord;
|
||||
u8 *str;
|
||||
int y;
|
||||
u8 y_;
|
||||
int var0;
|
||||
|
||||
var0 = arg0 * 2;
|
||||
y = (arg0 * 16 + 96) & 0xFF;
|
||||
|
||||
for (i = 0; i < arg1; i++)
|
||||
{
|
||||
for (j = 0; j < 2; j++)
|
||||
{
|
||||
// FIXME: Dumb trick needed to match
|
||||
y_ = y << 18 >> 18;
|
||||
easyChatWord = GetDisplayedWordByIndex(var0++);
|
||||
if (easyChatWord != 0xFFFF)
|
||||
{
|
||||
|
||||
CopyEasyChatWordPadded(gUnknown_203ACEC->unkCC, easyChatWord, 0);
|
||||
|
||||
sub_8100D84(2, 1, gUnknown_203ACEC->unkCC, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL);
|
||||
}
|
||||
}
|
||||
y += 16;
|
||||
|
||||
}
|
||||
|
||||
CopyWindowToVram(2, 2);
|
||||
}
|
||||
|
||||
void sub_8101558(u8 arg0, u8 arg1)
|
||||
{
|
||||
int y;
|
||||
int var0;
|
||||
int var1;
|
||||
int var2;
|
||||
|
||||
y = (arg0 * 16 + 96) & 0xFF;
|
||||
var2 = arg1 * 16;
|
||||
var0 = y + var2;
|
||||
if (var0 > 255)
|
||||
{
|
||||
var1 = var0 - 256;
|
||||
var2 = 256 - y;
|
||||
}
|
||||
else
|
||||
{
|
||||
var1 = 0;
|
||||
}
|
||||
|
||||
FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2);
|
||||
if (var1)
|
||||
FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1215,7 +1215,7 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.
|
||||
const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal");
|
||||
const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz");
|
||||
|
||||
const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
|
||||
const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
|
||||
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz");
|
||||
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user