mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-28 03:34:22 -05:00
continue decomping link functions
This commit is contained in:
@@ -1071,292 +1071,4 @@ _08038070: .4byte gTeamInventory_203B460
|
||||
_08038074: .4byte 0x000003e7
|
||||
thumb_func_end sub_8038014
|
||||
|
||||
thumb_func_start sub_8038078
|
||||
sub_8038078:
|
||||
push {r4-r6,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
bl sub_800D588
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0803808A
|
||||
adds r4, r5, 0
|
||||
_0803808A:
|
||||
ldr r6, [r4, 0x10]
|
||||
ldr r0, _08038098
|
||||
ldr r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0803809C
|
||||
ldr r5, [r0, 0x50]
|
||||
b _080380A2
|
||||
.align 2, 0
|
||||
_08038098: .4byte gUnknown_203B184
|
||||
_0803809C:
|
||||
bl sub_8011C34
|
||||
adds r5, r0, 0
|
||||
_080380A2:
|
||||
movs r0, 0x4
|
||||
adds r1, r6, 0
|
||||
bl HasMail
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080380BA
|
||||
ldr r0, [r4, 0x28]
|
||||
cmp r0, r5
|
||||
bne _080380BA
|
||||
movs r0, 0
|
||||
b _080380BC
|
||||
_080380BA:
|
||||
movs r0, 0xB
|
||||
_080380BC:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8038078
|
||||
|
||||
thumb_func_start sub_80380C4
|
||||
sub_80380C4:
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
adds r4, r1, 0
|
||||
bl sub_800D588
|
||||
lsls r0, 24
|
||||
adds r5, r4, 0
|
||||
cmp r0, 0
|
||||
bne _080380D8
|
||||
adds r5, r6, 0
|
||||
_080380D8:
|
||||
ldr r4, [r5, 0x10]
|
||||
movs r0, 0x2
|
||||
adds r1, r4, 0
|
||||
bl HasMail
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08038110
|
||||
movs r0, 0x4
|
||||
adds r1, r4, 0
|
||||
bl HasMail
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08038110
|
||||
movs r0, 0x6
|
||||
adds r1, r4, 0
|
||||
bl HasMail
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08038110
|
||||
ldr r0, [r5, 0x10]
|
||||
bl sub_8095298
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08038114
|
||||
_08038110:
|
||||
movs r0, 0x7
|
||||
b _08038126
|
||||
_08038114:
|
||||
bl FindOpenMailSlot
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
cmp r0, r1
|
||||
beq _08038124
|
||||
movs r0, 0
|
||||
b _08038126
|
||||
_08038124:
|
||||
movs r0, 0xD
|
||||
_08038126:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80380C4
|
||||
|
||||
thumb_func_start sub_803812C
|
||||
sub_803812C:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
bl sub_800D588
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0803813E
|
||||
adds r4, r5, 0
|
||||
_0803813E:
|
||||
ldr r1, [r4, 0x10]
|
||||
movs r0, 0x1
|
||||
bl HasMail
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08038150
|
||||
movs r0, 0x9
|
||||
b _08038152
|
||||
_08038150:
|
||||
movs r0, 0
|
||||
_08038152:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_803812C
|
||||
|
||||
thumb_func_start sub_8038158
|
||||
sub_8038158:
|
||||
movs r0, 0
|
||||
bx lr
|
||||
thumb_func_end sub_8038158
|
||||
|
||||
thumb_func_start sub_803815C
|
||||
sub_803815C:
|
||||
push {r4,lr}
|
||||
adds r3, r1, 0
|
||||
movs r4, 0
|
||||
cmp r0, 0xA
|
||||
bhi _080381D2
|
||||
lsls r0, 2
|
||||
ldr r1, _08038170
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08038170: .4byte _08038174
|
||||
.align 2, 0
|
||||
_08038174:
|
||||
.4byte _080381A0
|
||||
.4byte _080381A0
|
||||
.4byte _080381D2
|
||||
.4byte _080381B4
|
||||
.4byte _080381D2
|
||||
.4byte _080381BE
|
||||
.4byte _080381D2
|
||||
.4byte _080381AA
|
||||
.4byte _080381D2
|
||||
.4byte _080381D2
|
||||
.4byte _080381C8
|
||||
_080381A0:
|
||||
adds r0, r3, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_8038014
|
||||
b _080381D0
|
||||
_080381AA:
|
||||
adds r0, r3, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_8038078
|
||||
b _080381D0
|
||||
_080381B4:
|
||||
adds r0, r3, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_80380C4
|
||||
b _080381D0
|
||||
_080381BE:
|
||||
adds r0, r3, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_803812C
|
||||
b _080381D0
|
||||
_080381C8:
|
||||
adds r0, r3, 0
|
||||
adds r1, r2, 0
|
||||
bl sub_8038158
|
||||
_080381D0:
|
||||
adds r4, r0, 0
|
||||
_080381D2:
|
||||
adds r0, r4, 0
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_803815C
|
||||
|
||||
thumb_func_start sub_80381DC
|
||||
sub_80381DC:
|
||||
push {lr}
|
||||
bl sub_8037F9C
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80381DC
|
||||
|
||||
thumb_func_start sub_80381E8
|
||||
sub_80381E8:
|
||||
push {lr}
|
||||
bl sub_803815C
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80381E8
|
||||
|
||||
thumb_func_start sub_80381F4
|
||||
sub_80381F4:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x4
|
||||
adds r5, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r7, r2, 0
|
||||
movs r4, 0
|
||||
bl sub_803815C
|
||||
str r0, [sp]
|
||||
ldr r0, _08038218
|
||||
str r4, [r0]
|
||||
bl sub_800D494
|
||||
mov r0, sp
|
||||
movs r1, 0x4
|
||||
bl sub_800D59C
|
||||
b _0803822E
|
||||
.align 2, 0
|
||||
_08038218: .4byte gUnknown_202EC4C
|
||||
_0803821C:
|
||||
subs r0, r4, 0x3
|
||||
cmp r0, 0x2
|
||||
bls _08038272
|
||||
ldr r1, _08038250
|
||||
ldr r0, [r1]
|
||||
cmp r0, 0x63
|
||||
bgt _0803827E
|
||||
adds r0, 0x1
|
||||
str r0, [r1]
|
||||
_0803822E:
|
||||
bl sub_80373C4
|
||||
bl sub_800D33C
|
||||
adds r4, r0, 0
|
||||
bl sub_800D570
|
||||
cmp r4, 0x2
|
||||
bne _0803821C
|
||||
bl sub_800D600
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08038254
|
||||
bl sub_8037DF0
|
||||
b _0803825E
|
||||
.align 2, 0
|
||||
_08038250: .4byte gUnknown_202EC4C
|
||||
_08038254:
|
||||
bl sub_800D520
|
||||
bl sub_800D510
|
||||
movs r0, 0x5
|
||||
_0803825E:
|
||||
str r0, [sp]
|
||||
ldr r0, [sp]
|
||||
cmp r0, 0
|
||||
bne _0803828A
|
||||
adds r0, r5, 0
|
||||
adds r1, r6, 0
|
||||
adds r2, r7, 0
|
||||
bl sub_8037F9C
|
||||
b _08038292
|
||||
_08038272:
|
||||
bl sub_800D520
|
||||
bl sub_800D510
|
||||
movs r0, 0x1
|
||||
b _08038298
|
||||
_0803827E:
|
||||
bl sub_800D520
|
||||
bl sub_800D510
|
||||
movs r0, 0xF
|
||||
b _08038298
|
||||
_0803828A:
|
||||
bl sub_800D520
|
||||
bl sub_800D510
|
||||
_08038292:
|
||||
bl sub_800D520
|
||||
ldr r0, [sp]
|
||||
_08038298:
|
||||
add sp, 0x4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80381F4
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -40,7 +40,7 @@ struct unkStruct_8035D94
|
||||
u8 itemIndex_u8;
|
||||
u32 itemIndex_u32;
|
||||
} itemIndex;
|
||||
u32 numItems;
|
||||
s32 numItems;
|
||||
};
|
||||
|
||||
struct MainMenuSub
|
||||
|
||||
@@ -155,6 +155,7 @@ SECTIONS {
|
||||
src/trade_items_menu.o(.text);
|
||||
src/other_menus.o(.text);
|
||||
asm/other_menus.o(.text);
|
||||
src/other_menus_1.o(.text);
|
||||
src/adventure_log_menu.o(.text);
|
||||
src/unk_menu_203B360.o(.text);
|
||||
src/save_menu.o(.text);
|
||||
|
||||
@@ -464,8 +464,8 @@ extern void TransferBGPaletteBuffer();
|
||||
extern void xxx_call_update_bg_vram();
|
||||
extern void sub_8009908();
|
||||
extern void xxx_call_update_bg_sound_input();
|
||||
extern s32 sub_8037D64(u32, void *, void *);
|
||||
extern s32 sub_80381F4(u32, void *, void *);
|
||||
extern s32 sub_8037D64(u32 mode, void *, void *);
|
||||
extern s32 sub_80381F4(u32 mode, void *, void *);
|
||||
extern void sub_8037810(void);
|
||||
extern void sub_8011830(void);
|
||||
extern s32 sub_8037B28(u32);
|
||||
|
||||
183
src/other_menus_1.c
Normal file
183
src/other_menus_1.c
Normal file
@@ -0,0 +1,183 @@
|
||||
#include "global.h"
|
||||
#include "constants/communication_error_codes.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "pokemon.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "save.h"
|
||||
|
||||
extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected
|
||||
extern s32 sub_803815C(u32, void *, void*);
|
||||
extern void sub_800D494(void);
|
||||
extern s32 sub_800D33C(void);
|
||||
extern void sub_800D520(void);
|
||||
extern u8 sub_800D600(void);
|
||||
extern void sub_80373C4(void);
|
||||
extern void sub_800D59C(s32 *, u32);
|
||||
extern void sub_800D570(void);
|
||||
extern void sub_800D510(void);
|
||||
extern s32 sub_8037DF0(void);
|
||||
extern void sub_8037F9C(u32, u8 *, u8 *);
|
||||
|
||||
extern s32 sub_8038014(void *param_2,void *param_3);
|
||||
extern u8 sub_800D588(void);
|
||||
extern struct UnkStruct_203B184 *gUnknown_203B184;
|
||||
|
||||
s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
|
||||
{
|
||||
u32 uVar2;
|
||||
u32 uVar3;
|
||||
|
||||
if (sub_800D588() == 0) {
|
||||
param_2 = param_1;
|
||||
}
|
||||
uVar3 = (param_2->unk10).unk10;
|
||||
if (gUnknown_203B184 != NULL) {
|
||||
uVar2 = gUnknown_203B184->unk050;
|
||||
}
|
||||
else {
|
||||
uVar2 = sub_8011C34();
|
||||
}
|
||||
if (HasMail(4,uVar3) && (param_2->unk28 == uVar2)) {
|
||||
return COMMS_GOOD;
|
||||
}
|
||||
else {
|
||||
return COMMS_NOT_ELIGIBLE_2;
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_80380C4(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
|
||||
{
|
||||
u32 uVar2;
|
||||
struct unkStruct_203B480 *mail;
|
||||
|
||||
if (sub_800D588() == 0) {
|
||||
mail = param_1;
|
||||
}
|
||||
else
|
||||
mail = param_2;
|
||||
|
||||
uVar2 = mail->unk10.unk10;
|
||||
if (HasMail(2,uVar2) || HasMail(4,uVar2) || HasMail(6,uVar2))
|
||||
{
|
||||
return COMMS_DUPLICATE_MAIL;
|
||||
}
|
||||
if(sub_8095298(mail->unk10.unk10))
|
||||
{
|
||||
return COMMS_DUPLICATE_MAIL;
|
||||
}
|
||||
else if (FindOpenMailSlot() == -1)
|
||||
{
|
||||
return COMMS_NO_ROOM_MAIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return COMMS_GOOD;
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_803812C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2)
|
||||
{
|
||||
if (sub_800D588() == 0) {
|
||||
param_2 = param_1;
|
||||
}
|
||||
if (HasMail(1, (param_2->unk10).unk10)) {
|
||||
return COMMS_GOOD;
|
||||
}
|
||||
else {
|
||||
return COMMS_NOT_ELIGIBLE_1;
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_8038158(void *param_1, void *param_2)
|
||||
{
|
||||
return COMMS_GOOD;
|
||||
}
|
||||
|
||||
s32 sub_803815C(u32 mode, void *param_2, void *param_3)
|
||||
{
|
||||
s32 linkStatus;
|
||||
|
||||
linkStatus = COMMS_GOOD;
|
||||
switch(mode) {
|
||||
case 0:
|
||||
case 1:
|
||||
linkStatus = sub_8038014(param_2, param_3);
|
||||
break;
|
||||
case 7:
|
||||
linkStatus = sub_8038078(param_2, param_3);
|
||||
break;
|
||||
case 3:
|
||||
linkStatus = sub_80380C4(param_2, param_3);
|
||||
break;
|
||||
case 5:
|
||||
linkStatus = sub_803812C(param_2, param_3);
|
||||
break;
|
||||
case 10:
|
||||
linkStatus = sub_8038158(param_2, param_3);
|
||||
break;
|
||||
}
|
||||
return linkStatus;
|
||||
}
|
||||
|
||||
void sub_80381DC(u32 mode, void * param_2, void * param_3)
|
||||
{
|
||||
sub_8037F9C(mode, param_2, param_3);
|
||||
}
|
||||
|
||||
s32 sub_80381E8(u32 mode, void * param_2, void * param_3)
|
||||
{
|
||||
return sub_803815C(mode, param_2, param_3);
|
||||
}
|
||||
|
||||
// TODO: clean this up
|
||||
s32 sub_80381F4(u32 mode, void * param_2, void * param_3)
|
||||
{
|
||||
u32 iVar2;
|
||||
s32 linkStatus;
|
||||
|
||||
iVar2 = 0;
|
||||
linkStatus = sub_803815C(mode, param_2, param_3);
|
||||
gCommsTimeout = 0;
|
||||
sub_800D494();
|
||||
sub_800D59C(&linkStatus, 4);
|
||||
goto _first;
|
||||
_start:
|
||||
while (iVar2 - 3 > 2) {
|
||||
if (99 < gCommsTimeout) {
|
||||
sub_800D520();
|
||||
sub_800D510();
|
||||
return COMMS_NOT_READY;
|
||||
}
|
||||
gCommsTimeout++;
|
||||
_first:
|
||||
sub_80373C4();
|
||||
iVar2 = sub_800D33C();
|
||||
sub_800D570();
|
||||
if (iVar2 == 2) {
|
||||
if (sub_800D600() != 0) {
|
||||
linkStatus = sub_8037DF0();
|
||||
}
|
||||
else {
|
||||
sub_800D520();
|
||||
sub_800D510();
|
||||
linkStatus = 5;
|
||||
}
|
||||
if (linkStatus != COMMS_GOOD) {
|
||||
sub_800D520();
|
||||
sub_800D510();
|
||||
}
|
||||
else {
|
||||
sub_8037F9C(mode, param_2, param_3);
|
||||
}
|
||||
goto _end;
|
||||
}
|
||||
else
|
||||
goto _start;
|
||||
}
|
||||
sub_800D520();
|
||||
sub_800D510();
|
||||
return 1;
|
||||
_end:
|
||||
sub_800D520();
|
||||
return linkStatus;
|
||||
}
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
#define RESCUE_PASSWORD_SIZE 0x36
|
||||
|
||||
EWRAM_DATA u32 gUnknown_202EC4C = {0};
|
||||
EWRAM_DATA s32 gCommsTimeout = {0};
|
||||
EWRAM_DATA u8 gRescuePasswordBuffer[RESCUE_PASSWORD_SIZE] = {0};
|
||||
|
||||
extern struct unkStruct_203B484 *gUnknown_203B484;
|
||||
@@ -760,4 +760,4 @@ void sub_80391F8(void)
|
||||
}
|
||||
xxx_draw_string_80144C4();
|
||||
gRescuePasswordMenu->unk210 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user