union_room_chat through sub_81287B4

This commit is contained in:
PikalaxALT
2020-01-23 16:52:41 -05:00
parent 85e5c57e8c
commit 4ff5769f42
8 changed files with 361 additions and 600 deletions
-587
View File
@@ -5,593 +5,6 @@
.text
thumb_func_start sub_8128420
sub_8128420: @ 8128420
push {r4,lr}
ldr r4, _08128450 @ =gUnknown_203B0E0
movs r0, 0xDC
lsls r0, 1
bl Alloc
str r0, [r4]
bl sub_812845C
ldr r1, _08128454 @ =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
bl sub_812B4AC
movs r0, 0
bl SetVBlankCallback
ldr r0, _08128458 @ =c2_081284E0
bl SetMainCallback2
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08128450: .4byte gUnknown_203B0E0
_08128454: .4byte gKeyRepeatStartDelay
_08128458: .4byte c2_081284E0
thumb_func_end sub_8128420
thumb_func_start sub_812845C
sub_812845C: @ 812845C
push {r4-r7,lr}
adds r4, r0, 0
movs r5, 0
movs r0, 0
strh r0, [r4, 0x4]
strh r0, [r4, 0x6]
strb r5, [r4, 0x10]
strb r5, [r4, 0x11]
strb r5, [r4, 0x12]
strb r5, [r4, 0x14]
strb r5, [r4, 0x15]
strb r5, [r4, 0x16]
movs r0, 0xFF
strb r0, [r4, 0x1A]
bl GetLinkPlayerCount
strb r0, [r4, 0xD]
bl GetMultiplayerId
strb r0, [r4, 0x13]
strb r5, [r4, 0x17]
strb r5, [r4, 0x18]
movs r1, 0xC8
lsls r1, 1
adds r0, r4, r1
bl sub_8129560
ldr r7, _081284B4 @ =gSaveBlock1Ptr
ldr r6, _081284B8 @ =0x00003ad4
adds r4, 0xB9
movs r5, 0x9
_0812849A:
ldr r1, [r7]
adds r1, r6
adds r0, r4, 0
bl StringCopy
adds r6, 0x15
adds r4, 0x15
subs r5, 0x1
cmp r5, 0
bge _0812849A
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_081284B4: .4byte gSaveBlock1Ptr
_081284B8: .4byte 0x00003ad4
thumb_func_end sub_812845C
thumb_func_start sub_81284BC
sub_81284BC: @ 81284BC
push {r4,lr}
ldr r4, _081284DC @ =gUnknown_203B0E0
ldr r0, [r4]
ldrb r0, [r0, 0xE]
bl DestroyTask
ldr r0, [r4]
ldrb r0, [r0, 0xF]
bl DestroyTask
ldr r0, [r4]
bl Free
pop {r4}
pop {r0}
bx r0
.align 2, 0
_081284DC: .4byte gUnknown_203B0E0
thumb_func_end sub_81284BC
thumb_func_start c2_081284E0
c2_081284E0: @ 81284E0
push {r4-r6,lr}
sub sp, 0x4
ldr r0, _081284FC @ =gMain
movs r1, 0x87
lsls r1, 3
adds r6, r0, r1
ldrb r0, [r6]
cmp r0, 0x1
beq _08128518
cmp r0, 0x1
bgt _08128500
cmp r0, 0
beq _08128506
b _08128598
.align 2, 0
_081284FC: .4byte gMain
_08128500:
cmp r0, 0x2
beq _08128554
b _08128598
_08128506:
bl ResetTasks
bl ResetSpriteData
bl FreeAllSpritePalettes
bl sub_8129B14
b _08128548
_08128518:
bl sub_8129BFC
bl sub_8129B78
adds r5, r0, 0
cmp r5, 0
bne _08128598
movs r4, 0x1
negs r4, r4
adds r0, r4, 0
movs r1, 0x10
movs r2, 0
bl BlendPalettes
str r5, [sp]
adds r0, r4, 0
adds r1, r4, 0
movs r2, 0x10
movs r3, 0
bl BeginNormalPaletteFade
ldr r0, _08128550 @ =sub_81285B4
bl SetVBlankCallback
_08128548:
ldrb r0, [r6]
adds r0, 0x1
strb r0, [r6]
b _08128598
.align 2, 0
_08128550: .4byte sub_81285B4
_08128554:
bl UpdatePaletteFade
ldr r0, _081285A0 @ =gPaletteFade
ldrb r1, [r0, 0x7]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _08128598
ldr r0, _081285A4 @ =sub_81285CC
bl SetMainCallback2
movs r0, 0x11
movs r1, 0
bl SetQuestLogEvent
ldr r0, _081285A8 @ =sub_81285E8
movs r1, 0x8
bl CreateTask
ldr r4, _081285AC @ =gUnknown_203B0E0
ldr r1, [r4]
strb r0, [r1, 0xE]
ldr r0, _081285B0 @ =sub_81298F8
movs r1, 0x7
bl CreateTask
ldr r1, [r4]
strb r0, [r1, 0xF]
bl LoadWirelessStatusIndicatorSpriteGfx
movs r0, 0xE8
movs r1, 0x96
bl CreateWirelessStatusIndicatorSprite
_08128598:
add sp, 0x4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_081285A0: .4byte gPaletteFade
_081285A4: .4byte sub_81285CC
_081285A8: .4byte sub_81285E8
_081285AC: .4byte gUnknown_203B0E0
_081285B0: .4byte sub_81298F8
thumb_func_end c2_081284E0
thumb_func_start sub_81285B4
sub_81285B4: @ 81285B4
push {lr}
bl TransferPlttBuffer
bl LoadOam
bl ProcessSpriteCopyRequests
bl ScanlineEffect_InitHBlankDmaTransfer
pop {r0}
bx r0
thumb_func_end sub_81285B4
thumb_func_start sub_81285CC
sub_81285CC: @ 81285CC
push {lr}
bl RunTasks
bl sub_8129BFC
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
pop {r0}
bx r0
thumb_func_end sub_81285CC
thumb_func_start sub_81285E8
sub_81285E8: @ 81285E8
push {r4,lr}
ldr r4, _08128600 @ =gUnknown_203B0E0
ldr r0, [r4]
ldrb r0, [r0, 0x17]
cmp r0, 0x2
beq _0812860E
cmp r0, 0x2
bgt _08128604
cmp r0, 0x1
beq _0812860A
b _0812861E
.align 2, 0
_08128600: .4byte gUnknown_203B0E0
_08128604:
cmp r0, 0x3
beq _08128612
b _0812861E
_0812860A:
movs r0, 0x6
b _08128614
_0812860E:
movs r0, 0x7
b _08128614
_08128612:
movs r0, 0x8
_08128614:
bl sub_8129218
ldr r1, [r4]
movs r0, 0
strb r0, [r1, 0x17]
_0812861E:
ldr r1, _08128638 @ =gUnknown_845A880
ldr r0, _0812863C @ =gUnknown_203B0E0
ldr r0, [r0]
ldrh r0, [r0, 0x4]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
bl _call_via_r0
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08128638: .4byte gUnknown_845A880
_0812863C: .4byte gUnknown_203B0E0
thumb_func_end sub_81285E8
thumb_func_start sub_8128640
sub_8128640: @ 8128640
push {r4,lr}
ldr r4, _08128658 @ =gUnknown_203B0E0
ldr r0, [r4]
ldrh r1, [r0, 0x6]
cmp r1, 0x1
beq _08128674
cmp r1, 0x1
bgt _0812865C
cmp r1, 0
beq _08128662
b _081286BC
.align 2, 0
_08128658: .4byte gUnknown_203B0E0
_0812865C:
cmp r1, 0x2
beq _081286AC
b _081286BC
_08128662:
movs r1, 0xC8
lsls r1, 1
adds r0, r1
bl sub_8129568
ldr r1, [r4]
ldrh r0, [r1, 0x6]
adds r0, 0x1
strh r0, [r1, 0x6]
_08128674:
bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _081286BC
bl sub_80FBA1C
cmp r0, 0
bne _081286BC
ldr r4, _081286A8 @ =gUnknown_203B0E0
ldr r1, [r4]
movs r0, 0xC8
lsls r0, 1
adds r1, r0
movs r0, 0
movs r2, 0x28
bl SendBlock
lsls r0, 24
cmp r0, 0
beq _081286BC
ldr r1, [r4]
ldrh r0, [r1, 0x6]
adds r0, 0x1
strh r0, [r1, 0x6]
b _081286BC
.align 2, 0
_081286A8: .4byte gUnknown_203B0E0
_081286AC:
bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _081286BC
movs r0, 0x1
bl sub_8129218
_081286BC:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8128640
thumb_func_start sub_81286C4
sub_81286C4: @ 81286C4
push {r4,r5,lr}
ldr r5, _081286D8 @ =gUnknown_203B0E0
ldr r3, [r5]
ldrh r0, [r3, 0x6]
cmp r0, 0
beq _081286DC
cmp r0, 0x1
beq _0812878A
b _081287AC
.align 2, 0
_081286D8: .4byte gUnknown_203B0E0
_081286DC:
ldr r1, _081286F8 @ =gMain
ldrh r2, [r1, 0x2E]
movs r0, 0x8
ands r0, r2
cmp r0, 0
beq _081286FC
ldrb r0, [r3, 0x15]
cmp r0, 0
beq _081287AC
movs r0, 0x4
bl sub_8129218
b _081287AC
.align 2, 0
_081286F8: .4byte gMain
_081286FC:
movs r0, 0x4
ands r0, r2
cmp r0, 0
beq _0812870C
movs r0, 0x2
bl sub_8129218
b _081287AC
_0812870C:
ldrh r1, [r1, 0x30]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _08128738
ldrb r0, [r3, 0x15]
cmp r0, 0
beq _08128730
bl sub_81293AC
movs r0, 0x8
movs r1, 0
bl sub_8129C34
ldr r1, [r5]
movs r0, 0x1
strh r0, [r1, 0x6]
b _081287AC
_08128730:
movs r0, 0x3
bl sub_8129218
b _081287AC
_08128738:
movs r4, 0x1
adds r0, r4, 0
ands r0, r2
cmp r0, 0
beq _08128754
bl sub_81292D8
movs r0, 0x8
movs r1, 0
bl sub_8129C34
movs r0, 0x2
movs r1, 0x1
b _08128780
_08128754:
movs r0, 0x80
lsls r0, 1
ands r0, r2
cmp r0, 0
beq _08128774
ldrb r0, [r3, 0x10]
cmp r0, 0x3
beq _0812876C
bl sub_81293D8
movs r0, 0x8
b _0812877E
_0812876C:
movs r0, 0x5
bl sub_8129218
b _081287AC
_08128774:
bl sub_8129228
cmp r0, 0
beq _081287AC
movs r0, 0x1
_0812877E:
movs r1, 0
_08128780:
bl sub_8129C34
ldr r0, [r5]
strh r4, [r0, 0x6]
b _081287AC
_0812878A:
movs r0, 0
bl sub_8129C8C
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
movs r0, 0x1
bl sub_8129C8C
lsls r0, 24
lsrs r1, r0, 24
cmp r4, 0
bne _081287AC
cmp r1, 0
bne _081287AC
ldr r0, [r5]
strh r1, [r0, 0x6]
_081287AC:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_81286C4
thumb_func_start sub_81287B4
sub_81287B4: @ 81287B4
push {r4-r6,lr}
ldr r0, _081287CC @ =gUnknown_203B0E0
ldr r0, [r0]
ldrh r0, [r0, 0x6]
cmp r0, 0x4
bls _081287C2
b _081288CE
_081287C2:
lsls r0, 2
ldr r1, _081287D0 @ =_081287D4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_081287CC: .4byte gUnknown_203B0E0
_081287D0: .4byte _081287D4
.align 2, 0
_081287D4:
.4byte _081287E8
.4byte _081287F2
.4byte _08128810
.4byte _0812889C
.4byte _081288B0
_081287E8:
movs r0, 0x3
movs r1, 0
bl sub_8129C34
b _081287FE
_081287F2:
movs r0, 0
bl sub_8129C8C
lsls r0, 24
cmp r0, 0
bne _081288CE
_081287FE:
ldr r0, _0812880C @ =gUnknown_203B0E0
ldr r1, [r0]
ldrh r0, [r1, 0x6]
adds r0, 0x1
strh r0, [r1, 0x6]
b _081288CE
.align 2, 0
_0812880C: .4byte gUnknown_203B0E0
_08128810:
bl Menu_ProcessInput
lsls r0, 24
asrs r0, 8
lsrs r6, r0, 16
asrs r4, r0, 16
movs r0, 0x2
negs r0, r0
cmp r4, r0
beq _08128848
adds r0, 0x1
cmp r4, r0
beq _08128868
movs r0, 0x4
movs r1, 0
bl sub_8129C34
ldr r5, _08128844 @ =gUnknown_203B0E0
ldr r2, [r5]
ldrb r0, [r2, 0x10]
cmp r0, r4
beq _08128870
cmp r4, 0x3
ble _08128880
b _08128870
.align 2, 0
_08128844: .4byte gUnknown_203B0E0
_08128848:
ldr r0, _08128864 @ =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x4
ands r0, r1
cmp r0, 0
beq _081288CE
movs r0, 0x5
bl PlaySE
movs r0, 0x1
bl Menu_MoveCursor
b _081288CE
.align 2, 0
_08128864: .4byte gMain
_08128868:
movs r0, 0x4
movs r1, 0
bl sub_8129C34
_08128870:
ldr r0, _0812887C @ =gUnknown_203B0E0
ldr r1, [r0]
movs r0, 0x3
strh r0, [r1, 0x6]
b _081288CE
.align 2, 0
_0812887C: .4byte gUnknown_203B0E0
_08128880:
movs r1, 0
strb r1, [r2, 0x11]
ldr r0, [r5]
strb r1, [r0, 0x12]
movs r0, 0x5
movs r1, 0x1
bl sub_8129C34
ldr r0, [r5]
strb r6, [r0, 0x10]
ldr r1, [r5]
movs r0, 0x4
strh r0, [r1, 0x6]
b _081288CE
_0812889C:
movs r0, 0
bl sub_8129C8C
lsls r0, 24
cmp r0, 0
bne _081288CE
movs r0, 0x1
bl sub_8129218
b _081288CE
_081288B0:
movs r0, 0
bl sub_8129C8C
lsls r0, 24
cmp r0, 0
bne _081288CE
movs r0, 0x1
bl sub_8129C8C
lsls r0, 24
cmp r0, 0
bne _081288CE
movs r0, 0x1
bl sub_8129218
_081288CE:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_81287B4
thumb_func_start sub_81288D4
sub_81288D4: @ 81288D4
push {r4,lr}
-12
View File
@@ -6,18 +6,6 @@
.section .rodata
.align 2
gUnknown_845A880:: @ 845A880
.4byte sub_8128640
.4byte sub_81286C4
.4byte sub_81287B4
.4byte sub_81288D4
.4byte sub_8128DA4
.4byte sub_8128E78
.4byte sub_8128AA0
.4byte sub_8128C04
.4byte sub_8128CA8
.4byte sub_8128FB8
gUnknown_845A8A8:: @ 845A8A8
.byte 0x09, 0x09, 0x09, 0x09
+4 -1
View File
@@ -718,6 +718,8 @@ struct TrainerNameRecord
u8 trainerName[PLAYER_NAME_LENGTH];
};
#define UNION_ROOM_KB_ROW_COUNT 10
struct SaveBlock1
{
/*0x0000*/ struct Coords16 pos;
@@ -772,7 +774,8 @@ struct SaveBlock1
/*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
/*0x3A94*/ u8 filler3A94[0x114];
/*0x3A94*/ u8 filler3A94[0x40];
/*0x3AD4*/ u8 unk3AD4[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon;
/*0x3D24*/ u8 filler3D24[0x10];
+1
View File
@@ -92,5 +92,6 @@ bool8 MoveCursor(u8 by, u8 dirn);
void HelpSystem_BackupSomeVariable(void);
void HelpSystem_RestoreSomeVariable(void);
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
void sub_812B4AC(void);
#endif //GUARD_HELP_SYSTEM_H
+1
View File
@@ -325,6 +325,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool32 sub_80FBA1C(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
+1
View File
@@ -73,5 +73,6 @@ extern const char RomHeaderGameCode[4];
extern const char RomHeaderSoftwareVersion;
extern u8 gLinkTransferringData;
extern u16 gKeyRepeatStartDelay;
#endif // GUARD_MAIN_H
+2
View File
@@ -246,6 +246,7 @@ SECTIONS {
src/union_room_battle.o(.text);
asm/pokemon_special_anim.o(.text);
src/party_menu.o(.text);
src/union_room_chat.o(.text);
asm/union_room_chat.o(.text);
src/help_system_812B1E0.o(.text);
src/quest_log_battle.o(.text);
@@ -534,6 +535,7 @@ SECTIONS {
src/union_room_message.o(.rodata);
data/pokemon_special_anim.o(.rodata);
src/party_menu.o(.rodata);
src/union_room_chat.o(.rodata);
data/union_room_chat.o(.rodata);
src/help_system_812B1E0.o(.rodata);
src/fame_checker.o(.rodata);
+352
View File
@@ -0,0 +1,352 @@
#include "global.h"
#include "gflib.h"
#include "help_system.h"
#include "link.h"
#include "link_rfu.h"
#include "list_menu.h"
#include "menu.h"
#include "quest_log.h"
#include "scanline_effect.h"
#include "task.h"
#include "constants/songs.h"
enum
{
UNION_ROOM_KB_PAGE_UPPER,
UNION_ROOM_KB_PAGE_LOWER,
UNION_ROOM_KB_PAGE_EMOJI,
UNION_ROOM_KB_PAGE_COUNT
};
struct UnionRoomChat
{
u8 filler0[0x4];
u16 unk4;
u16 unk6;
u8 filler8[0x2];
u16 unkA;
u8 fillerC[0x1];
u8 unkD;
u8 unkE;
u8 unkF;
u8 currentPage;
u8 unk11;
u8 currentRow;
u8 unk13;
u8 unk14;
u8 unk15;
u8 unk16;
u8 unk17;
u8 unk18;
u8 unk19;
u8 unk1A[0x1F];
u8 unk39[0x40];
u8 unk79[0x40];
u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21];
u8 filler18B[0x5];
u8 unk190[0x28];
};
EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL;
void sub_812845C(struct UnionRoomChat * unionRoomChat);
void c2_081284E0(void);
void sub_81285B4(void);
void sub_81285CC(void);
void sub_81285E8(u8 taskId);
void sub_8128640(void);
void sub_81286C4(void);
void sub_81287B4(void);
void sub_81288D4(void);
void sub_8128DA4(void);
void sub_8128E78(void);
void sub_8128AA0(void);
void sub_8128C04(void);
void sub_8128CA8(void);
void sub_8128FB8(void);
void sub_8129218(u16 a0);
bool32 sub_8129228(void);
void sub_81292D8(void);
void sub_81293AC(void);
void sub_81293D8(void);
void sub_8129560(u8 *ptr);
void sub_8129568(u8 *ptr);
void sub_81298F8(u8 taskId);
void sub_8129B14(void);
bool32 sub_8129B78(void);
void sub_8129BFC(void);
void sub_8129C34(u16 a0, u8 a1);
u8 sub_8129C8C(u8 a0);
static void (*const gUnknown_845A880[])(void) = {
sub_8128640,
sub_81286C4,
sub_81287B4,
sub_81288D4,
sub_8128DA4,
sub_8128E78,
sub_8128AA0,
sub_8128C04,
sub_8128CA8,
sub_8128FB8
};
void sub_8128420(void)
{
gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat));
sub_812845C(gUnknown_203B0E0);
gKeyRepeatStartDelay = 20;
sub_812B4AC();
SetVBlankCallback(NULL);
SetMainCallback2(c2_081284E0);
}
void sub_812845C(struct UnionRoomChat * unionRoomChat)
{
int i;
unionRoomChat->unk4 = 0;
unionRoomChat->unk6 = 0;
unionRoomChat->currentPage = 0;
unionRoomChat->unk11 = 0;
unionRoomChat->currentRow = 0;
unionRoomChat->unk14 = 0;
unionRoomChat->unk15 = 0;
unionRoomChat->unk16 = 0;
unionRoomChat->unk1A[0] = EOS;
unionRoomChat->unkD = GetLinkPlayerCount();
unionRoomChat->unk13 = GetMultiplayerId();
unionRoomChat->unk17 = 0;
unionRoomChat->unk18 = 0;
sub_8129560(unionRoomChat->unk190);
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3AD4[i]);
}
void sub_81284BC(void)
{
DestroyTask(gUnknown_203B0E0->unkE);
DestroyTask(gUnknown_203B0E0->unkF);
Free(gUnknown_203B0E0);
}
void c2_081284E0(void)
{
switch (gMain.state)
{
case 0:
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
sub_8129B14();
gMain.state++;
break;
case 1:
sub_8129BFC();
if (!sub_8129B78())
{
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
SetVBlankCallback(sub_81285B4);
gMain.state++;
}
break;
case 2:
UpdatePaletteFade();
if (!gPaletteFade.active)
{
SetMainCallback2(sub_81285CC);
SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL);
gUnknown_203B0E0->unkE = CreateTask(sub_81285E8, 8);
gUnknown_203B0E0->unkF = CreateTask(sub_81298F8, 7);
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(232, 150);
}
break;
}
}
void sub_81285B4(void)
{
TransferPlttBuffer();
LoadOam();
ProcessSpriteCopyRequests();
ScanlineEffect_InitHBlankDmaTransfer();
}
void sub_81285CC(void)
{
RunTasks();
sub_8129BFC();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
void sub_81285E8(u8 taskId)
{
switch (gUnknown_203B0E0->unk17)
{
case 1:
sub_8129218(6);
gUnknown_203B0E0->unk17 = 0;
break;
case 2:
sub_8129218(7);
gUnknown_203B0E0->unk17 = 0;
break;
case 3:
sub_8129218(8);
gUnknown_203B0E0->unk17 = 0;
break;
}
gUnknown_845A880[gUnknown_203B0E0->unk4]();
}
void sub_8128640(void)
{
switch (gUnknown_203B0E0->unk6)
{
case 0:
sub_8129568(gUnknown_203B0E0->unk190);
gUnknown_203B0E0->unk6++;
// fall through
case 1:
if (IsLinkTaskFinished() && !sub_80FBA1C())
{
if (SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190)))
gUnknown_203B0E0->unk6++;
}
break;
case 2:
if (IsLinkTaskFinished())
sub_8129218(1);
break;
}
}
void sub_81286C4(void)
{
bool8 var0, var1;
switch (gUnknown_203B0E0->unk6)
{
case 0:
if (JOY_NEW(START_BUTTON))
{
if (gUnknown_203B0E0->unk15)
sub_8129218(4);
}
else if (JOY_NEW(SELECT_BUTTON))
{
sub_8129218(2);
}
else if (JOY_REPT(B_BUTTON))
{
if (gUnknown_203B0E0->unk15)
{
sub_81293AC();
sub_8129C34(8, 0);
gUnknown_203B0E0->unk6 = 1;
}
else
{
sub_8129218(3);
}
}
else if (JOY_NEW(A_BUTTON))
{
sub_81292D8();
sub_8129C34(8, 0);
sub_8129C34(2, 1);
gUnknown_203B0E0->unk6 = 1;
}
else if (JOY_NEW(R_BUTTON))
{
if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
sub_81293D8();
sub_8129C34(8, 0);
gUnknown_203B0E0->unk6 = 1;
}
else
{
sub_8129218(5);
}
}
else if (sub_8129228())
{
sub_8129C34(1, 0);
gUnknown_203B0E0->unk6 = 1;
}
break;
case 1:
var0 = sub_8129C8C(0);
var1 = sub_8129C8C(1);
if (!var0 && !var1)
gUnknown_203B0E0->unk6 = 0;
break;
}
}
void sub_81287B4(void)
{
s16 input;
int var0;
switch (gUnknown_203B0E0->unk6)
{
case 0:
sub_8129C34(3, 0);
gUnknown_203B0E0->unk6++;
break;
case 1:
if (!sub_8129C8C(0))
gUnknown_203B0E0->unk6++;
break;
case 2:
input = Menu_ProcessInput();
switch (input)
{
default:
sub_8129C34(4, 0);
var0 = 1;
if (gUnknown_203B0E0->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
var0 = 0;
break;
case MENU_NOTHING_CHOSEN:
if (gMain.newKeys & SELECT_BUTTON)
{
PlaySE(SE_SELECT);
Menu_MoveCursor(1);
}
return;
case MENU_B_PRESSED:
sub_8129C34(4, 0);
gUnknown_203B0E0->unk6 = 3;
return;
}
if (!var0)
{
gUnknown_203B0E0->unk6 = 3;
return;
}
gUnknown_203B0E0->unk11 = 0;
gUnknown_203B0E0->currentRow = 0;
sub_8129C34(5, 1);
gUnknown_203B0E0->currentPage = input;
gUnknown_203B0E0->unk6 = 4;
break;
case 3:
if (!sub_8129C8C(0))
sub_8129218(1);
break;
case 4:
if (!sub_8129C8C(0) && !sub_8129C8C(1))
sub_8129218(1);
break;
}
}