union_room_chat_display through sub_812A1B8

This commit is contained in:
PikalaxALT
2020-01-25 10:47:17 -05:00
parent c99246fccf
commit f249df41e3
8 changed files with 693 additions and 1065 deletions
+1 -7
View File
@@ -13,6 +13,7 @@
#include "scanline_effect.h"
#include "strings.h"
#include "task.h"
#include "union_room_chat_display.h"
#include "data_8479668.h"
#include "constants/songs.h"
@@ -89,13 +90,6 @@ void sub_81295EC(u8 *ptr);
void sub_8129614(u8 *ptr);
u8 *sub_8129758(void);
void sub_81298F8(u8 taskId);
void sub_8129B14(void);
bool32 sub_8129B78(void);
void sub_8129B88(void);
void sub_8129BFC(void);
void sub_8129C34(u16 a0, u8 a1);
u8 sub_8129C8C(u8 a0);
s8 sub_812A568(void);
static void (*const gUnknown_845A880[])(void) = {
sub_8128640,
+656
View File
@@ -0,0 +1,656 @@
#include "global.h"
#include "gflib.h"
#include "new_menu_helpers.h"
#include "scanline_effect.h"
#include "union_room_chat.h"
#include "union_room_chat_display.h"
#include "union_room_chat_objects.h"
struct UnionRoomChat2_Unk0
{
bool32 (*unk0)(u8 *);
u8 unk4;
u8 unk5;
};
struct UnionRoomChat2
{
struct UnionRoomChat2_Unk0 unk0[3];
u16 unk18;
u16 unk1A;
u16 unk1C;
u16 unk1E;
s16 unk20;
u8 unk22[0x106];
u8 unk128[BG_SCREEN_SIZE];
u8 unk928[BG_SCREEN_SIZE];
u8 unk1128[BG_SCREEN_SIZE];
u8 unk1928[BG_SCREEN_SIZE];
u8 unk2128[0x20];
u8 unk2148[0x20];
};
struct Unk845AABC
{
u16 unk0;
bool32 (*unk4)(u8 *);
};
EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL;
void sub_8129BB8(struct UnionRoomChat2 * ptr);
void sub_8129BC4(void);
bool32 sub_8129CA0(u8 *state);
bool32 sub_8129D40(u8 *state);
bool32 sub_8129D78(u8 *state);
bool32 sub_8129DB0(u8 *state);
bool32 sub_8129E1C(u8 *state);
bool32 sub_8129E28(u8 *state);
bool32 sub_8129E74(u8 *state);
bool32 sub_8129EB8(u8 *state);
bool32 sub_8129F24(u8 *state);
bool32 sub_8129FCC(u8 *state);
bool32 sub_812A074(u8 *state);
bool32 sub_812A0B0(u8 *state);
bool32 sub_812A18C(u8 *state);
bool32 sub_812A1B8(u8 *state);
bool32 sub_812A1FC(u8 *state);
bool32 sub_812A240(u8 *state);
bool32 sub_812A294(u8 *state);
bool32 sub_812A2E4(u8 *state);
bool32 sub_812A334(u8 *state);
bool32 sub_812A378(u8 *state);
bool32 sub_812A3D0(u8 *state);
bool32 sub_812A420(u8 *state);
void sub_812A424(u8 a0, u8 a1, u8 a2);
void sub_812A51C(void);
void sub_812A544(void);
void sub_812A578(int a0, u16 a1);
void sub_812A6F4(void);
void sub_812A728(void);
void sub_812A74C(u16 a0, u16 a1, u8 a2);
void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4);
void sub_812A804(void);
bool32 sub_812A980(void);
bool32 sub_812A9C8(void);
void sub_812AA10(void);
void sub_812AA64(void);
void sub_812AA78(u16 a0, u8 *a1, u8 a2);
void sub_812AAD4(void);
void sub_812AB8C(void);
void sub_812ABD8(void);
void sub_812AC08(void);
void sub_812AC58(void);
void sub_812AC9C(void);
void sub_812ACC0(void);
void sub_812ACEC(void);
void sub_812AD04(void);
void sub_812AD20(void);
void sub_812AD50(void);
const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal");
const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal");
const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal");
const struct BgTemplate gUnknown_845AA84[] = {
{
.bg = 0,
.charBaseIndex = 0,
.mapBaseIndex = 7,
.screenSize = 0,
.paletteMode = 0,
.priority = 0,
.baseTile = 0x0000
}, {
.bg = 1,
.charBaseIndex = 3,
.mapBaseIndex = 31,
.screenSize = 0,
.paletteMode = 0,
.priority = 1,
.baseTile = 0x0000
}, {
.bg = 2,
.charBaseIndex = 2,
.mapBaseIndex = 23,
.screenSize = 0,
.paletteMode = 0,
.priority = 2,
.baseTile = 0x0000
}, {
.bg = 3,
.charBaseIndex = 1,
.mapBaseIndex = 15,
.screenSize = 0,
.paletteMode = 0,
.priority = 3,
.baseTile = 0x0001
}
};
const struct WindowTemplate gUnknown_845AA94[] = {
{
.bg = 3,
.tilemapLeft = 8,
.tilemapTop = 1,
.width = 21,
.height = 19,
.paletteNum = 15,
.baseBlock = 0x001
}, {
.bg = 1,
.tilemapLeft = 9,
.tilemapTop = 18,
.width = 15,
.height = 2,
.paletteNum = 12,
.baseBlock = 0x07a
}, {
.bg = 1,
.tilemapLeft = 0,
.tilemapTop = 2,
.width = 6,
.height = 15,
.paletteNum = 7,
.baseBlock = 0x020
}, {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 2,
.width = 7,
.height = 9,
.paletteNum = 14,
.baseBlock = 0x013
}, DUMMY_WIN_TEMPLATE
};
const struct Unk845AABC gUnknown_845AABC[] = {
{ 0, sub_8129CA0},
{ 3, sub_8129D40},
{ 4, sub_8129D78},
{ 5, sub_8129DB0},
{ 1, sub_8129E1C},
{ 6, sub_8129E28},
{ 7, sub_8129E74},
{ 8, sub_8129EB8},
{ 9, sub_8129F24},
{10, sub_8129FCC},
{11, sub_812A074},
{12, sub_812A0B0},
{ 2, sub_812A18C},
{13, sub_812A1B8},
{18, sub_812A1FC},
{19, sub_812A240},
{14, sub_812A294},
{15, sub_812A2E4},
{16, sub_812A334},
{17, sub_812A378},
{20, sub_812A3D0}
};
bool8 sub_8129B14(void)
{
gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4));
if (gUnknown_203B0E4 && sub_812AE70())
{
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84));
InitWindows(gUnknown_845AA94);
ResetTempTileDataBuffers();
sub_812AD50();
sub_8129BB8(gUnknown_203B0E4);
sub_8129BC4();
sub_8129C34(0, 0);
return TRUE;
}
else
{
return FALSE;
}
}
bool32 sub_8129B78(void)
{
return sub_8129C8C(0);
}
void sub_8129B88(void)
{
sub_812AEB0();
if (gUnknown_203B0E4)
FREE_AND_SET_NULL(gUnknown_203B0E4);
FreeAllWindowBuffers();
gScanlineEffect.state = 3;
}
void sub_8129BB8(struct UnionRoomChat2 *arg0)
{
arg0->unk18 = 0xFF;
arg0->unk1E = 0xFF;
arg0->unk1A = 0;
}
void sub_8129BC4(void)
{
int i;
if (!gUnknown_203B0E4)
return;
for (i = 0; i < 3; i++)
{
gUnknown_203B0E4->unk0[i].unk0 = sub_812A420;
gUnknown_203B0E4->unk0[i].unk4 = 0;
gUnknown_203B0E4->unk0[i].unk5 = 0;
}
}
void sub_8129BFC(void)
{
int i;
if (gUnknown_203B0E4 == NULL)
return;
for (i = 0; i < 3; i++)
{
if (gUnknown_203B0E4->unk0[i].unk4)
gUnknown_203B0E4->unk0[i].unk4 = gUnknown_203B0E4->unk0[i].unk0(&gUnknown_203B0E4->unk0[i].unk5);
}
}
void sub_8129C34(u16 arg0, u8 arg1)
{
int i;
gUnknown_203B0E4->unk0[arg1].unk0 = sub_812A420;
for (i = 0; i < NELEMS(gUnknown_845AABC); i++)
{
if (gUnknown_845AABC[i].unk0 == arg0)
{
gUnknown_203B0E4->unk0[arg1].unk0 = gUnknown_845AABC[i].unk4;
gUnknown_203B0E4->unk0[arg1].unk4 = 1;
gUnknown_203B0E4->unk0[arg1].unk5 = 0;
break;
}
}
}
bool8 sub_8129C8C(u8 arg0)
{
return gUnknown_203B0E4->unk0[arg0].unk4;
}
bool32 sub_8129CA0(u8 *state)
{
if (FreeTempTileDataBuffersIfPossible() == TRUE)
return TRUE;
switch (*state)
{
case 0:
sub_812AAD4();
sub_812AB8C();
break;
case 1:
sub_812ABD8();
break;
case 2:
sub_812AC08();
break;
case 3:
sub_812AC58();
break;
case 4:
sub_812AC9C();
break;
case 5:
sub_812ACC0();
sub_812ACEC();
sub_812AD20();
sub_812AD04();
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_812AEC8();
sub_812B048();
sub_812B100();
}
break;
default:
return FALSE;
}
(*state)++;
return TRUE;
}
bool32 sub_8129D40(u8 *state)
{
switch (*state)
{
case 0:
sub_812AA10();
CopyWindowToVram(3, 3);
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
(*state)++;
return TRUE;
}
bool32 sub_8129D78(u8 *state)
{
switch (*state)
{
case 0:
sub_812AA64();
CopyWindowToVram(3, 3);
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
(*state)++;
return TRUE;
}
bool32 sub_8129DB0(u8 *state)
{
switch (*state)
{
case 0:
sub_812AEFC(TRUE);
if (sub_812A980())
return TRUE;
sub_812A804();
CopyWindowToVram(2, 2);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
break;
case 2:
if (sub_812A9C8())
return TRUE;
sub_812AF1C();
sub_812AEFC(FALSE);
sub_812B160();
return FALSE;
}
(*state)++;
return TRUE;
}
bool32 sub_8129E1C(u8 *state)
{
sub_812AF1C();
return FALSE;
}
bool32 sub_8129E28(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(0, 0);
sub_812A424(23, 11, 1);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
(*state)++;
return TRUE;
}
bool32 sub_8129E74(u8 *state)
{
switch (*state)
{
case 0:
sub_812A6F4();
sub_812A51C();
CopyBgTilemapBufferToVram(0);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
sub_812A728();
sub_812A544();
return FALSE;
}
(*state)++;
return TRUE;
}
bool32 sub_8129EB8(u8 *state)
{
u32 var0, var1;
u8 *str;
switch (*state)
{
case 0:
sub_8129730(&var0, &var1);
sub_812A74C(var0, var1, 0);
str = sub_8129714();
sub_812A778(0, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_812B160();
return FALSE;
}
return TRUE;
}
(*state)++;
return TRUE;
}
bool32 sub_8129F24(u8 *state)
{
u16 var0;
u8 *str;
u16 length;
switch (*state)
{
case 0:
var0 = sub_8129788();
str = sub_8129758();
length = StringLength_Multibyte(str);
sub_812A74C(var0, length, PIXEL_FILL(6));
sub_812A778(var0, str, 0, 4, 5);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_812A578(1, 16);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
}
else
{
return TRUE;
}
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
sub_812AF8C(1);
else
return TRUE;
break;
case 3:
return FALSE;
}
(*state)++;
return TRUE;
}
bool32 sub_8129FCC(u8 *state)
{
u16 var0;
u8 *str;
u16 length;
switch (*state)
{
case 0:
var0 = sub_8129788();
str = sub_8129758();
length = StringLength_Multibyte(str);
sub_812A74C(var0, length, PIXEL_FILL(0));
sub_812A778(var0, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_812A6F4();
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
}
else
{
return TRUE;
}
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
sub_812AF8C(0);
sub_812A728();
}
else
{
return TRUE;
}
break;
case 3:
return FALSE;
}
(*state)++;
return TRUE;
}
bool32 sub_812A074(u8 *state)
{
switch (*state)
{
case 0:
sub_812A804();
CopyWindowToVram(2, 2);
(*state)++;
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
else
return FALSE;
}
return TRUE;
}
bool32 sub_812A0B0(u8 *state)
{
u16 var0;
u8 *str;
u8 var1;
switch (*state)
{
case 0:
var0 = gUnknown_203B0E4->unk1A;
str = sub_81297C4();
var1 = sub_81297D0();
sub_812AA78(var0, str, var1);
CopyWindowToVram(0, 2);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
if (gUnknown_203B0E4->unk1A < 9)
{
gUnknown_203B0E4->unk1A++;
*state = 4;
return FALSE;
}
else
{
gUnknown_203B0E4->unk1C = 0;
(*state)++;
}
// fall through
case 2:
ScrollWindow(0, 0, 5, PIXEL_FILL(1));
CopyWindowToVram(0, 2);
gUnknown_203B0E4->unk1C++;
(*state)++;
// fall through
case 3:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
if (gUnknown_203B0E4->unk1C < 3)
{
(*state)--;
return TRUE;
}
break;
case 4:
return FALSE;
default:
return TRUE;
}
(*state)++;
return TRUE;
}
bool32 sub_812A18C(u8 *state)
{
switch (*state)
{
case 0:
sub_812AFC0();
(*state)++;
break;
case 1:
return sub_812AFFC();
}
return TRUE;
}
bool32 sub_812A1B8(u8 *state)
{
switch (*state)
{
case 0:
sub_812A578(3, 16);
CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
(*state)++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
}
return TRUE;
}