summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2019-03-28 20:20:52 -0500
committerMarcus Huderle <huderlem@gmail.com>2019-03-28 20:20:52 -0500
commit519426f4e6629a1f79fa4ce5f8ffff672d25533d (patch)
treeb8839b6a0e7763eb584e456f9cefd9fcc76037f4 /src
parent8b8cc7a475d49cf590edbeb5d9763b5dd5245831 (diff)
Decompile union_room_chat through sub_8020118
Diffstat (limited to 'src')
-rw-r--r--src/text.c2
-rwxr-xr-xsrc/union_room_chat.c137
2 files changed, 132 insertions, 7 deletions
diff --git a/src/text.c b/src/text.c
index 39912b17d..43834eab4 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1615,7 +1615,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
}
}
return 2;
- case 20:
+ case EXT_CTRL_CODE_MIN_LETTER_SPACING:
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
return 2;
case EXT_CTRL_CODE_JPN:
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index df35d164c..4de15c563 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -66,7 +66,8 @@ struct UnionRoomChat2
u16 unk1A;
u16 unk1C;
u16 unk1E;
- u8 filler20[0x2148];
+ u8 filler20[0x2];
+ u8 unk22[0x2146];
};
struct Unk82F2C98
@@ -75,6 +76,18 @@ struct Unk82F2C98
bool32 (* unk4)(u8 *);
};
+struct Unk82F2D40
+{
+ const u8 *unk0;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+};
+
static void sub_801DDD0(struct UnionRoomChat *);
static void c2_081284E0(void);
static void sub_801DF20(void);
@@ -143,14 +156,14 @@ void sub_80201A4(void);
bool32 sub_8020368(void);
void sub_802093C(void);
void sub_8020B80(void);
-void sub_801FF18(int, u16);
+static void sub_801FF18(int, u16);
static void sub_801FDDC(u8, u8, u8);
-void sub_8020094(void);
+static void sub_8020094(void);
static void sub_801FEBC(void);
-void sub_80200C8(void);
+static void sub_80200C8(void);
static void sub_801FEE4(void);
-void sub_80200EC(u16, u16, u8);
-void sub_8020118(u16, u8 *, u8, u8, u16);
+static void sub_80200EC(u16, u16, u8);
+static void sub_8020118(u16, u8 *, u8, u8, u8);
void sub_80209AC(int);
void sub_8020420(u16, u8 *, u8);
void sub_80209E0(void);
@@ -164,6 +177,7 @@ extern const u8 gUnknown_082F2AA8[];
extern const struct BgTemplate gUnknown_082F2C60[4];
extern const struct WindowTemplate gUnknown_082F2C70[];
extern const struct Unk82F2C98 gUnknown_082F2C98[];
+extern const struct Unk82F2D40 gUnknown_082F2D40[];
void sub_801DD98(void)
@@ -2052,3 +2066,114 @@ static s8 sub_801FF08(void)
{
return Menu_ProcessInput();
}
+
+static void sub_801FF18(int arg0, u16 arg1)
+{
+ const u8 *str;
+ int windowId;
+ struct WindowTemplate template;
+ template.bg = 0;
+ template.tilemapLeft = 8;
+ template.tilemapTop = 16;
+ template.width = 21;
+ template.height = 4;
+ template.paletteNum = 14;
+ template.baseBlock = 0x6A;
+ if (gUnknown_082F2D40[arg0].unkA)
+ {
+ template.tilemapLeft -= 7;
+ template.width += 7;
+ }
+
+ gUnknown_02022C88->unk1E = AddWindow(&template);
+ windowId = gUnknown_02022C88->unk1E;
+ if (gUnknown_02022C88->unk1E == 0xFF)
+ return;
+
+ if (gUnknown_082F2D40[arg0].unk9)
+ {
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022C88->unk22, gUnknown_082F2D40[arg0].unk0);
+ str = gUnknown_02022C88->unk22;
+ }
+ else
+ {
+ str = gUnknown_082F2D40[arg0].unk0;
+ }
+
+ ChangeBgY(0, arg1 * 256, 0);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (gUnknown_082F2D40[arg0].unk4 == 1)
+ {
+ sub_80989E0(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 1,
+ str,
+ gUnknown_082F2D40[arg0].unk5 + 8,
+ gUnknown_082F2D40[arg0].unk6 + 8,
+ TEXT_SPEED_FF,
+ NULL,
+ gUnknown_082F2D40[arg0].unk7,
+ gUnknown_082F2D40[arg0].unk8);
+ }
+ else
+ {
+ sub_8098858(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 1,
+ str,
+ gUnknown_082F2D40[arg0].unk5,
+ gUnknown_082F2D40[arg0].unk6,
+ TEXT_SPEED_FF,
+ NULL,
+ gUnknown_082F2D40[arg0].unk7,
+ gUnknown_082F2D40[arg0].unk8);
+ }
+
+ gUnknown_02022C88->unk1E = windowId;
+}
+
+static void sub_8020094(void)
+{
+ if (gUnknown_02022C88->unk1E != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk1E, FALSE);
+ ClearWindowTilemap(gUnknown_02022C88->unk1E);
+ }
+
+ ChangeBgY(0, 0, 0);
+}
+
+static void sub_80200C8(void)
+{
+ if (gUnknown_02022C88->unk1E != 0xFF)
+ {
+ RemoveWindow(gUnknown_02022C88->unk1E);
+ gUnknown_02022C88->unk1E = 0xFF;
+ }
+}
+
+static void sub_80200EC(u16 x, u16 width, u8 fillValue)
+{
+ FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
+}
+
+static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
+{
+ u8 *str2;
+ u8 sp[38];
+ if (fillValue)
+ sub_80200EC(x, sub_801F198() - x, fillValue);
+
+ sp[0] = fillValue;
+ sp[1] = arg3;
+ sp[2] = arg4;
+ str2 = &sp[4];
+ str2[0] = EXT_CTRL_CODE_BEGIN;
+ str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ str2[2] = 8;
+ StringCopy(&str2[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2);
+}