finish out wonder_mail_5

This commit is contained in:
Seth Barberee
2023-01-20 10:49:56 -08:00
parent 4a7e7807c4
commit 24d4a92a08
10 changed files with 123 additions and 180 deletions

View File

@@ -1,142 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8030E48
sub_8030E48:
push {r4-r6,lr}
mov r6, r8
push {r6}
sub sp, 0x15C
ldr r3, _08030EA8
ldr r4, _08030EAC
ldr r2, [r4]
ldrb r1, [r2, 0xC]
lsls r0, r1, 1
adds r0, r1
lsls r0, 4
ldr r1, [r3]
adds r5, r1, r0
ldr r0, [r2, 0x10]
bl sub_80073B8
ldr r0, [r4]
ldr r0, [r0, 0x10]
str r0, [sp, 0x4]
add r1, sp, 0x44
movs r2, 0
movs r0, 0x7
strb r0, [r1]
mov r0, sp
adds r0, 0x46
strb r2, [r0]
add r0, sp, 0x48
strb r2, [r0]
adds r0, r5, 0x4
str r0, [sp, 0xC]
adds r0, 0x10
str r0, [sp, 0x10]
add r1, sp, 0x4
ldrh r0, [r5, 0xC]
strh r0, [r1, 0x10]
ldrh r0, [r5, 0xC]
strh r0, [r1, 0x12]
adds r0, r1, 0
strb r2, [r0, 0x14]
adds r2, r5, 0
adds r2, 0x22
ldrb r0, [r2]
cmp r0, 0
bne _08030EB0
adds r1, 0x2E
movs r0, 0x5
strb r0, [r1]
b _08030EBE
.align 2, 0
_08030EA8: .4byte gUnknown_203B480
_08030EAC: .4byte gUnknown_203B324
_08030EB0:
mov r1, sp
adds r1, 0x32
movs r0, 0x2
strb r0, [r1]
ldrb r1, [r2]
add r0, sp, 0x38
strb r1, [r0]
_08030EBE:
ldrb r0, [r5]
cmp r0, 0x2
beq _08030ED2
cmp r0, 0x2
ble _08030EE2
cmp r0, 0x4
beq _08030ED2
cmp r0, 0x5
beq _08030EDA
b _08030EE2
_08030ED2:
mov r1, sp
adds r1, 0x45
movs r0, 0xA
b _08030EE8
_08030EDA:
mov r1, sp
adds r1, 0x45
movs r0, 0xB
b _08030EE8
_08030EE2:
mov r1, sp
adds r1, 0x45
movs r0, 0x9
_08030EE8:
strb r0, [r1]
add r0, sp, 0x4
bl CreateRescueDescription
ldrh r0, [r5, 0x10]
ldr r1, _08030F48
bl __umodsi3
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
ldr r2, _08030F4C
ldr r5, _08030F50
ldr r0, [r5]
ldr r3, [r0, 0x10]
movs r0, 0
mov r8, r0
str r0, [sp]
movs r0, 0xA
movs r1, 0x68
bl xxx_call_draw_string
add r6, sp, 0x5C
ldr r1, _08030F54
adds r0, r6, 0
adds r2, r4, 0
bl sprintfStatic
ldr r0, [r5]
ldr r3, [r0, 0x10]
mov r0, r8
str r0, [sp]
movs r0, 0x44
movs r1, 0x68
adds r2, r6, 0
bl xxx_call_draw_string
ldr r0, [r5]
ldr r0, [r0, 0x10]
bl sub_80073E0
add sp, 0x15C
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08030F48: .4byte 0x00002710
_08030F4C: .4byte gUnknown_80E0934
_08030F50: .4byte gUnknown_203B324
_08030F54: .4byte gUnknown_80E0938
thumb_func_end sub_8030E48
.align 2,0

View File

@@ -11,7 +11,11 @@ struct unkStruct_203B480
/* 0x8 */ u32 unk8;
/* 0xC */ s16 clientSpecies;
/* 0xE */ s16 targetSpecies;
/* 0x10 */ u32 unk10;
union unk10_temp
{
u32 unk10;
u16 unk10_u16;
} unk10;
/* 0x14 */ u8 playerName[0x20 - 0x14];;
struct Item unk20;
u32 unk24;

View File

@@ -151,7 +151,6 @@ SECTIONS {
src/makuhita_dojo_1.o(.text);
src/wonder_mail_4.o(.text);
src/wonder_mail_5.o(.text);
asm/wonder_mail_5.o(.text);
src/wonder_mail_6.o(.text);
src/post_office_guide.o(.text);
asm/code_8031D70.o(.text);

View File

@@ -102,7 +102,7 @@ bool8 sub_80952F0(u8 mailType, u32 param_2)
for(index = 0, ptr = &gUnknown_203B480[0]; index < 0x20; ptr++, index++)
{
if ((ptr->mailType == mailType) && (ptr->unk10 == param_2)) return TRUE;
if ((ptr->mailType == mailType) && (ptr->unk10.unk10 == param_2)) return TRUE;
}
return FALSE;
}
@@ -153,7 +153,7 @@ s32 sub_809539C(u8 mailType, u32 param_2)
for(index = 0, ptr = &gUnknown_203B480[0]; index < 0x20; ptr++, index++)
{
if ((ptr->mailType == mailType) && (ptr->unk10 == param_2)) return index;
if ((ptr->mailType == mailType) && (ptr->unk10.unk10 == param_2)) return index;
}
return -1;
}
@@ -175,7 +175,7 @@ s32 sub_8095400(u32 param_1)
u32 *ptr;
s32 index;
for(index = 0, ptr = &gUnknown_203B480[0].unk10; index < 0x20; ptr += 0xC, index++)
for(index = 0, ptr = &gUnknown_203B480[0].unk10.unk10; index < 0x20; ptr += 0xC, index++)
{
if (*ptr == param_1) return index;
}
@@ -200,7 +200,7 @@ void sub_809542C(struct unkStruct_809542C *param_1)
preload->dungeon = param_1->unk0;
preload->unk8 = uVar4;
sub_8094D28(Rand32Bit());
gUnknown_203B480->unk10 = sub_8094E4C();
gUnknown_203B480->unk10.unk10 = sub_8094E4C();
gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum;
PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct());
CopyStringtoBuffer(gUnknown_203B480->playerName, buffer);
@@ -324,7 +324,7 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
RestoreDungeonLocation(a, &b->dungeon);
RestoreIntegerBits(a, &b->unk8, 0x18);
RestoreIntegerBits(a, &b->clientSpecies, 0x9);
RestoreIntegerBits(a, &b->unk10, 0x20);
RestoreIntegerBits(a, &b->unk10.unk10, 0x20);
RestoreIntegerBits(a, &b->playerName, 0x50);
RestoreIntegerBits(a, &b->unk20.flags, 0x8);
RestoreIntegerBits(a, &b->unk20.quantity, 0x8);
@@ -349,7 +349,7 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
SaveDungeonLocation(a, &b->dungeon);
SaveIntegerBits(a, &b->unk8, 0x18);
SaveIntegerBits(a, &b->clientSpecies, 0x9);
SaveIntegerBits(a, &b->unk10, 0x20);
SaveIntegerBits(a, &b->unk10.unk10, 0x20);
SaveIntegerBits(a, &b->playerName, 0x50);
SaveIntegerBits(a, &b->unk20.flags, 0x8);
SaveIntegerBits(a, &b->unk20.quantity, 0x8);

View File

@@ -712,7 +712,7 @@ void sub_8033DBC(void)
SetFriendRescueMenuState(8);
break;
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(mail.unk10);
sub_8095274(mail.unk10.unk10);
mail.mailType = 2;
sub_80951BC(&mail);
sub_80141B4(gUnknown_80E4928, 0, 0, 0x101);
@@ -729,7 +729,7 @@ void sub_8033DBC(void)
case PASSWORD_ENTRY_AOK_MAIL_SUCCESS:
mail.mailType = 5;
sub_80951FC(&mail);
mail2 = sub_8095228(sub_809539C(1, mail.unk10));
mail2 = sub_8095228(sub_809539C(1, mail.unk10.unk10));
mail2->mailType = 7;
MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
SetFriendRescueMenuState(0x40);
@@ -1597,10 +1597,10 @@ void sub_8034D74(void)
SetFriendRescueMenuState(0x6B);
break;
case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS:
mail2 = sub_8095228(sub_809539C(4, mail.unk10));
mail2 = sub_8095228(sub_809539C(4, mail.unk10.unk10));
*mail2 = mail;
mail2->mailType = 6;
gUnknown_203B33C->unk420 = mail.unk10;
gUnknown_203B33C->unk420 = mail.unk10.unk10;
SetFriendRescueMenuState(0x6D);
break;
case 7:

View File

@@ -220,7 +220,7 @@ s32 UpdateRescuePasswordMenu(void)
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(local_44.unk10);
sub_8095274(local_44.unk10.unk10);
DisplayPasswordAcceptScreen();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
@@ -245,7 +245,7 @@ s32 UpdateRescuePasswordMenu(void)
nextMenu = MENU_NO_SCREEN_CHANGE;
local_44.mailType = 5;
sub_80951FC(&local_44);
puVar5 = sub_8095228(sub_809539C(1, local_44.unk10));
puVar5 = sub_8095228(sub_809539C(1, local_44.unk10.unk10));
puVar5->mailType = WONDER_MAIL_TYPE_OKD;
MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
break;
@@ -265,7 +265,7 @@ s32 UpdateRescuePasswordMenu(void)
DisplayPasswordAcceptScreen();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
puVar6 = sub_8095228(sub_809539C(4, local_44.unk10));
puVar6 = sub_8095228(sub_809539C(4, local_44.unk10.unk10));
*puVar6 = local_44;
puVar6->mailType = 6;
iVar9 = GetMainMenu();
@@ -462,7 +462,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para
if (param_3->mailType != WONDER_MAIL_TYPE_SOS) {
return PASSWORD_ENTRY_NOT_SOS_MAIL;
}
else if ( (sub_80952F0(2, param_3->unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_AOK, param_3->unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10)) || (sub_8095298(param_3->unk10))) {
else if ( (sub_80952F0(2, param_3->unk10.unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_AOK, param_3->unk10.unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10.unk10)) || (sub_8095298(param_3->unk10.unk10))) {
return PASSWORD_ENTRY_DUPLICATE_SOS_MAIL;
}
else if (FindOpenMailSlot() == -1) {
@@ -476,7 +476,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para
if (param_3->mailType != WONDER_MAIL_TYPE_AOK) {
return PASSWORD_ENTRY_NOT_AOK_MAIL;
}
else if (!sub_80952F0(1, param_3->unk10)) {
else if (!sub_80952F0(1, param_3->unk10.unk10)) {
return PASSWORD_ENTRY_DUPLICATE_AOK_MAIL;
}
else {
@@ -487,7 +487,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para
if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) {
return PASSWORD_ENTRY_NOT_THANK_YOU_MAIL;
}
else if ((!sub_80952F0(4, param_3->unk10)) || (param_3->unk28 != sub_8011C34())) {
else if ((!sub_80952F0(4, param_3->unk10.unk10)) || (param_3->unk28 != sub_8011C34())) {
return PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL;
}
else {

View File

@@ -291,7 +291,7 @@ u32 CreateThankYouMailPelipper(void)
mail = sub_8095228(index);
gUnknown_203B2C4->unk41C = mail->unk20;
gUnknown_203B2C4->mailIndex = index;
gUnknown_203B2C4->unk430 = mail->unk10;
gUnknown_203B2C4->unk430 = mail->unk10.unk10;
SetThankYouMailMenuState(5);
}
else {
@@ -841,11 +841,11 @@ void HandleThankYouMailPasswordMenu(void)
SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR);
break;
case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS:
uVar1 = sub_809539C(4,mail1.unk10);
uVar1 = sub_809539C(4,mail1.unk10.unk10);
mail = sub_8095228(uVar1);
*mail = mail1;
mail->mailType = 6;
gUnknown_203B2C4->unk430 = mail1.unk10;
gUnknown_203B2C4->unk430 = mail1.unk10.unk10;
SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS);
break;
default:
@@ -1346,10 +1346,10 @@ void UpdateThankYouMailText(void)
case 7:
gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
if ( sub_800D588() != '\0') {
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10;
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10.unk10;
}
else {
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10;
gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10.unk10;
}
break;
}

View File

@@ -1471,7 +1471,7 @@ void sub_80293F4(void)
sub_8028B04(7);
break;
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(mail.unk10);
sub_8095274(mail.unk10.unk10);
mail.mailType = 2;
sub_80951BC(&mail);
sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->faceFile, 0x101);

View File

@@ -2,17 +2,49 @@
#include "memory.h"
#include "text.h"
#include "input.h"
#include "dungeon.h"
#include "pokemon.h"
#include "code_8094F88.h"
#include "code_800D090.h"
struct unkStruct_203B324
{
// size: 0x78
u8 fill0[0xC];
u8 unkC;
u8 mailIndex;
u32 unk10;
struct UnkTextStruct2 *unk14;
struct UnkTextStruct2 unk18[4];
};
extern struct unkStruct_203B324 *gUnknown_203B324;
extern struct unkStruct_203B480 *gUnknown_203B480;
struct unkStruct_802C39C
{
/* 0x0 */ u32 unk0[2];
/* 0x8 */ struct DungeonLocation *dungeon;
/* 0xC */ u8 *playerName;
/* 0x10 */ s16 clientSpecies;
/* 0x12 */ s16 targetSpecies;
/* 0x14 */ u8 unk14;
/* 0x15 */ u8 fill15[0x2E - 0x15];
u8 unk2E;
u8 fill2F[0x34 - 0x2F];
u8 unk34;
u8 fill35[0x38 - 0x35];
/* 0x38 */ u8 unk38[0x40 - 0x38];
u8 unk40;
u8 unk41;
u8 unk42;
u8 unk43;
u8 unk44;
u8 unk45;
u8 fill46[0x48 - 0x46];
/* 0x48 */ u32 y;
/* 0x4C */ u8 *unk4C;
/* 0x50 */ u8 *unk50[2];
};
const struct UnkTextStruct2 gUnknown_80E0900 = {
0x00, 0x00, 0x00, 0x00,
@@ -42,14 +74,18 @@ extern void sub_8030DD4(void);
extern void sub_801317C(void *);
extern void PlayMenuSoundEffect(u32);
extern u32 sub_8012A64(void *, u32);
extern void CreateRescueDescription(void *);
extern void xxx_call_draw_string(u32, u32, const char *, u32, u32);
extern void sub_80073E0(u32);
extern void sub_80073B8(u32);
void sub_8030E2C(void);
void sub_8030E48(void);
bool8 sub_8030D40(u8 param_1, s32 param_2)
bool8 sub_8030D40(u8 mailIndex, s32 param_2)
{
gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8);
gUnknown_203B324->unkC = param_1;
gUnknown_203B324->mailIndex = mailIndex;
sub_801317C(gUnknown_203B324);
gUnknown_203B324->unk10 = param_2;
gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[param_2];
@@ -98,3 +134,49 @@ void sub_8030E2C(void)
sub_800641C(gUnknown_203B324->unk18, 1, 1);
}
void sub_8030E48(void)
{
u16 uVar2;
struct unkStruct_203B480 *mail;
struct unkStruct_802C39C stack;
u8 buffer [256];
mail = &gUnknown_203B480[gUnknown_203B324->mailIndex];
sub_80073B8(gUnknown_203B324->unk10);
stack.unk0[0] = gUnknown_203B324->unk10;
stack.unk40 = 7;
stack.unk42 = 0;
stack.unk44 = 0;
stack.dungeon = &mail->dungeon;
stack.playerName = mail->playerName;
stack.clientSpecies = mail->clientSpecies;
stack.targetSpecies = mail->clientSpecies;
stack.unk14 = 0;
if (mail->unk20.id == ITEM_NOTHING) {
stack.unk2E = 5;
}
else {
stack.unk2E = 2;
stack.unk34 = mail->unk20.id;
}
switch(mail->mailType)
{
case 2:
case 4:
stack.unk41 = 10;
break;
case 5:
stack.unk41 = 0xb;
break;
case 0:
default:
stack.unk41 = 9;
break;
}
CreateRescueDescription(&stack);
uVar2 = mail->unk10.unk10_u16 % 10000;
xxx_call_draw_string(10,0x68,gUnknown_80E0934,gUnknown_203B324->unk10,0); // ID:
sprintfStatic(buffer,gUnknown_80E0938,uVar2); // %-4d
xxx_call_draw_string(0x44,0x68,buffer,gUnknown_203B324->unk10,0);
sub_80073E0(gUnknown_203B324->unk10);
}

View File

@@ -13,7 +13,7 @@ struct unkStruct_203B328
{
// size: 0x11C
u32 state;
u8 unk4;
u8 mailIndex;
u32 unk8;
u8 fillC[0x58 - 0xC];
u32 unk58;
@@ -241,7 +241,7 @@ void sub_8031258(void)
sub_8012D60(&gUnknown_203B328->unk58, gUnknown_80E0948, 0, 0, 3, 2);
break;
case 4:
sub_8030D40(gUnknown_203B328->unk4, 3);
sub_8030D40(gUnknown_203B328->mailIndex, 3);
break;
case 5:
case 6:
@@ -255,11 +255,11 @@ void sub_8031300(void)
switch(sub_8030768(1))
{
case 3:
gUnknown_203B328->unk4 = sub_80307EC();
gUnknown_203B328->mailIndex = sub_80307EC();
sub_80310E4(1);
break;
case 4:
gUnknown_203B328->unk4 = sub_80307EC();
gUnknown_203B328->mailIndex = sub_80307EC();
sub_80310E4(4);
break;
case 2:
@@ -301,7 +301,7 @@ void sub_803136C(void)
void sub_80313D8(u32 state)
{
s32 iVar2;
s32 index;
s32 local_10;
struct unkStruct_203B480 *unused;
@@ -322,15 +322,15 @@ void sub_80313D8(u32 state)
switch(state)
{
case 2:
sub_8095240(gUnknown_203B328->unk4);
sub_8095240(gUnknown_203B328->mailIndex);
break;
case 3:
for(iVar2 = 0; iVar2 < 0x20; iVar2++)
for(index = 0; index < 0x20; index++)
{
unused = &gUnknown_203B480[iVar2];
gUnknown_203B480[iVar2].mailType = 0;
unused = &gUnknown_203B480[iVar2];
gUnknown_203B480[iVar2].unk20.id = 0;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].mailType = 0;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].unk20.id = ITEM_NOTHING;
}
break;
}