more work

This commit is contained in:
Seth Barberee 2025-07-06 13:55:59 -07:00
parent b7855b4de5
commit a0dbdc84f9
6 changed files with 216 additions and 418 deletions

View File

@ -5,404 +5,6 @@
.text
thumb_func_start sub_803B344
sub_803B344:
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
ldr r1, _0803B358
adds r0, r1
bx lr
.align 2, 0
_0803B358: .4byte gUnknown_80E7F94
thumb_func_end sub_803B344
thumb_func_start sub_803B35C
sub_803B35C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r1, 0x18
bl sub_803C21C
ldrb r0, [r5, 0x2]
subs r0, 0x1
cmp r0, 0x8
bls _0803B372
b _0803B4FA
_0803B372:
lsls r0, 2
ldr r1, _0803B37C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803B37C: .4byte _0803B380
.align 2, 0
_0803B380:
.4byte _0803B3A4
.4byte _0803B3BE
.4byte _0803B3D8
.4byte _0803B3F2
.4byte _0803B414
.4byte _0803B442
.4byte _0803B470
.4byte _0803B49E
.4byte _0803B4CC
_0803B3A4:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3BE:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x1
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3D8:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x2
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3F2:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x3
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
bl sub_8096DD8
str r0, [r4, 0x4C]
bl sub_8096DE8
str r0, [r4, 0x50]
b _0803B578
_0803B414:
ldrb r0, [r5, 0x1]
cmp r0, 0x3
bne _0803B42A
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xB
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x1
b _0803B438
_0803B42A:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xC
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x2
_0803B438:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x4
b _0803B576
_0803B442:
ldrb r0, [r5, 0x1]
cmp r0, 0x3
bne _0803B458
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xB
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x1
b _0803B466
_0803B458:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xC
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x2
_0803B466:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x5
b _0803B576
_0803B470:
adds r0, r5, 0
bl sub_803B600
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B488
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
b _0803B48E
_0803B488:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x4
_0803B48E:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x6
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B49E:
adds r0, r5, 0
bl sub_803B628
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B4B6
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
b _0803B4BC
_0803B4B6:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x5
_0803B4BC:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x7
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B4CC:
adds r0, r5, 0
bl sub_803B66C
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B4E4
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xA
b _0803B4EA
_0803B4E4:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x6
_0803B4EA:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x8
strb r0, [r1]
adds r1, 0x1
movs r0, 0x5
b _0803B576
_0803B4FA:
ldrb r0, [r5, 0x1]
cmp r0, 0x2
beq _0803B528
cmp r0, 0x2
bgt _0803B50A
cmp r0, 0x1
beq _0803B514
b _0803B564
_0803B50A:
cmp r0, 0x3
beq _0803B53C
cmp r0, 0x4
beq _0803B550
b _0803B564
_0803B514:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
strb r0, [r1]
adds r1, 0x1
movs r0, 0xD
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B528:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xA
strb r0, [r1]
adds r1, 0x1
movs r0, 0xE
strb r0, [r1]
adds r1, 0x1
movs r0, 0x5
b _0803B576
_0803B53C:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xB
strb r0, [r1]
adds r1, 0x1
movs r0, 0xF
strb r0, [r1]
adds r1, 0x1
movs r0, 0x1
b _0803B576
_0803B550:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xC
strb r0, [r1]
adds r1, 0x1
movs r0, 0x10
strb r0, [r1]
adds r1, 0x1
movs r0, 0x2
b _0803B576
_0803B564:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x8
strb r0, [r1]
adds r1, 0x1
movs r0, 0xC
strb r0, [r1]
adds r1, 0x1
movs r0, 0x3
_0803B576:
strb r0, [r1]
_0803B578:
adds r0, r5, 0x4
str r0, [r4, 0x8]
movs r0, 0
str r0, [r4, 0xC]
ldrh r0, [r5, 0xC]
movs r1, 0
strh r0, [r4, 0x10]
ldrh r0, [r5, 0xE]
strh r0, [r4, 0x12]
ldrb r0, [r5, 0x10]
strb r0, [r4, 0x14]
ldrb r0, [r5]
subs r0, 0x2
cmp r0, 0x7
bhi _0803B5EC
lsls r0, 2
ldr r1, _0803B5A0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803B5A0: .4byte _0803B5A4
.align 2, 0
_0803B5A4:
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5DC
.4byte _0803B5CC
.4byte _0803B5DC
.4byte _0803B5DC
_0803B5C4:
adds r0, r4, 0
adds r0, 0x43
movs r1, 0x1
b _0803B5F0
_0803B5CC:
adds r1, r4, 0
adds r1, 0x43
movs r0, 0
strb r0, [r1]
adds r1, 0x1
movs r0, 0x3
strb r0, [r1]
b _0803B5F6
_0803B5DC:
adds r1, r4, 0
adds r1, 0x43
movs r0, 0x3
strb r0, [r1]
adds r1, 0x1
movs r0, 0x2
strb r0, [r1]
b _0803B5F6
_0803B5EC:
adds r0, r4, 0
adds r0, 0x43
_0803B5F0:
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
_0803B5F6:
str r5, [r4, 0x54]
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_803B35C
thumb_func_start sub_803B600
sub_803B600:
push {lr}
ldr r2, _0803B614
movs r1, 0
ldr r3, [r0, 0xC]
_0803B608:
ldr r0, [r2]
cmp r0, r3
bne _0803B618
adds r0, r1, 0
b _0803B624
.align 2, 0
_0803B614: .4byte gUnknown_80E9920
_0803B618:
adds r2, 0x8
adds r1, 0x1
cmp r1, 0x14
ble _0803B608
movs r0, 0x1
negs r0, r0
_0803B624:
pop {r1}
bx r1
thumb_func_end sub_803B600
thumb_func_start sub_803B628
sub_803B628:
push {r4,r5,lr}

View File

@ -12,15 +12,10 @@ typedef struct unkStruct_802C39C
/* 0x10 */ s16 clientSpecies;
/* 0x12 */ s16 targetSpecies;
/* 0x14 */ u8 targetItem;
/* 0x15 */ u8 fill15[0x2E - 0x15];
/* 0x2E */ u8 rewardType;
u8 *unk30;
/* 0x34 */ u8 rewardItem;
u8 fill35[0x38 - 0x35];
/* 0x38 */ u8 unk38[0x40 - 0x38];
u8 mailTitleType;
u8 mailDescriptionType;
u8 mailMissionType;
/* 0x18 */ unkStruct_802F204 unk18;
/* 0x40 */ u8 mailTitleType;
/* 0x41 */ u8 mailDescriptionType;
/* 0x42 */ u8 mailMissionType;
u8 unk43;
u8 mailStatus; // mail status (suspend / take job / done)
/* 0x48 */ u32 y;

View File

@ -1,10 +1,12 @@
#include "global.h"
#include "globaldata.h"
#include "structs/str_ground_script.h"
#include "code_803C1D0.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "music_util.h"
#include "pokemon_mail.h"
#include "text_1.h"
#include "text_2.h"
#include "text_3.h"
@ -19,6 +21,8 @@ EWRAM_INIT struct unkStruct_203B3FC *gUnknown_203B3FC = NULL;
extern WindowTemplate gUnknown_80E7F3C;
// https://decomp.me/scratch/xx1GB - 91.35% matched (Seth)
NAKED
bool8 sub_803B050(void)
{
@ -205,3 +209,200 @@ void sub_803B284(void)
sub_80073E0(gUnknown_203B3FC->mh.m.menuWinId);
}
NAKED
unkStruct_803B344 *sub_803B344(u8 r0)
{
asm_unified(
"\tadds r1, r0, 0\n"
"\tlsls r1, 24\n"
"\tlsrs r1, 24\n"
"\tlsls r0, r1, 3\n"
"\tsubs r0, r1\n"
"\tlsls r0, 2\n"
"\tldr r1, _0803B358\n"
"\tadds r0, r1\n"
"\tbx lr\n"
"\t.align 2, 0\n"
"_0803B358: .4byte gUnknown_80E7F94");
}
u8 *sub_8096DD8(void);
u8 *sub_8096DE8(void);
static s32 sub_803B600(WonderMail *);
s32 sub_803B628(WonderMail *);
s32 sub_803B66C(WonderMail *);
void sub_803B35C(WonderMail *mail,unkStruct_802C39C *param_2)
{
u8 uVar2;
sub_803C21C(mail, &param_2->unk18);
switch(mail->unk2) {
case '\x01':
param_2->mailTitleType = 0;
param_2->mailDescriptionType = 0;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x02':
param_2->mailTitleType = 1;
param_2->mailDescriptionType = 1;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x03':
param_2->mailTitleType = 2;
param_2->mailDescriptionType = 2;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x04':
param_2->mailTitleType = 3;
param_2->mailDescriptionType = 3;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk4C = sub_8096DD8();
param_2->unk50 = sub_8096DE8();
break;
case '\x05':
if (mail->missionType == MISSION_TYPE_RESCUE_CLIENT) {
param_2->mailTitleType = '\v';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
}
else {
param_2->mailTitleType = '\f';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
}
param_2->mailDescriptionType = 4;
break;
case '\x06':
if (mail->missionType == 3) {
param_2->mailTitleType = '\v';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
}
else {
param_2->mailTitleType = '\f';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
}
param_2->mailDescriptionType = 5;
break;
case '\a':
param_2->unk0[1] = sub_803B600(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 9;
}
else {
param_2->mailTitleType = 4;
}
param_2->mailDescriptionType = 6;
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case '\b':
param_2->unk0[1] = sub_803B628(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 9;
}
else {
param_2->mailTitleType = 5;
}
param_2->mailDescriptionType = 7;
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case '\t':
param_2->unk0[1] = sub_803B66C(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 0xA;
}
else {
param_2->mailTitleType = 6;
}
param_2->mailDescriptionType = '\b';
param_2->mailMissionType = MISSION_TYPE_ESCORT_CLIENT;
break;
default:
switch(mail->missionType)
{
case 1:
param_2->mailTitleType = '\t';
param_2->mailDescriptionType = '\r';
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case 2:
param_2->mailTitleType = '\n';
param_2->mailDescriptionType = '\x0e';
param_2->mailMissionType = MISSION_TYPE_ESCORT_CLIENT;
break;
case 3:
param_2->mailTitleType = '\v';
param_2->mailDescriptionType = '\x0f';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
break;
case 4:
param_2->mailTitleType = '\f';
param_2->mailDescriptionType = '\x10';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
break;
default:
param_2->mailTitleType = 8;
param_2->mailDescriptionType = 0xC;
param_2->mailMissionType = MISSION_TYPE_RESCUE_CLIENT;
break;
}
break;
}
param_2->dungeonSeed = &mail->dungeonSeed;
param_2->playerName = NULL;
uVar2 = 0;
param_2->clientSpecies = mail->clientSpecies;
param_2->targetSpecies = mail->targetSpecies;
param_2->targetItem = mail->targetItem;
switch(mail->mailType) {
case 2:
case 3:
case 4:
case 5:
param_2->unk43 = 1;
param_2->mailStatus = 1;
break;
case 7:
param_2->unk43 = 0;
param_2->mailStatus = 3;
break;
case 6:
case 8:
case 9:
param_2->unk43 = 3;
param_2->mailStatus = 2;
break;
default:
param_2->unk43 = uVar2;
param_2->mailStatus = uVar2;
break;
}
param_2->mail = mail;
return;
}
static s32 sub_803B600(WonderMail *mail)
{
s32 index;
const unkStruct_80E9920 *ptr;
for(ptr = &gUnknown_80E9920[0], index = 0; index < ARRAY_COUNT_INT(gUnknown_80E9920); ptr++, index++)
{
if ((ptr->parentSpecies == mail->clientSpecies) && (ptr->childSpecies == mail->targetSpecies)) {
return index;
}
}
return -1;
}

View File

@ -334,26 +334,26 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
y += 12;
PrintStringOnWindow(10, y, gRewardText, param_1->unk0[0], 0);
switch (param_1->rewardType) {
switch (param_1->unk18.rewardType) {
case MONEY:
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], param_1->unk18.moneyReward);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case MONEY_EXTRA:
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], param_1->unk18.moneyReward);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case ITEM: // Item
case ITEM_EXTRA: // Item + ?
BufferItemName(gFormatBuffer_Items[0], param_1->rewardItem, NULL);
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], gFormatBuffer_Items[0]);
BufferItemName(gFormatBuffer_Items[0], param_1->unk18.itemRewards[0], NULL);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], gFormatBuffer_Items[0]);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case 4: // Friend Area
PrintStringOnWindow(68, y, gMissionRewardText[param_1->rewardType], param_1->unk0[0], 0);
PrintStringOnWindow(68, y, gMissionRewardText[param_1->unk18.rewardType], param_1->unk0[0], 0);
break;
default:
PrintStringOnWindow(68, y, gMissionRewardText[param_1->rewardType], param_1->unk0[0], 0);
PrintStringOnWindow(68, y, gMissionRewardText[param_1->unk18.rewardType], param_1->unk0[0], 0);
break;
}

View File

@ -212,7 +212,7 @@ void sub_803092C(void)
local.clientSpecies = mail->clientSpecies;
local.targetSpecies = mail->clientSpecies;
local.targetItem = ITEM_NOTHING;
local.rewardType = MONEY1;
local.unk18.rewardType = MONEY1;
switch(mail->mailType)
{

View File

@ -129,11 +129,11 @@ void sub_8030E48(void)
stack.targetSpecies = mail->clientSpecies;
stack.targetItem = ITEM_NOTHING;
if (mail->item.id == ITEM_NOTHING) {
stack.rewardType = MONEY1;
stack.unk18.rewardType = MONEY1;
}
else {
stack.rewardType = ITEM;
stack.rewardItem = mail->item.id;
stack.unk18.rewardType = ITEM;
stack.unk18.itemRewards[0] = mail->item.id;
}
switch(mail->mailType)
{