Dodrio: through sub_8024A30

This commit is contained in:
scnorton 2019-03-24 16:42:42 -04:00
parent 456cc3a6f0
commit 98ab62a7af
6 changed files with 187 additions and 306 deletions

View File

@ -5,309 +5,6 @@
.text .text
thumb_func_start sub_802493C
sub_802493C: @ 802493C
push {r4-r6,lr}
adds r5, r1, 0
lsls r0, 16
lsrs r6, r0, 16
ldr r1, =gUnknown_03000DB0
movs r0, 0
str r0, [r1]
ldr r0, =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
beq _08024A10
ldr r4, =gUnknown_02022C98
ldr r0, =0x00003330
bl AllocZeroed
str r0, [r4]
cmp r0, 0
beq _08024A10
bl sub_8024A1C
ldr r0, [r4]
bl sub_8024A30
ldr r0, [r4]
str r5, [r0]
bl GetMultiplayerId
ldr r1, [r4]
adds r1, 0x28
strb r0, [r1]
ldr r1, [r4]
ldr r2, =0x000032cc
adds r0, r1, r2
adds r2, r1, 0
adds r2, 0x28
ldrb r3, [r2]
lsls r2, r3, 4
subs r2, r3
lsls r2, 2
adds r1, r2
ldr r2, =0x000031a0
adds r1, r2
movs r2, 0x3C
bl memcpy
ldr r0, [r4]
adds r1, r0, 0
adds r1, 0x28
ldrb r1, [r1]
lsls r1, 2
ldr r2, =0x0000318c
adds r1, r2
adds r0, r1
movs r1, 0x64
muls r1, r6
ldr r2, =gPlayerParty
adds r1, r2
bl sub_80261F8
ldr r0, =sub_8024BC8
movs r1, 0x1
bl CreateTask
ldr r0, =sub_80261CC
bl SetMainCallback2
bl sub_80273F0
ldr r2, [r4]
adds r0, r2, 0
adds r0, 0x24
ldrb r0, [r0]
adds r1, r2, 0
adds r1, 0x44
adds r2, 0x48
bl sub_8026B5C
bl StopMapMusic
ldr r0, =0x0000021e
bl PlayNewMapMusic
b _08024A16
.pool
_08024A10:
adds r0, r5, 0
bl SetMainCallback2
_08024A16:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_802493C
thumb_func_start sub_8024A1C
sub_8024A1C: @ 8024A1C
push {lr}
bl ResetTasks
bl ResetSpriteData
bl FreeAllSpritePalettes
pop {r0}
bx r0
thumb_func_end sub_8024A1C
thumb_func_start sub_8024A30
sub_8024A30: @ 8024A30
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x28
adds r2, r0, 0
movs r0, 0
strb r0, [r2, 0xC]
strb r0, [r2, 0x10]
strb r0, [r2, 0x14]
strb r0, [r2, 0x18]
strb r0, [r2, 0x1C]
movs r3, 0x8E
lsls r3, 1
adds r1, r2, r3
str r0, [r1]
movs r7, 0x90
lsls r7, 1
adds r1, r2, r7
str r0, [r1]
adds r1, r2, 0
adds r1, 0x30
strb r0, [r1]
adds r1, 0x10
strb r0, [r1]
subs r1, 0x4
strb r0, [r1]
adds r3, 0x10
adds r1, r2, r3
str r0, [r1]
movs r5, 0
adds r1, r2, 0
adds r1, 0x98
movs r3, 0
_08024A76:
adds r0, r1, r5
strb r3, [r0]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x3
bls _08024A76
movs r5, 0
adds r7, r2, 0
adds r7, 0xA8
str r7, [sp]
adds r0, r2, 0
adds r0, 0xB0
str r0, [sp, 0xC]
movs r1, 0x4A
adds r1, r2
mov r10, r1
movs r3, 0x4C
adds r3, r2
mov r9, r3
movs r7, 0x4E
adds r7, r2
mov r12, r7
subs r0, 0x60
str r0, [sp, 0x24]
adds r6, r2, 0
adds r6, 0x54
adds r1, r2, 0
adds r1, 0xD0
str r1, [sp, 0x1C]
adds r3, r2, 0
adds r3, 0xDC
str r3, [sp, 0x20]
adds r7, r2, 0
adds r7, 0xC4
str r7, [sp, 0x14]
adds r0, 0xA4
str r0, [sp, 0x4]
adds r1, 0x25
str r1, [sp, 0x8]
subs r3, 0xBC
str r3, [sp, 0x10]
movs r7, 0x24
adds r7, r2
mov r8, r7
subs r0, 0xC0
str r0, [sp, 0x18]
movs r3, 0
movs r1, 0x86
lsls r1, 1
adds r4, r2, r1
movs r7, 0x98
lsls r7, 1
adds r2, r7
_08024AE2:
ldr r1, [sp]
adds r0, r1, r5
strb r3, [r0]
ldr r7, [sp, 0xC]
adds r0, r7, r5
strb r3, [r0]
lsls r0, r5, 1
adds r0, r5
lsls r0, 2
mov r7, r10
adds r1, r7, r0
strh r3, [r1]
mov r7, r9
adds r1, r7, r0
strh r3, [r1]
mov r7, r12
adds r1, r7, r0
strh r3, [r1]
ldr r7, [sp, 0x24]
adds r1, r7, r0
strh r3, [r1]
adds r0, r6, r0
strh r3, [r0]
adds r0, r4, r5
strb r3, [r0]
lsls r0, r5, 2
adds r0, r2, r0
str r3, [r0]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x4
bls _08024AE2
movs r5, 0
movs r3, 0
movs r4, 0xFF
ldr r6, [sp, 0x1C]
_08024B2C:
adds r0, r6, r5
strb r3, [r0]
ldr r1, [sp, 0x20]
adds r0, r1, r5
strb r3, [r0]
ldr r7, [sp, 0x14]
adds r0, r7, r5
strb r3, [r0]
lsls r1, r5, 1
ldr r0, [sp, 0x4]
adds r2, r0, r1
ldrb r0, [r2]
orrs r0, r4
strb r0, [r2]
ldr r7, [sp, 0x8]
adds r1, r7, r1
ldrb r0, [r1]
orrs r0, r4
strb r0, [r1]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0xA
bls _08024B2C
bl GetMultiplayerId
movs r1, 0
lsls r0, 24
cmp r0, 0
bne _08024B6A
movs r1, 0x1
_08024B6A:
ldr r0, [sp, 0x10]
strb r1, [r0]
bl GetLinkPlayerCount
mov r1, r8
strb r0, [r1]
bl GetMultiplayerId
ldr r3, [sp, 0x18]
strb r0, [r3]
movs r5, 0x1
mov r7, r8
ldrb r7, [r7]
cmp r5, r7
bcs _08024BB6
ldr r7, [sp, 0x18]
mov r6, r8
_08024B8C:
adds r4, r7, r5
subs r0, r5, 0x1
adds r0, r7, r0
ldrb r0, [r0]
adds r0, 0x1
strb r0, [r4]
ldrb r2, [r4]
ldrb r1, [r6]
subs r0, r1, 0x1
cmp r2, r0
ble _08024BAA
adds r0, r2, 0
bl __umodsi3
strb r0, [r4]
_08024BAA:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
ldrb r0, [r6]
cmp r5, r0
bcc _08024B8C
_08024BB6:
add sp, 0x28
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8024A30
thumb_func_start sub_8024BC8 thumb_func_start sub_8024BC8
sub_8024BC8: @ 8024BC8 sub_8024BC8: @ 8024BC8
push {r4,r5,lr} push {r4,r5,lr}

View File

@ -65,6 +65,7 @@ SECTIONS {
asm/union_room_chat.o(.text); asm/union_room_chat.o(.text);
asm/berry_crush.o(.text); asm/berry_crush.o(.text);
asm/berry_powder_vendor.o(.text); asm/berry_powder_vendor.o(.text);
src/dodrio_berry_picking.o(.text);
asm/dodrio_berry_picking.o(.text); asm/dodrio_berry_picking.o(.text);
asm/pokemon_jump.o(.text); asm/pokemon_jump.o(.text);
src/rtc.o(.text); src/rtc.o(.text);
@ -414,6 +415,7 @@ SECTIONS {
data/union_room_chat.o(.rodata); data/union_room_chat.o(.rodata);
data/berry_crush.o(.rodata); data/berry_crush.o(.rodata);
data/berry_powder_vendor.o(.rodata); data/berry_powder_vendor.o(.rodata);
src/dodrio_berry_picking.o(.rodata);
data/dodrio_berry_picking.o(.rodata); data/dodrio_berry_picking.o(.rodata);
data/pokemon_jump.o(.rodata); data/pokemon_jump.o(.rodata);
src/rtc.o(.rodata); src/rtc.o(.rodata);

183
src/dodrio_berry_picking.c Normal file
View File

@ -0,0 +1,183 @@
#include "global.h"
#include "alloc.h"
#include "link.h"
#include "task.h"
#include "main.h"
#include "constants/songs.h"
#include "sound.h"
struct DodrioBerryPickingSubstruct_004A
{
/*0x00*/ u16 unk00;
/*0x02*/ u8 filler02[10];
}; // size = 0x0C
struct DodrioBerryPickingSubstruct_31A0
{
u8 unk_00[0x3C - 0x00];
}; // size = 0x3C
struct DodrioBerryPickingSubstruct_318C
{
bool8 isShiny;
};
struct DodrioBerryPickingStruct
{
/*0x0000*/ void (*savedCallback)(void);
/*0x0004*/ u8 filler_0004[8];
/*0x000C*/ u8 unk_000C;
/*0x000D*/ u8 filler_000D[3];
/*0x0010*/ u8 unk_0010;
/*0x0011*/ u8 filler_0011[3];
/*0x0014*/ u8 unk_0014;
/*0x0015*/ u8 filler_0015[3];
/*0x0018*/ u8 unk_0018;
/*0x0019*/ u8 filler_0019[3];
/*0x001C*/ u8 unk_001C;
/*0x001D*/ u8 filler_001D[3];
/*0x0020*/ u8 unk_0020;
/*0x0021*/ u8 filler_0021[3];
/*0x0024*/ u8 unk_0024;
/*0x0025*/ u8 filler_0025[3];
/*0x0028*/ u8 multiplayerId;
/*0x0029*/ u8 filler_0029[7];
/*0x0030*/ u8 unk_0030;
/*0x0031*/ u8 filler_0031[3];
/*0x0034*/ u8 unk_0034[5];
/*0x0039*/ u8 filler_0039[3];
/*0x003C*/ u8 unk_003C;
/*0x003D*/ u8 filler_003D[3];
/*0x0040*/ u8 unk_0040;
/*0x0041*/ u8 filler_0041[3];
/*0x0044*/ u8 unk_0044;
/*0x0045*/ u8 filler_0045[3];
/*0x0048*/ u8 unk_0048;
// align 1
/*0x004A*/ u16 unk_004A[5][6];
/*0x0086*/ u8 filler_0086[18];
/*0x0098*/ u8 unk_0098[4];
/*0x009C*/ u8 filler_009C[12];
/*0x00A8*/ u8 unk_00A8[5];
/*0x00AD*/ u8 filler_00AD[3];
/*0x00B0*/ u8 unk_00B0[5];
/*0x00B5*/ u8 filler_00B5[0xC4 - 0xB5];
/*0x00C4*/ u8 unk_00C4[11];
/*0x00CF*/ u8 filler_00CF[1];
/*0x00D0*/ u8 unk_00D0[11];
/*0x00DB*/ u8 filler_00DB[1];
/*0x00DC*/ u8 unk_00DC[11];
/*0x00E7*/ u8 filler_0xE7[0xF4 - 0xE7];
/*0x00F4*/ u8 unk_00F4[11][2];
/*0x010A*/ u8 filler_010A[2];
/*0x010C*/ u8 unk_010C[5];
/*0x0111*/ u8 filler_0111[11];
/*0x011C*/ u32 unk_011C;
/*0x0120*/ u32 unk_0120;
/*0x0124*/ u8 filler_0124[8];
/*0x012C*/ u32 unk_012C;
/*0x0130*/ u32 unk_0130[5];
/*0x0144*/ u8 filler_0144[0x318C - 0x0144];
/*0x318C*/ struct DodrioBerryPickingSubstruct_318C unk_318C[5];
/*0x31A0*/ struct DodrioBerryPickingSubstruct_31A0 unk_31A0[5];
/*0x32CC*/ struct DodrioBerryPickingSubstruct_31A0 unk_32CC;
/*0x3308*/ u8 unk_3308[0x3330 - 0x3308];
}; // size = 0x3330
EWRAM_DATA struct DodrioBerryPickingStruct * gUnknown_02022C98 = NULL;
IWRAM_DATA bool32 gUnknown_03000DB0;
void sub_8024A1C(void);
void sub_8024A30(struct DodrioBerryPickingStruct *);
void sub_8024BC8(u8 taskId);
void sub_80261F8(struct DodrioBerryPickingSubstruct_318C *, struct Pokemon *);
void sub_80261CC(void);
void sub_8026B5C(u8, u8*, u8*);
void sub_80273F0(void);
void sub_802493C(u16 a0, void (*a1)(void))
{
gUnknown_03000DB0 = FALSE;
if (gReceivedRemoteLinkPlayers != 0 && (gUnknown_02022C98 = AllocZeroed(sizeof(*gUnknown_02022C98))) != NULL)
{
sub_8024A1C();
sub_8024A30(gUnknown_02022C98);
gUnknown_02022C98->savedCallback = a1;
gUnknown_02022C98->multiplayerId = GetMultiplayerId();
gUnknown_02022C98->unk_32CC = gUnknown_02022C98->unk_31A0[gUnknown_02022C98->multiplayerId];
sub_80261F8(&gUnknown_02022C98->unk_318C[gUnknown_02022C98->multiplayerId], &gPlayerParty[a0]);
CreateTask(sub_8024BC8, 1);
SetMainCallback2(sub_80261CC);
sub_80273F0();
sub_8026B5C(gUnknown_02022C98->unk_0024, &gUnknown_02022C98->unk_0044, &gUnknown_02022C98->unk_0048);
StopMapMusic();
PlayNewMapMusic(MUS_RG_KINOMIKUI);
}
else
{
SetMainCallback2(a1);
return;
}
}
void sub_8024A1C(void)
{
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
}
void sub_8024A30(struct DodrioBerryPickingStruct * data)
{
u8 i;
data->unk_000C = 0;
data->unk_0010 = 0;
data->unk_0014 = 0;
data->unk_0018 = 0;
data->unk_001C = 0;
data->unk_011C = 0;
data->unk_0120 = 0;
data->unk_0030 = 0;
data->unk_0040 = 0;
data->unk_003C = 0;
data->unk_012C = 0;
for (i = 0; i < 4; i++)
{
data->unk_0098[i] = 0;
}
for (i = 0; i < 5; i++)
{
data->unk_00A8[i] = 0;
data->unk_00B0[i] = 0;
data->unk_004A[i][0] = 0;
data->unk_004A[i][1] = 0;
data->unk_004A[i][2] = 0;
data->unk_004A[i][3] = 0;
data->unk_004A[i][5] = 0;
data->unk_010C[i] = 0;
data->unk_0130[i] = 0;
}
for (i = 0; i < 11; i++)
{
data->unk_00D0[i] = 0;
data->unk_00DC[i] = 0;
data->unk_00C4[i] = 0;
data->unk_00F4[i][0] = 0xFF;
data->unk_00F4[i][1] = 0xFF;
}
data->unk_0020 = GetMultiplayerId() == 0 ? 1 : 0;
data->unk_0024 = GetLinkPlayerCount();
data->unk_0034[0] = GetMultiplayerId();
for (i = 1; i < data->unk_0024; i++)
{
data->unk_0034[i] = data->unk_0034[i - 1] + 1;
if (data->unk_0034[i] > data->unk_0024 - 1)
data->unk_0034[i] %= data->unk_0024;
}
}

View File

@ -194,7 +194,6 @@ IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4; IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4;
IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8; IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8;
IWRAM_DATA void *gUnknown_03000DAC; IWRAM_DATA void *gUnknown_03000DAC;
IWRAM_DATA bool32 gUnknown_03000DB0;
// this file's functions // this file's functions
void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5);

View File

@ -8,6 +8,7 @@
.include "src/link.o" .include "src/link.o"
.include "src/link_rfu.o" .include "src/link_rfu.o"
.include "src/union_room.o" .include "src/union_room.o"
.include "src/dodrio_berry_picking.o"
.include "src/rtc.o" .include "src/rtc.o"
.include "src/main_menu.o" .include "src/main_menu.o"
.include "src/rom_8034C54.o" .include "src/rom_8034C54.o"

View File

@ -76,8 +76,7 @@ gUnknown_02022C90: @ 2022C90
gUnknown_02022C94: @ 2022C94 gUnknown_02022C94: @ 2022C94
.space 0x4 .space 0x4
gUnknown_02022C98: @ 2022C98 .include "src/dodrio_berry_picking.o"
.space 0x4
gUnknown_02022C9C: @ 2022C9C gUnknown_02022C9C: @ 2022C9C
.space 0x14 .space 0x14