mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-04 10:20:01 +01:00
Dodrio: through sub_8024A30
This commit is contained in:
parent
456cc3a6f0
commit
98ab62a7af
@ -5,309 +5,6 @@
|
||||
|
||||
.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
|
||||
sub_8024BC8: @ 8024BC8
|
||||
push {r4,r5,lr}
|
||||
|
@ -65,6 +65,7 @@ SECTIONS {
|
||||
asm/union_room_chat.o(.text);
|
||||
asm/berry_crush.o(.text);
|
||||
asm/berry_powder_vendor.o(.text);
|
||||
src/dodrio_berry_picking.o(.text);
|
||||
asm/dodrio_berry_picking.o(.text);
|
||||
asm/pokemon_jump.o(.text);
|
||||
src/rtc.o(.text);
|
||||
@ -414,6 +415,7 @@ SECTIONS {
|
||||
data/union_room_chat.o(.rodata);
|
||||
data/berry_crush.o(.rodata);
|
||||
data/berry_powder_vendor.o(.rodata);
|
||||
src/dodrio_berry_picking.o(.rodata);
|
||||
data/dodrio_berry_picking.o(.rodata);
|
||||
data/pokemon_jump.o(.rodata);
|
||||
src/rtc.o(.rodata);
|
||||
|
183
src/dodrio_berry_picking.c
Normal file
183
src/dodrio_berry_picking.c
Normal 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;
|
||||
}
|
||||
}
|
@ -194,7 +194,6 @@ IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
|
||||
IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4;
|
||||
IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8;
|
||||
IWRAM_DATA void *gUnknown_03000DAC;
|
||||
IWRAM_DATA bool32 gUnknown_03000DB0;
|
||||
|
||||
// this file's functions
|
||||
void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5);
|
||||
|
@ -8,6 +8,7 @@
|
||||
.include "src/link.o"
|
||||
.include "src/link_rfu.o"
|
||||
.include "src/union_room.o"
|
||||
.include "src/dodrio_berry_picking.o"
|
||||
.include "src/rtc.o"
|
||||
.include "src/main_menu.o"
|
||||
.include "src/rom_8034C54.o"
|
||||
|
@ -76,8 +76,7 @@ gUnknown_02022C90: @ 2022C90
|
||||
gUnknown_02022C94: @ 2022C94
|
||||
.space 0x4
|
||||
|
||||
gUnknown_02022C98: @ 2022C98
|
||||
.space 0x4
|
||||
.include "src/dodrio_berry_picking.o"
|
||||
|
||||
gUnknown_02022C9C: @ 2022C9C
|
||||
.space 0x14
|
||||
|
Loading…
x
Reference in New Issue
Block a user