mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 06:57:18 -05:00
more decomp of menus and combining files
This commit is contained in:
parent
204dc302be
commit
2d01cbd025
271
asm/mailbox.s
271
asm/mailbox.s
|
|
@ -1,271 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start CreateMailboxMenu
|
||||
CreateMailboxMenu:
|
||||
push {r4-r7,lr}
|
||||
ldr r4, _0802E380
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFC
|
||||
movs r1, 0
|
||||
movs r2, 0x10
|
||||
bl MemoryFill16
|
||||
ldr r1, [r4]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xBC
|
||||
ldr r0, _0802E384
|
||||
str r0, [r2]
|
||||
adds r1, 0xC0
|
||||
movs r0, 0x2
|
||||
str r0, [r1]
|
||||
bl HasNoMailinMailbox
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0802E2E6
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFC
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_0802E2E6:
|
||||
movs r5, 0x1
|
||||
ldr r1, [r4]
|
||||
movs r6, 0x1
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xC4
|
||||
ldr r0, _0802E388
|
||||
str r0, [r2]
|
||||
adds r1, 0xC8
|
||||
movs r0, 0x3
|
||||
str r0, [r1]
|
||||
bl HasNoAcceptedJobs
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0802E30A
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFE
|
||||
strh r5, [r0]
|
||||
_0802E30A:
|
||||
ldr r1, [r4]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xCC
|
||||
ldr r0, _0802E38C
|
||||
str r0, [r2]
|
||||
adds r1, 0xD0
|
||||
movs r0, 0x4
|
||||
str r0, [r1]
|
||||
bl HasNoPKMNNews
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0802E32E
|
||||
ldr r0, [r4]
|
||||
movs r1, 0x80
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r6, [r0]
|
||||
_0802E32E:
|
||||
movs r5, 0x3
|
||||
ldr r2, [r4]
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xD4
|
||||
movs r1, 0
|
||||
str r1, [r0]
|
||||
adds r0, 0x4
|
||||
str r6, [r0]
|
||||
movs r3, 0
|
||||
adds r6, r4, 0
|
||||
mov r12, r2
|
||||
mov r4, r12
|
||||
adds r4, 0xFC
|
||||
adds r2, 0xC0
|
||||
_0802E34A:
|
||||
ldrh r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _0802E35A
|
||||
ldr r1, [r2]
|
||||
mov r7, r12
|
||||
ldr r0, [r7, 0x64]
|
||||
cmp r1, r0
|
||||
beq _0802E3B2
|
||||
_0802E35A:
|
||||
adds r4, 0x2
|
||||
adds r2, 0x8
|
||||
adds r3, 0x1
|
||||
cmp r3, r5
|
||||
blt _0802E34A
|
||||
movs r3, 0
|
||||
cmp r3, r5
|
||||
bge _0802E3B2
|
||||
ldr r1, [r6]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0xFC
|
||||
ldrh r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0802E390
|
||||
adds r0, r1, 0
|
||||
adds r0, 0xC0
|
||||
ldr r0, [r0]
|
||||
str r0, [r1, 0x64]
|
||||
b _0802E3B2
|
||||
.align 2, 0
|
||||
_0802E380: .4byte gUnknown_203B304
|
||||
_0802E384: .4byte gMailboxCheckMail
|
||||
_0802E388: .4byte gMailboxJobList
|
||||
_0802E38C: .4byte gMailboxPKMNNews
|
||||
_0802E390:
|
||||
adds r3, 0x1
|
||||
cmp r3, r5
|
||||
bge _0802E3B2
|
||||
ldr r2, [r6]
|
||||
lsls r0, r3, 1
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xFC
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _0802E390
|
||||
lsls r0, r3, 3
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xC0
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r2, 0x64]
|
||||
_0802E3B2:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CreateMailboxMenu
|
||||
|
||||
thumb_func_start CreateMailActionMenu
|
||||
CreateMailActionMenu:
|
||||
push {r4-r7,lr}
|
||||
movs r5, 0
|
||||
ldr r4, _0802E3F0
|
||||
ldr r0, [r4]
|
||||
ldrb r0, [r0, 0x8]
|
||||
bl GetMailboxSlotInfo
|
||||
adds r7, r0, 0
|
||||
ldrb r0, [r7]
|
||||
cmp r0, 0x1
|
||||
bne _0802E3FC
|
||||
ldr r2, [r4]
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xBC
|
||||
ldr r0, _0802E3F4
|
||||
str r0, [r1]
|
||||
adds r1, 0x4
|
||||
movs r0, 0x6
|
||||
str r0, [r1]
|
||||
adds r1, 0x4
|
||||
ldr r0, _0802E3F8
|
||||
str r0, [r1]
|
||||
adds r1, 0x4
|
||||
movs r0, 0x7
|
||||
str r0, [r1]
|
||||
movs r5, 0x2
|
||||
b _0802E44A
|
||||
.align 2, 0
|
||||
_0802E3F0: .4byte gUnknown_203B304
|
||||
_0802E3F4: .4byte gMailActionStore
|
||||
_0802E3F8: .4byte gMailActionRead
|
||||
_0802E3FC:
|
||||
ldr r1, [r4]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xBC
|
||||
ldr r0, _0802E494
|
||||
ldr r0, [r0]
|
||||
str r0, [r2]
|
||||
adds r1, 0xC0
|
||||
movs r0, 0x5
|
||||
str r0, [r1]
|
||||
adds r0, r7, 0
|
||||
bl IsMailinJobSlot
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0802E422
|
||||
bl GetNumAcceptedJobs
|
||||
cmp r0, 0x7
|
||||
ble _0802E42C
|
||||
_0802E422:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xC0
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
str r1, [r0]
|
||||
_0802E42C:
|
||||
adds r5, 0x1
|
||||
ldr r4, _0802E498
|
||||
ldr r2, [r4]
|
||||
lsls r3, r5, 3
|
||||
adds r0, r2, 0
|
||||
adds r0, 0xBC
|
||||
adds r0, r3
|
||||
ldr r1, _0802E49C
|
||||
ldr r1, [r1]
|
||||
str r1, [r0]
|
||||
adds r2, 0xC0
|
||||
adds r2, r3
|
||||
movs r0, 0x8
|
||||
str r0, [r2]
|
||||
adds r5, 0x1
|
||||
_0802E44A:
|
||||
mov r12, r4
|
||||
mov r0, r12
|
||||
ldr r4, [r0]
|
||||
lsls r2, r5, 3
|
||||
adds r0, r4, 0
|
||||
adds r0, 0xBC
|
||||
adds r0, r2
|
||||
movs r1, 0
|
||||
str r1, [r0]
|
||||
adds r1, r4, 0
|
||||
adds r1, 0xC0
|
||||
adds r2, r1, r2
|
||||
movs r0, 0x1
|
||||
str r0, [r2]
|
||||
movs r3, 0
|
||||
cmp r3, r5
|
||||
bge _0802E486
|
||||
movs r6, 0x1
|
||||
negs r6, r6
|
||||
adds r2, r1, 0
|
||||
_0802E472:
|
||||
ldr r1, [r2]
|
||||
cmp r1, r6
|
||||
beq _0802E47E
|
||||
ldr r0, [r4, 0x68]
|
||||
cmp r1, r0
|
||||
beq _0802E4A8
|
||||
_0802E47E:
|
||||
adds r2, 0x8
|
||||
adds r3, 0x1
|
||||
cmp r3, r5
|
||||
blt _0802E472
|
||||
_0802E486:
|
||||
ldrb r0, [r7]
|
||||
cmp r0, 0x1
|
||||
bne _0802E4A0
|
||||
mov r0, r12
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x7
|
||||
b _0802E4A6
|
||||
.align 2, 0
|
||||
_0802E494: .4byte gUnknown_80D4990
|
||||
_0802E498: .4byte gUnknown_203B304
|
||||
_0802E49C: .4byte gUnknown_80D4970
|
||||
_0802E4A0:
|
||||
mov r0, r12
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x8
|
||||
_0802E4A6:
|
||||
str r0, [r1, 0x68]
|
||||
_0802E4A8:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CreateMailActionMenu
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -1,210 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start CreatePelipperBoardMenu
|
||||
CreatePelipperBoardMenu:
|
||||
push {r4-r7,lr}
|
||||
ldr r4, _0802EBDC
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFC
|
||||
movs r1, 0
|
||||
movs r2, 0x10
|
||||
bl MemoryFill16
|
||||
ldr r1, [r4]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xBC
|
||||
ldr r0, _0802EBE0
|
||||
str r0, [r2]
|
||||
adds r1, 0xC0
|
||||
movs r0, 0x2
|
||||
str r0, [r1]
|
||||
bl HasNoPelipperBoardJobs
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0802EB66
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFC
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_0802EB66:
|
||||
movs r5, 0x1
|
||||
ldr r1, [r4]
|
||||
adds r2, r1, 0
|
||||
adds r2, 0xC4
|
||||
ldr r0, _0802EBE4
|
||||
str r0, [r2]
|
||||
adds r1, 0xC8
|
||||
movs r0, 0x3
|
||||
str r0, [r1]
|
||||
bl HasNoAcceptedJobs
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0802EB88
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xFE
|
||||
strh r5, [r0]
|
||||
_0802EB88:
|
||||
movs r5, 0x2
|
||||
ldr r2, [r4]
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xCC
|
||||
movs r0, 0
|
||||
str r0, [r1]
|
||||
adds r1, 0x4
|
||||
movs r0, 0x1
|
||||
str r0, [r1]
|
||||
movs r3, 0
|
||||
adds r6, r4, 0
|
||||
mov r12, r2
|
||||
mov r4, r12
|
||||
adds r4, 0xFC
|
||||
adds r2, 0xC0
|
||||
_0802EBA6:
|
||||
ldrh r0, [r4]
|
||||
cmp r0, 0
|
||||
bne _0802EBB6
|
||||
ldr r1, [r2]
|
||||
mov r7, r12
|
||||
ldr r0, [r7, 0x64]
|
||||
cmp r1, r0
|
||||
beq _0802EC0A
|
||||
_0802EBB6:
|
||||
adds r4, 0x2
|
||||
adds r2, 0x8
|
||||
adds r3, 0x1
|
||||
cmp r3, r5
|
||||
blt _0802EBA6
|
||||
movs r3, 0
|
||||
cmp r3, r5
|
||||
bge _0802EC0A
|
||||
ldr r1, [r6]
|
||||
adds r0, r1, 0
|
||||
adds r0, 0xFC
|
||||
ldrh r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0802EBE8
|
||||
adds r0, r1, 0
|
||||
adds r0, 0xC0
|
||||
ldr r0, [r0]
|
||||
str r0, [r1, 0x64]
|
||||
b _0802EC0A
|
||||
.align 2, 0
|
||||
_0802EBDC: .4byte gPelipperBoard
|
||||
_0802EBE0: .4byte gPelipperBoard_BulletinBoard
|
||||
_0802EBE4: .4byte gPelipperBoard_JobList
|
||||
_0802EBE8:
|
||||
adds r3, 0x1
|
||||
cmp r3, r5
|
||||
bge _0802EC0A
|
||||
ldr r2, [r6]
|
||||
lsls r0, r3, 1
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xFC
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _0802EBE8
|
||||
lsls r0, r3, 3
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xC0
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r2, 0x64]
|
||||
_0802EC0A:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CreatePelipperBoardMenu
|
||||
|
||||
thumb_func_start sub_802EC10
|
||||
sub_802EC10:
|
||||
push {r4-r7,lr}
|
||||
movs r6, 0
|
||||
ldr r4, _0802ECA8
|
||||
ldr r2, [r4]
|
||||
adds r1, r2, 0
|
||||
adds r1, 0xBC
|
||||
ldr r0, _0802ECAC
|
||||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
adds r1, 0x4
|
||||
movs r0, 0x4
|
||||
str r0, [r1]
|
||||
ldrb r0, [r2, 0x8]
|
||||
bl GetPelipperBoardSlotInfo
|
||||
bl IsMailinJobSlot
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0802EC40
|
||||
bl GetNumAcceptedJobs
|
||||
cmp r0, 0x7
|
||||
ble _0802EC4A
|
||||
_0802EC40:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0xC0
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
str r1, [r0]
|
||||
_0802EC4A:
|
||||
adds r6, 0x1
|
||||
ldr r4, _0802ECA8
|
||||
ldr r5, [r4]
|
||||
lsls r1, r6, 3
|
||||
adds r2, r5, 0
|
||||
adds r2, 0xBC
|
||||
adds r3, r2, r1
|
||||
ldr r0, _0802ECB0
|
||||
ldr r0, [r0]
|
||||
str r0, [r3]
|
||||
adds r3, r5, 0
|
||||
adds r3, 0xC0
|
||||
adds r1, r3, r1
|
||||
movs r0, 0x5
|
||||
str r0, [r1]
|
||||
adds r6, 0x1
|
||||
lsls r1, r6, 3
|
||||
adds r2, r1
|
||||
movs r0, 0
|
||||
str r0, [r2]
|
||||
adds r1, r3, r1
|
||||
movs r0, 0x1
|
||||
str r0, [r1]
|
||||
movs r2, 0
|
||||
adds r7, r4, 0
|
||||
cmp r2, r6
|
||||
bge _0802EC9C
|
||||
adds r4, r5, 0
|
||||
movs r5, 0x1
|
||||
negs r5, r5
|
||||
adds r1, r3, 0
|
||||
_0802EC88:
|
||||
ldr r3, [r1]
|
||||
cmp r3, r5
|
||||
beq _0802EC94
|
||||
ldr r0, [r4, 0x68]
|
||||
cmp r3, r0
|
||||
beq _0802ECA2
|
||||
_0802EC94:
|
||||
adds r1, 0x8
|
||||
adds r2, 0x1
|
||||
cmp r2, r6
|
||||
blt _0802EC88
|
||||
_0802EC9C:
|
||||
ldr r1, [r7]
|
||||
movs r0, 0x5
|
||||
str r0, [r1, 0x68]
|
||||
_0802ECA2:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0802ECA8: .4byte gPelipperBoard
|
||||
_0802ECAC: .4byte gUnknown_80D4990
|
||||
_0802ECB0: .4byte gUnknown_80D4970
|
||||
thumb_func_end sub_802EC10
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -19,7 +19,7 @@ struct unkStruct_203B304
|
|||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
struct MenuStruct unk6C;
|
||||
struct MenuItem unkBC[8];
|
||||
struct MenuItem menuItems[8];
|
||||
u16 unkFC[8];
|
||||
struct UnkTextStruct2 unk10C[4];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ struct unkStruct_203B308
|
|||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
struct MenuStruct unk6C;
|
||||
struct MenuItem unkBC[8];
|
||||
struct MenuItem menuItems[8];
|
||||
u16 unkFC[8];
|
||||
struct UnkTextStruct2 unk10C[4];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -139,11 +139,7 @@ SECTIONS {
|
|||
asm/wonder_mail_3.o(.text);
|
||||
src/wonder_mail_802DF88.o(.text);
|
||||
src/mailbox.o(.text);
|
||||
asm/mailbox.o(.text);
|
||||
src/mailbox_1.o(.text);
|
||||
src/pelipper_board.o(.text);
|
||||
asm/pelipper_board.o(.text);
|
||||
src/pelipper_board_1.o(.text);
|
||||
src/wonder_mail_3_mid.o(.text);
|
||||
asm/wonder_mail_3_mid.o(.text);
|
||||
src/wonder_mail_3_1.o(.text);
|
||||
|
|
|
|||
378
src/mailbox.c
378
src/mailbox.c
|
|
@ -8,18 +8,21 @@
|
|||
#include "menu_input.h"
|
||||
|
||||
|
||||
extern void HandleMailboxMenu(void);
|
||||
extern void nullsub_133(void);
|
||||
extern void sub_802E578(void);
|
||||
extern void HandleMailActionMenu(void);
|
||||
extern void sub_802E73C(void);
|
||||
extern void sub_802E758(void);
|
||||
extern void sub_802E774(void);
|
||||
extern void sub_802E7D0(void);
|
||||
extern u8 *gUnknown_80D4990[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
extern bool8 IsMailinJobSlot(struct WonderMail *mail);
|
||||
|
||||
extern void sub_802E0A0(void);
|
||||
extern void sub_802E1AC(void);
|
||||
void sub_802E578(void);
|
||||
void HandleMailActionMenu(void);
|
||||
void HandleMailboxMenu(void);
|
||||
void nullsub_133(void);
|
||||
void sub_802E0A0(void);
|
||||
void sub_802E1AC(void);
|
||||
void sub_802E73C(void);
|
||||
void sub_802E758(void);
|
||||
void sub_802E774(void);
|
||||
void sub_802E7D0(void);
|
||||
|
||||
const struct UnkTextStruct2 gUnknown_80E0284 =
|
||||
{
|
||||
|
|
@ -79,13 +82,41 @@ extern void sub_802BD14(u32, u32, u32);
|
|||
extern void sub_802BE94(u32);
|
||||
extern void CreateMailMenu(void);
|
||||
extern void CreateMailAcceptedStatusBox(u32);
|
||||
extern struct WonderMail * GetMailboxSlotInfo(u32);
|
||||
extern void sub_803B35C(struct WonderMail *, u32 *);
|
||||
extern void sub_802DE84(u32 *);
|
||||
extern void InitializeJobListMenu(u32);
|
||||
extern void sub_802B640(u32, u32, u32);
|
||||
extern void sub_802B7D0(u32);
|
||||
extern void sub_802B9FC(u8);
|
||||
extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_80073B8(u32);
|
||||
extern void sub_80073E0(u32);
|
||||
extern u32 sub_802BA8C(void);
|
||||
extern void sub_802BACC(void);
|
||||
extern u8 GetPokemonNewsIndex(void);
|
||||
extern void sub_802B81C(void);
|
||||
extern u32 sub_802B720(u32);
|
||||
extern u32 sub_802C898(void);
|
||||
extern void sub_802C8F4(void);
|
||||
extern u32 sub_802DEE0(void);
|
||||
extern void sub_802DF24(void);
|
||||
extern struct WonderMail *GetMailboxSlotInfo(u8);
|
||||
extern u8 HasNoMailinMailbox(void);
|
||||
extern u32 sub_802BDEC(u32);
|
||||
extern void AcceptJob(struct WonderMail *);
|
||||
extern void sub_8096C80(void);
|
||||
extern void sub_8096D24(void);
|
||||
extern void ResetMailboxSlot(u8);
|
||||
extern void ReceivePKMNNews(u8);
|
||||
extern void sub_8096078(void);
|
||||
extern void PlayMenuSoundEffect(u32);
|
||||
extern void PlaySound(u32);
|
||||
extern void sub_802BEDC(void);
|
||||
extern u8 sub_802BE74(void);
|
||||
extern u8 HasNoAcceptedJobs(void);
|
||||
extern u8 HasNoPelipperBoardJobs(void);
|
||||
extern u8 HasNoPKMNNews(void);
|
||||
|
||||
u32 sub_802DFB0(void)
|
||||
{
|
||||
|
|
@ -165,12 +196,12 @@ void sub_802E0A0(void)
|
|||
}
|
||||
CreateMailboxMenu();
|
||||
gUnknown_203B304->unk10C[2] = gUnknown_80E029C;
|
||||
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
|
||||
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->menuItems);
|
||||
break;
|
||||
case MAIL_ACTION_MENU:
|
||||
CreateMailActionMenu();
|
||||
gUnknown_203B304->unk10C[2] = gUnknown_80E02B4;
|
||||
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
|
||||
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->menuItems);
|
||||
gUnknown_203B304->unk10C[2].unkC = 6;
|
||||
gUnknown_203B304->unk10C[3] = gUnknown_80E02CC;
|
||||
break;
|
||||
|
|
@ -190,7 +221,7 @@ void sub_802E1AC(void)
|
|||
switch(gUnknown_203B304->state)
|
||||
{
|
||||
case MAIN_MAILBOX_MENU:
|
||||
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->menuAction1, 2);
|
||||
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->menuItems, 0, gUnknown_203B304->unkFC, gUnknown_203B304->menuAction1, 2);
|
||||
break;
|
||||
case MAIL_MENU:
|
||||
sub_802BD14(0, 0, 4);
|
||||
|
|
@ -201,7 +232,7 @@ void sub_802E1AC(void)
|
|||
case MAIL_ACTION_MENU:
|
||||
CreateMailMenu();
|
||||
CreateMailAcceptedStatusBox(3);
|
||||
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->menuAction2, 2);
|
||||
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->menuItems, 0, 0, gUnknown_203B304->menuAction2, 2);
|
||||
break;
|
||||
case MAIL_INFO:
|
||||
sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC);
|
||||
|
|
@ -227,3 +258,320 @@ void sub_802E1AC(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CreateMailboxMenu(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gUnknown_203B304->unkFC,0,0x10);
|
||||
gUnknown_203B304->menuItems[0].text = gMailboxCheckMail;
|
||||
gUnknown_203B304->menuItems[0].menuAction = 2;
|
||||
if ((HasNoMailinMailbox())) {
|
||||
gUnknown_203B304->unkFC[0] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B304->menuItems[loopMax].text = gMailboxJobList;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 3;
|
||||
if(HasNoAcceptedJobs())
|
||||
{
|
||||
gUnknown_203B304->unkFC[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B304->menuItems[loopMax].text = gMailboxPKMNNews;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 4;
|
||||
if(HasNoPKMNNews())
|
||||
{
|
||||
gUnknown_203B304->unkFC[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B304->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if (gUnknown_203B304->unkFC[index] == 0) {
|
||||
if(gUnknown_203B304->menuItems[index].menuAction == gUnknown_203B304->menuAction1)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if (gUnknown_203B304->unkFC[index] == 0) {
|
||||
gUnknown_203B304->menuAction1 = gUnknown_203B304->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CreateMailActionMenu(void) {
|
||||
s32 index;
|
||||
struct WonderMail *mail;
|
||||
s32 loopMax = 0;
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
if(mail->mailType == 1)
|
||||
{
|
||||
gUnknown_203B304->menuItems[loopMax].text = gMailActionStore;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 6;
|
||||
loopMax += 1;
|
||||
gUnknown_203B304->menuItems[loopMax].text = gMailActionRead;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 7;
|
||||
loopMax += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_203B304->menuItems[loopMax].text = *gUnknown_80D4990; // Accept
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 5;
|
||||
|
||||
if(IsMailinJobSlot(mail) || GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS)
|
||||
{
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = -1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B304->menuItems[loopMax].text = *gUnknown_80D4970; // Info
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 8;
|
||||
loopMax += 1;
|
||||
}
|
||||
gUnknown_203B304->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B304->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if (gUnknown_203B304->menuItems[index].menuAction != -1) {
|
||||
if(gUnknown_203B304->menuItems[index].menuAction == gUnknown_203B304->menuAction2)
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(mail->mailType == 1)
|
||||
gUnknown_203B304->menuAction2 = 7;
|
||||
else
|
||||
gUnknown_203B304->menuAction2 = 8;
|
||||
}
|
||||
|
||||
void HandleMailboxMenu(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
|
||||
if(!sub_8012FD8(&gUnknown_203B304->unk6C))
|
||||
{
|
||||
sub_8013114(&gUnknown_203B304->unk6C, &menuAction);
|
||||
if(menuAction != 1) gUnknown_203B304->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
// Check Mail
|
||||
case 2:
|
||||
if(!HasNoMailinMailbox())
|
||||
SetMailboxState(MAIL_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
// Job List
|
||||
case 3:
|
||||
if(!HasNoAcceptedJobs())
|
||||
SetMailboxState(JOB_LIST_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
case 4:
|
||||
if(!HasNoPKMNNews())
|
||||
SetMailboxState(PKMN_NEWS_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
case 8:
|
||||
SetMailboxState(2);
|
||||
break;
|
||||
case 1:
|
||||
SetMailboxState(MAILBOX_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E578(void)
|
||||
{
|
||||
struct WonderMail *mail;
|
||||
|
||||
switch(sub_802BDEC(1))
|
||||
{
|
||||
|
||||
case 3:
|
||||
gUnknown_203B304->mailboxIndex = sub_802BE74();
|
||||
SetMailboxState(MAIL_ACTION_MENU);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B304->mailboxIndex = sub_802BE74();
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
if(mail->mailType == 1)
|
||||
{
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_INFO);
|
||||
break;
|
||||
case 2:
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleMailActionMenu(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
struct WonderMail *mail;
|
||||
|
||||
|
||||
sub_802BDEC(0);
|
||||
if(!sub_8012FD8(&gUnknown_203B304->unk6C))
|
||||
{
|
||||
sub_8013114(&gUnknown_203B304->unk6C, &menuAction);
|
||||
if(menuAction != 1) gUnknown_203B304->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
break;
|
||||
|
||||
// Accept
|
||||
case 5:
|
||||
PlaySound(0x133);
|
||||
AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex));
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
{
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
|
||||
// Info
|
||||
case 8:
|
||||
SetMailboxState(MAIL_INFO);
|
||||
break;
|
||||
|
||||
// Store
|
||||
case 6:
|
||||
PlaySound(0x133);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
ReceivePKMNNews(mail->dungeon.floor);
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
{
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
|
||||
// Read
|
||||
case 7:
|
||||
PlayMenuSoundEffect(0);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
case 1:
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E73C(void)
|
||||
{
|
||||
switch(sub_802DEE0())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802DF24();
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E758(void)
|
||||
{
|
||||
switch(sub_802C898())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802C8F4();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E774(void)
|
||||
{
|
||||
switch(sub_802B720(1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B304->mailIndex = GetPokemonNewsIndex();
|
||||
gUnknown_203B304->fallbackState = PKMN_NEWS_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
case 2:
|
||||
sub_802B81C();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E7D0(void)
|
||||
{
|
||||
switch(sub_802BA8C())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802BACC();
|
||||
SetMailboxState(gUnknown_203B304->fallbackState);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_133(void)
|
||||
{
|
||||
}
|
||||
|
||||
void CreateMailAcceptedStatusBox(u32 r0)
|
||||
{
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
xxx_call_draw_string(3, 0, gMailAccepted, r0, 0);
|
||||
sub_8012BC4(0x12, 0xD, GetNumAcceptedJobs(), 2, 7, r0);
|
||||
xxx_call_draw_string(0x16, 0xD, gUnknown_80E0324, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
|
|
|
|||
263
src/mailbox_1.c
263
src/mailbox_1.c
|
|
@ -1,263 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "memory.h"
|
||||
#include "text.h"
|
||||
#include "menu.h"
|
||||
#include "input.h"
|
||||
#include "mailbox.h"
|
||||
#include "wonder_mail.h"
|
||||
#include "menu_input.h"
|
||||
|
||||
extern struct unkStruct_203B304 *gUnknown_203B304;
|
||||
|
||||
extern u8 gMailAccepted[];
|
||||
extern u8 gUnknown_80E0324[];
|
||||
|
||||
extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32);
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_80073B8(u32);
|
||||
extern void sub_80073E0(u32);
|
||||
extern u32 sub_802BA8C(void);
|
||||
extern void sub_802BACC(void);
|
||||
extern u8 GetPokemonNewsIndex(void);
|
||||
extern void sub_802B81C(void);
|
||||
extern u32 sub_802B720(u32);
|
||||
extern u32 sub_802C898(void);
|
||||
extern void sub_802C8F4(void);
|
||||
extern u32 sub_802DEE0(void);
|
||||
extern void sub_802DF24(void);
|
||||
extern struct WonderMail *GetMailboxSlotInfo(u8);
|
||||
extern u8 HasNoMailinMailbox(void);
|
||||
extern u32 sub_802BDEC(u32);
|
||||
extern void AcceptJob(struct WonderMail *);
|
||||
extern void sub_8096C80(void);
|
||||
extern void sub_8096D24(void);
|
||||
extern void ResetMailboxSlot(u8);
|
||||
extern void ReceivePKMNNews(u8);
|
||||
extern void sub_8096078(void);
|
||||
extern void PlayMenuSoundEffect(u32);
|
||||
extern void PlaySound(u32);
|
||||
extern void sub_802BEDC(void);
|
||||
extern u8 sub_802BE74(void);
|
||||
extern u8 HasNoAcceptedJobs(void);
|
||||
extern u8 HasNoPKMNNews(void);
|
||||
|
||||
void HandleMailboxMenu(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
|
||||
if(!sub_8012FD8(&gUnknown_203B304->unk6C))
|
||||
{
|
||||
sub_8013114(&gUnknown_203B304->unk6C, &menuAction);
|
||||
if(menuAction != 1) gUnknown_203B304->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
// Check Mail
|
||||
case 2:
|
||||
if(!HasNoMailinMailbox())
|
||||
SetMailboxState(MAIL_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
// Job List
|
||||
case 3:
|
||||
if(!HasNoAcceptedJobs())
|
||||
SetMailboxState(JOB_LIST_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
case 4:
|
||||
if(!HasNoPKMNNews())
|
||||
SetMailboxState(PKMN_NEWS_MENU);
|
||||
else
|
||||
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
|
||||
break;
|
||||
case 8:
|
||||
SetMailboxState(2);
|
||||
break;
|
||||
case 1:
|
||||
SetMailboxState(MAILBOX_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E578(void)
|
||||
{
|
||||
struct WonderMail *mail;
|
||||
|
||||
switch(sub_802BDEC(1))
|
||||
{
|
||||
|
||||
case 3:
|
||||
gUnknown_203B304->mailboxIndex = sub_802BE74();
|
||||
SetMailboxState(MAIL_ACTION_MENU);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B304->mailboxIndex = sub_802BE74();
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
if(mail->mailType == 1)
|
||||
{
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_INFO);
|
||||
break;
|
||||
case 2:
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleMailActionMenu(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
struct WonderMail *mail;
|
||||
|
||||
|
||||
sub_802BDEC(0);
|
||||
if(!sub_8012FD8(&gUnknown_203B304->unk6C))
|
||||
{
|
||||
sub_8013114(&gUnknown_203B304->unk6C, &menuAction);
|
||||
if(menuAction != 1) gUnknown_203B304->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
break;
|
||||
|
||||
// Accept
|
||||
case 5:
|
||||
PlaySound(0x133);
|
||||
AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex));
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
{
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
|
||||
// Info
|
||||
case 8:
|
||||
SetMailboxState(MAIL_INFO);
|
||||
break;
|
||||
|
||||
// Store
|
||||
case 6:
|
||||
PlaySound(0x133);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
ReceivePKMNNews(mail->dungeon.floor);
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
{
|
||||
sub_802BEDC();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
}
|
||||
else
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
|
||||
// Read
|
||||
case 7:
|
||||
PlayMenuSoundEffect(0);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
case 1:
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E73C(void)
|
||||
{
|
||||
switch(sub_802DEE0())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802DF24();
|
||||
SetMailboxState(MAIL_MENU_1);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E758(void)
|
||||
{
|
||||
switch(sub_802C898())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802C8F4();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E774(void)
|
||||
{
|
||||
switch(sub_802B720(1))
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B304->mailIndex = GetPokemonNewsIndex();
|
||||
gUnknown_203B304->fallbackState = PKMN_NEWS_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
case 2:
|
||||
sub_802B81C();
|
||||
SetMailboxState(MAIN_MAILBOX_MENU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802E7D0(void)
|
||||
{
|
||||
switch(sub_802BA8C())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802BACC();
|
||||
SetMailboxState(gUnknown_203B304->fallbackState);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_133(void)
|
||||
{
|
||||
}
|
||||
|
||||
void CreateMailAcceptedStatusBox(u32 r0)
|
||||
{
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
xxx_call_draw_string(3, 0, gMailAccepted, r0, 0);
|
||||
sub_8012BC4(0x12, 0xD, GetNumAcceptedJobs(), 2, 7, r0);
|
||||
xxx_call_draw_string(0x16, 0xD, gUnknown_80E0324, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
|
@ -1,9 +1,14 @@
|
|||
#include "global.h"
|
||||
#include "mailbox.h"
|
||||
#include "pokemon.h"
|
||||
#include "item.h"
|
||||
#include "memory.h"
|
||||
#include "text.h"
|
||||
#include "menu.h"
|
||||
#include "input.h"
|
||||
#include "wonder_mail.h"
|
||||
#include "menu_input.h"
|
||||
#include "team_inventory.h"
|
||||
#include "pelipper_board.h"
|
||||
|
||||
EWRAM_DATA_2 struct unkStruct_203B308 *gPelipperBoard = {0};
|
||||
|
|
@ -70,11 +75,37 @@ extern void sub_802C10C(u32, u32, u32);
|
|||
extern void sub_802C28C(u32);
|
||||
extern void DrawPelipperBoardJobMenu(void);
|
||||
extern void CreatePelipperAcceptedStatusBox(u32);
|
||||
extern struct WonderMail *GetPelipperBoardSlotInfo(u32);
|
||||
extern void sub_803B35C(struct WonderMail *, u32 *);
|
||||
extern void sub_802DE84(u32 *);
|
||||
extern void InitializeJobListMenu(u32);
|
||||
|
||||
extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_80073B8(u32);
|
||||
extern void sub_80073E0(u32);
|
||||
extern u32 sub_802C898(void);
|
||||
extern void sub_802C8F4(void);
|
||||
extern u32 sub_802DEE0(void);
|
||||
extern void sub_802DF24(void);
|
||||
extern struct WonderMail *GetPelipperBoardSlotInfo(u8);
|
||||
extern u8 HasNoPelipperBoardJobs(void);
|
||||
extern void sub_8096C80(void);
|
||||
extern void sub_8096D24(void);
|
||||
extern void AcceptJob(struct WonderMail*);
|
||||
extern void ResetPelipperBoardSlot(u8);
|
||||
extern void sub_80965F4(void);
|
||||
extern void sub_802C2D4(void);
|
||||
extern u32 sub_802C1E4(u32);
|
||||
extern void PlaySound(u32);
|
||||
extern u8 sub_802C26C(void);
|
||||
extern u8 HasNoAcceptedJobs(void);
|
||||
extern bool8 IsMailinJobSlot(struct WonderMail *mail);
|
||||
|
||||
extern u8 *gUnknown_80D4990[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
void SetPelipperBoardState(u32);
|
||||
|
||||
u32 sub_802E864(void)
|
||||
{
|
||||
gPelipperBoard = MemoryAlloc(sizeof(struct unkStruct_203B308), 8);
|
||||
|
|
@ -152,12 +183,12 @@ void sub_802E94C(void)
|
|||
}
|
||||
CreatePelipperBoardMenu();
|
||||
gPelipperBoard->unk10C[2] = gUnknown_80E0348;
|
||||
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC);
|
||||
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->menuItems);
|
||||
break;
|
||||
case 6:
|
||||
sub_802EC10();
|
||||
gPelipperBoard->unk10C[2] = gUnknown_80E0360;
|
||||
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC);
|
||||
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->menuItems);
|
||||
gPelipperBoard->unk10C[2].unkC = 6;
|
||||
gPelipperBoard->unk10C[3] = gUnknown_80E0378;
|
||||
break;
|
||||
|
|
@ -177,7 +208,7 @@ void sub_802EA58(void)
|
|||
switch(gPelipperBoard->state)
|
||||
{
|
||||
case MAIN_PELIPPER_BOARD_MENU:
|
||||
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, gPelipperBoard->unkFC, gPelipperBoard->menuAction1, 2);
|
||||
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->menuItems, 0, gPelipperBoard->unkFC, gPelipperBoard->menuAction1, 2);
|
||||
break;
|
||||
case 4:
|
||||
sub_802C10C(0, 0, 4);
|
||||
|
|
@ -188,7 +219,7 @@ void sub_802EA58(void)
|
|||
case 6:
|
||||
DrawPelipperBoardJobMenu();
|
||||
CreatePelipperAcceptedStatusBox(3);
|
||||
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, 0, gPelipperBoard->menuAction2, 2);
|
||||
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->menuItems, 0, 0, gPelipperBoard->menuAction2, 2);
|
||||
break;
|
||||
case PELIPPER_JOB_INFO:
|
||||
sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC);
|
||||
|
|
@ -205,3 +236,240 @@ void sub_802EA58(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CreatePelipperBoardMenu(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gPelipperBoard->unkFC,0,0x10);
|
||||
gPelipperBoard->menuItems[0].text = gPelipperBoard_BulletinBoard;
|
||||
gPelipperBoard->menuItems[0].menuAction = 2;
|
||||
if ((HasNoPelipperBoardJobs())) {
|
||||
gPelipperBoard->unkFC[0] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gPelipperBoard->menuItems[loopMax].text = gPelipperBoard_JobList;
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = 3;
|
||||
|
||||
if(HasNoAcceptedJobs())
|
||||
{
|
||||
gPelipperBoard->unkFC[loopMax] = 1;
|
||||
}
|
||||
|
||||
loopMax += 1;
|
||||
gPelipperBoard->menuItems[loopMax].text = NULL;
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if (gPelipperBoard->unkFC[index] == 0) {
|
||||
if(gPelipperBoard->menuItems[index].menuAction == gPelipperBoard->menuAction1)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if (gPelipperBoard->unkFC[index] == 0) {
|
||||
gPelipperBoard->menuAction1 = gPelipperBoard->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EC10(void) {
|
||||
|
||||
s32 index;
|
||||
s32 loopMax = 0;
|
||||
gPelipperBoard->menuItems[loopMax].text = *gUnknown_80D4990;
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = 4;
|
||||
|
||||
if((IsMailinJobSlot(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex))) || (GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS))
|
||||
{
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = -1;
|
||||
}
|
||||
|
||||
loopMax += 1;
|
||||
gPelipperBoard->menuItems[loopMax].text = *gUnknown_80D4970;
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = 5;
|
||||
loopMax += 1;
|
||||
gPelipperBoard->menuItems[loopMax].text = NULL;
|
||||
gPelipperBoard->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gPelipperBoard->menuItems[index].menuAction != -1)
|
||||
if(gPelipperBoard->menuItems[index].menuAction == gPelipperBoard->menuAction2)
|
||||
return;
|
||||
}
|
||||
|
||||
gPelipperBoard->menuAction2 = 5;
|
||||
}
|
||||
|
||||
void sub_802ECB4(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
|
||||
if(!sub_8012FD8(&gPelipperBoard->unk6C))
|
||||
{
|
||||
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
|
||||
if(menuAction != 1) gPelipperBoard->menuAction1 = menuAction;
|
||||
}
|
||||
|
||||
switch(menuAction)
|
||||
{
|
||||
// Bulletin Board
|
||||
case 2:
|
||||
if(!HasNoPelipperBoardJobs())
|
||||
SetPelipperBoardState(4);
|
||||
else
|
||||
sub_8012EA4(&gPelipperBoard->unk6C, 1);
|
||||
break;
|
||||
// Job List
|
||||
case 3:
|
||||
if(!HasNoAcceptedJobs())
|
||||
SetPelipperBoardState(PELIPPER_JOB_LIST_MENU);
|
||||
else
|
||||
sub_8012EA4(&gPelipperBoard->unk6C, 1);
|
||||
break;
|
||||
case 5:
|
||||
SetPelipperBoardState(2);
|
||||
break;
|
||||
case 1:
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802ED4C(void)
|
||||
{
|
||||
switch(sub_802C1E4(1))
|
||||
{
|
||||
case 3:
|
||||
gPelipperBoard->jobIndex = sub_802C26C();
|
||||
SetPelipperBoardState(6);
|
||||
break;
|
||||
case 4:
|
||||
gPelipperBoard->jobIndex = sub_802C26C();
|
||||
SetPelipperBoardState(7);
|
||||
break;
|
||||
case 2:
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EDBC(void)
|
||||
{
|
||||
struct WonderMail *mail;
|
||||
s32 menuAction = 0;
|
||||
|
||||
sub_802C1E4(0);
|
||||
if(!sub_8012FD8(&gPelipperBoard->unk6C))
|
||||
{
|
||||
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
|
||||
if(menuAction != 1) gPelipperBoard->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
// Accept
|
||||
case 4:
|
||||
PlaySound(0x133);
|
||||
mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex);
|
||||
switch(mail->mailType)
|
||||
{
|
||||
case 2:
|
||||
gPelipperBoard->unk4 = 1;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
case 3:
|
||||
gPelipperBoard->unk4 = 2;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
case 4:
|
||||
gPelipperBoard->unk4 = 3;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
default:
|
||||
AcceptJob(mail);
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
if(HasNoPelipperBoardJobs())
|
||||
{
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
}
|
||||
else
|
||||
SetPelipperBoardState(5);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
// Info
|
||||
case 5:
|
||||
SetPelipperBoardState(PELIPPER_JOB_INFO);
|
||||
break;
|
||||
case 1:
|
||||
SetPelipperBoardState(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EEA0(void)
|
||||
{
|
||||
switch(sub_802DEE0())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802DF24();
|
||||
SetPelipperBoardState(5);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EEBC(void)
|
||||
{
|
||||
switch(sub_802C898())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802C8F4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nullsub_134(void)
|
||||
{
|
||||
}
|
||||
|
||||
void CreatePelipperAcceptedStatusBox(u32 r0)
|
||||
{
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
xxx_call_draw_string(3, 0, gPelipperBoard_Accepted, r0, 0);
|
||||
sub_8012BC4(0x12, 0xD, GetNumAcceptedJobs(), 2, 7, r0);
|
||||
xxx_call_draw_string(0x16, 0xD, gPelipperStatusSlash, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,200 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "mailbox.h"
|
||||
#include "pokemon.h"
|
||||
#include "item.h"
|
||||
#include "memory.h"
|
||||
#include "menu.h"
|
||||
#include "text.h"
|
||||
#include "team_inventory.h"
|
||||
#include "wonder_mail.h"
|
||||
#include "menu_input.h"
|
||||
#include "pelipper_board.h"
|
||||
|
||||
extern u8 gPelipperBoard_Accepted[];
|
||||
extern u8 gPelipperStatusSlash[];
|
||||
extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32);
|
||||
extern void sub_8008C54(u32);
|
||||
extern void sub_80073B8(u32);
|
||||
extern void sub_80073E0(u32);
|
||||
extern u32 sub_802C898(void);
|
||||
extern void sub_802C8F4(void);
|
||||
extern u32 sub_802DEE0(void);
|
||||
extern void sub_802DF24(void);
|
||||
extern struct WonderMail *GetPelipperBoardSlotInfo(u8);
|
||||
extern u8 HasNoPelipperBoardJobs(void);
|
||||
extern void sub_8096C80(void);
|
||||
extern void sub_8096D24(void);
|
||||
extern void AcceptJob(struct WonderMail*);
|
||||
extern void ResetPelipperBoardSlot(u8);
|
||||
extern void sub_80965F4(void);
|
||||
extern void sub_802C2D4(void);
|
||||
extern u32 sub_802C1E4(u32);
|
||||
extern void PlaySound(u32);
|
||||
extern void SetPelipperBoardState(u32);
|
||||
extern u8 sub_802C26C(void);
|
||||
extern u8 HasNoAcceptedJobs(void);
|
||||
|
||||
void sub_802ECB4(void)
|
||||
{
|
||||
s32 menuAction = 0;
|
||||
|
||||
if(!sub_8012FD8(&gPelipperBoard->unk6C))
|
||||
{
|
||||
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
|
||||
if(menuAction != 1) gPelipperBoard->menuAction1 = menuAction;
|
||||
}
|
||||
|
||||
switch(menuAction)
|
||||
{
|
||||
// Bulletin Board
|
||||
case 2:
|
||||
if(!HasNoPelipperBoardJobs())
|
||||
SetPelipperBoardState(4);
|
||||
else
|
||||
sub_8012EA4(&gPelipperBoard->unk6C, 1);
|
||||
break;
|
||||
// Job List
|
||||
case 3:
|
||||
if(!HasNoAcceptedJobs())
|
||||
SetPelipperBoardState(PELIPPER_JOB_LIST_MENU);
|
||||
else
|
||||
sub_8012EA4(&gPelipperBoard->unk6C, 1);
|
||||
break;
|
||||
case 5:
|
||||
SetPelipperBoardState(2);
|
||||
break;
|
||||
case 1:
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802ED4C(void)
|
||||
{
|
||||
switch(sub_802C1E4(1))
|
||||
{
|
||||
case 3:
|
||||
gPelipperBoard->jobIndex = sub_802C26C();
|
||||
SetPelipperBoardState(6);
|
||||
break;
|
||||
case 4:
|
||||
gPelipperBoard->jobIndex = sub_802C26C();
|
||||
SetPelipperBoardState(7);
|
||||
break;
|
||||
case 2:
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EDBC(void)
|
||||
{
|
||||
struct WonderMail *mail;
|
||||
s32 menuAction = 0;
|
||||
|
||||
sub_802C1E4(0);
|
||||
if(!sub_8012FD8(&gPelipperBoard->unk6C))
|
||||
{
|
||||
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
|
||||
if(menuAction != 1) gPelipperBoard->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
// Accept
|
||||
case 4:
|
||||
PlaySound(0x133);
|
||||
mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex);
|
||||
switch(mail->mailType)
|
||||
{
|
||||
case 2:
|
||||
gPelipperBoard->unk4 = 1;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
case 3:
|
||||
gPelipperBoard->unk4 = 2;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
case 4:
|
||||
gPelipperBoard->unk4 = 3;
|
||||
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
|
||||
sub_80965F4();
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
|
||||
break;
|
||||
default:
|
||||
AcceptJob(mail);
|
||||
sub_8096C80();
|
||||
sub_8096D24();
|
||||
if(HasNoPelipperBoardJobs())
|
||||
{
|
||||
sub_802C2D4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
}
|
||||
else
|
||||
SetPelipperBoardState(5);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
// Info
|
||||
case 5:
|
||||
SetPelipperBoardState(PELIPPER_JOB_INFO);
|
||||
break;
|
||||
case 1:
|
||||
SetPelipperBoardState(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EEA0(void)
|
||||
{
|
||||
switch(sub_802DEE0())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802DF24();
|
||||
SetPelipperBoardState(5);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_802EEBC(void)
|
||||
{
|
||||
switch(sub_802C898())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802C8F4();
|
||||
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nullsub_134(void)
|
||||
{
|
||||
}
|
||||
|
||||
void CreatePelipperAcceptedStatusBox(u32 r0)
|
||||
{
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
xxx_call_draw_string(3, 0, gPelipperBoard_Accepted, r0, 0);
|
||||
sub_8012BC4(0x12, 0xD, GetNumAcceptedJobs(), 2, 7, r0);
|
||||
xxx_call_draw_string(0x16, 0xD, gPelipperStatusSlash, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user