Port berry_crush.c part 1 from Emerald

This commit is contained in:
PikalaxALT
2020-03-02 16:57:00 -05:00
parent 1261a414cd
commit f77b0feba6
8 changed files with 416 additions and 599 deletions
-580
View File
@@ -1,580 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_814B6F0
sub_814B6F0: @ 814B6F0
ldr r0, _0814B6F8 @ =gUnknown_203F3DC
ldr r0, [r0]
bx lr
.align 2, 0
_0814B6F8: .4byte gUnknown_203F3DC
thumb_func_end sub_814B6F0
thumb_func_start sub_814B6FC
sub_814B6FC: @ 814B6FC
push {r4,r5,lr}
adds r4, r0, 0
ldr r5, _0814B70C @ =gUnknown_203F3DC
ldr r0, [r5]
cmp r0, 0
bne _0814B710
movs r0, 0x2
b _0814B740
.align 2, 0
_0814B70C: .4byte gUnknown_203F3DC
_0814B710:
cmp r4, 0
bne _0814B716
ldr r4, [r0]
_0814B716:
ldrb r0, [r0, 0xA]
bl DestroyTask
ldr r0, [r5]
bl Free
movs r0, 0
str r0, [r5]
adds r0, r4, 0
bl SetMainCallback2
ldr r0, _0814B748 @ =CB2_ReturnToField
cmp r4, r0
bne _0814B73E
ldr r0, _0814B74C @ =0x0000012f
bl PlayNewMapMusic
ldr r0, _0814B750 @ =sub_8056534
bl SetMainCallback1
_0814B73E:
movs r0, 0
_0814B740:
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0814B748: .4byte CB2_ReturnToField
_0814B74C: .4byte 0x0000012f
_0814B750: .4byte sub_8056534
thumb_func_end sub_814B6FC
thumb_func_start StartBerryCrush
StartBerryCrush: @ 814B754
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0xC
adds r4, r0, 0
movs r0, 0
mov r8, r0
ldr r0, _0814B784 @ =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
beq _0814B772
ldr r0, _0814B788 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0814B790
_0814B772:
adds r0, r4, 0
bl SetMainCallback2
ldr r0, _0814B78C @ =Rfu
mov r1, r8
strh r1, [r0, 0x10]
strh r1, [r0, 0x12]
b _0814B7DC
.align 2, 0
_0814B784: .4byte gReceivedRemoteLinkPlayers
_0814B788: .4byte gWirelessCommType
_0814B78C: .4byte Rfu
_0814B790:
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
mov r8, r0
bl GetMultiplayerId
lsls r0, 24
lsrs r7, r0, 24
mov r0, r8
cmp r0, 0x1
bls _0814B7AC
cmp r7, r8
bcc _0814B7C0
_0814B7AC:
adds r0, r4, 0
bl SetMainCallback2
ldr r0, _0814B7BC @ =Rfu
movs r1, 0
strh r1, [r0, 0x10]
strh r1, [r0, 0x12]
b _0814B7DC
.align 2, 0
_0814B7BC: .4byte Rfu
_0814B7C0:
ldr r6, _0814B7E8 @ =gUnknown_203F3DC
ldr r0, _0814B7EC @ =0x000041c0
bl AllocZeroed
adds r5, r0, 0
str r5, [r6]
cmp r5, 0
bne _0814B7F4
adds r0, r4, 0
bl SetMainCallback2
ldr r0, _0814B7F0 @ =Rfu
strh r5, [r0, 0x10]
strh r5, [r0, 0x12]
_0814B7DC:
adds r0, 0xEE
ldrb r1, [r0]
movs r1, 0x1
strb r1, [r0]
b _0814B84C
.align 2, 0
_0814B7E8: .4byte gUnknown_203F3DC
_0814B7EC: .4byte 0x000041c0
_0814B7F0: .4byte Rfu
_0814B7F4:
str r4, [r5]
movs r4, 0
strb r7, [r5, 0x8]
ldr r0, [r6]
mov r1, r8
strb r1, [r0, 0x9]
ldr r0, [r6]
bl sub_814BABC
ldr r1, [r6]
movs r2, 0x1
movs r0, 0x1
strh r0, [r1, 0x12]
strb r2, [r1, 0xE]
ldr r1, [r6]
movs r0, 0x6
strb r0, [r1, 0xF]
ldr r0, [r6]
adds r0, 0x36
movs r2, 0x1
negs r2, r2
movs r1, 0x10
str r1, [sp]
str r4, [sp, 0x4]
str r4, [sp, 0x8]
movs r1, 0x1
movs r3, 0
bl sub_814D564
ldr r2, [r6]
adds r2, 0x36
movs r0, 0x4
movs r1, 0x1
bl sub_814BB4C
ldr r0, _0814B858 @ =sub_814BA80
bl SetMainCallback2
ldr r0, _0814B85C @ =sub_814BA98
movs r1, 0x8
bl CreateTask
ldr r1, [r6]
strb r0, [r1, 0xA]
_0814B84C:
add sp, 0xC
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0814B858: .4byte sub_814BA80
_0814B85C: .4byte sub_814BA98
thumb_func_end StartBerryCrush
thumb_func_start sub_814B860
sub_814B860: @ 814B860
push {r4,lr}
sub sp, 0xC
ldr r1, _0814B878 @ =gSpecialVar_ItemId
ldrh r0, [r1]
subs r0, 0x85
lsls r0, 16
lsrs r0, 16
cmp r0, 0x2B
bls _0814B87C
movs r0, 0x85
strh r0, [r1]
b _0814B884
.align 2, 0
_0814B878: .4byte gSpecialVar_ItemId
_0814B87C:
ldrh r0, [r1]
movs r1, 0x1
bl RemoveBagItem
_0814B884:
ldr r4, _0814B8E0 @ =gUnknown_203F3DC
ldr r2, [r4]
ldrb r0, [r2, 0x8]
lsls r0, 5
adds r0, r2, r0
ldr r1, _0814B8E4 @ =gSpecialVar_ItemId
ldrh r1, [r1]
subs r1, 0x85
adds r0, 0xA4
movs r3, 0
strh r1, [r0]
movs r0, 0x1
strb r0, [r2, 0xE]
ldr r1, [r4]
movs r0, 0x9
strb r0, [r1, 0xF]
ldr r0, [r4]
adds r0, 0x36
movs r2, 0x1
negs r2, r2
movs r1, 0x10
str r1, [sp]
str r3, [sp, 0x4]
str r3, [sp, 0x8]
movs r1, 0
bl sub_814D564
ldr r2, [r4]
adds r2, 0x36
movs r0, 0x4
movs r1, 0x1
bl sub_814BB4C
ldr r0, _0814B8E8 @ =sub_814BA98
movs r1, 0x8
bl CreateTask
ldr r1, [r4]
strb r0, [r1, 0xA]
ldr r0, _0814B8EC @ =sub_814BA80
bl SetMainCallback2
add sp, 0xC
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0814B8E0: .4byte gUnknown_203F3DC
_0814B8E4: .4byte gSpecialVar_ItemId
_0814B8E8: .4byte sub_814BA98
_0814B8EC: .4byte sub_814BA80
thumb_func_end sub_814B860
thumb_func_start sub_814B8F0
sub_814B8F0: @ 814B8F0
push {lr}
ldr r0, _0814B90C @ =gUnknown_203F3DC
ldr r0, [r0]
ldrb r0, [r0, 0xA]
bl DestroyTask
ldr r1, _0814B910 @ =sub_814B860
movs r0, 0x5
movs r2, 0
bl InitBerryPouch
pop {r0}
bx r0
.align 2, 0
_0814B90C: .4byte gUnknown_203F3DC
_0814B910: .4byte sub_814B860
thumb_func_end sub_814B8F0
thumb_func_start sub_814B914
sub_814B914: @ 814B914
push {lr}
ldr r0, _0814B920 @ =sub_814BA6C
bl SetVBlankCallback
pop {r0}
bx r0
.align 2, 0
_0814B920: .4byte sub_814BA6C
thumb_func_end sub_814B914
thumb_func_start sub_814B924
sub_814B924: @ 814B924
push {lr}
movs r0, 0
bl SetVBlankCallback
pop {r0}
bx r0
thumb_func_end sub_814B924
thumb_func_start sub_814B930
sub_814B930: @ 814B930
push {r4,r5,lr}
ldr r4, _0814B974 @ =gUnknown_203F3DC
ldr r0, [r4]
adds r0, 0x6C
ldrh r2, [r0]
lsls r2, 8
movs r1, 0xF0
lsls r1, 6
adds r0, r2, 0
bl sub_80D8B68
adds r2, r0, 0
ldr r0, [r4]
adds r0, 0x72
ldrh r3, [r0]
lsls r3, 8
adds r0, r3, 0
adds r1, r2, 0
bl sub_80D8B68
adds r3, r0, 0
ldr r0, _0814B978 @ =0x0000ffff
ands r3, r0
ldr r2, [r4]
strh r3, [r2, 0x16]
ldrb r0, [r2, 0x9]
cmp r0, 0x3
beq _0814B9B4
cmp r0, 0x3
bgt _0814B97C
cmp r0, 0x2
beq _0814B986
b _0814BA3C
.align 2, 0
_0814B974: .4byte gUnknown_203F3DC
_0814B978: .4byte 0x0000ffff
_0814B97C:
cmp r0, 0x4
beq _0814B9E4
cmp r0, 0x5
beq _0814BA14
b _0814BA3C
_0814B986:
ldr r5, _0814B9B0 @ =gSaveBlock2Ptr
ldr r1, [r5]
movs r0, 0xAF
lsls r0, 4
adds r1, r0
lsls r0, r3, 16
lsrs r0, 16
ldrh r1, [r1]
cmp r0, r1
bls _0814BA3C
adds r2, 0x25
ldrb r0, [r2]
movs r1, 0x2
orrs r0, r1
strb r0, [r2]
ldr r0, [r5]
ldr r1, [r4]
ldrh r1, [r1, 0x16]
movs r2, 0xAF
lsls r2, 4
b _0814BA38
.align 2, 0
_0814B9B0: .4byte gSaveBlock2Ptr
_0814B9B4:
ldr r5, _0814B9DC @ =gSaveBlock2Ptr
ldr r1, [r5]
ldr r0, _0814B9E0 @ =0x00000af2
adds r1, r0
lsls r0, r3, 16
lsrs r0, 16
ldrh r1, [r1]
cmp r0, r1
bls _0814BA3C
adds r2, 0x25
ldrb r0, [r2]
movs r1, 0x2
orrs r0, r1
strb r0, [r2]
ldr r0, [r5]
ldr r1, [r4]
ldrh r1, [r1, 0x16]
ldr r2, _0814B9E0 @ =0x00000af2
b _0814BA38
.align 2, 0
_0814B9DC: .4byte gSaveBlock2Ptr
_0814B9E0: .4byte 0x00000af2
_0814B9E4:
ldr r5, _0814BA0C @ =gSaveBlock2Ptr
ldr r1, [r5]
ldr r0, _0814BA10 @ =0x00000af4
adds r1, r0
lsls r0, r3, 16
lsrs r0, 16
ldrh r1, [r1]
cmp r0, r1
bls _0814BA3C
adds r2, 0x25
ldrb r0, [r2]
movs r1, 0x2
orrs r0, r1
strb r0, [r2]
ldr r0, [r5]
ldr r1, [r4]
ldrh r1, [r1, 0x16]
ldr r2, _0814BA10 @ =0x00000af4
b _0814BA38
.align 2, 0
_0814BA0C: .4byte gSaveBlock2Ptr
_0814BA10: .4byte 0x00000af4
_0814BA14:
ldr r5, _0814BA60 @ =gSaveBlock2Ptr
ldr r1, [r5]
ldr r0, _0814BA64 @ =0x00000af6
adds r1, r0
lsls r0, r3, 16
lsrs r0, 16
ldrh r1, [r1]
cmp r0, r1
bls _0814BA3C
adds r2, 0x25
ldrb r0, [r2]
movs r1, 0x2
orrs r0, r1
strb r0, [r2]
ldr r0, [r5]
ldr r1, [r4]
ldrh r1, [r1, 0x16]
ldr r2, _0814BA64 @ =0x00000af6
_0814BA38:
adds r0, r2
strh r1, [r0]
_0814BA3C:
ldr r4, _0814BA68 @ =gUnknown_203F3DC
ldr r1, [r4]
ldr r0, [r1, 0x68]
str r0, [r1, 0x1C]
bl GiveBerryPowder
lsls r0, 24
cmp r0, 0
bne _0814BA5A
ldr r0, [r4]
adds r0, 0x25
ldrb r1, [r0]
movs r2, 0x1
orrs r1, r2
strb r1, [r0]
_0814BA5A:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0814BA60: .4byte gSaveBlock2Ptr
_0814BA64: .4byte 0x00000af6
_0814BA68: .4byte gUnknown_203F3DC
thumb_func_end sub_814B930
thumb_func_start sub_814BA6C
sub_814BA6C: @ 814BA6C
push {lr}
bl TransferPlttBuffer
bl LoadOam
bl ProcessSpriteCopyRequests
pop {r0}
bx r0
thumb_func_end sub_814BA6C
thumb_func_start sub_814BA80
sub_814BA80: @ 814BA80
push {lr}
bl RunTasks
bl RunTextPrinters
bl AnimateSprites
bl BuildOamBuffer
pop {r0}
bx r0
thumb_func_end sub_814BA80
thumb_func_start sub_814BA98
sub_814BA98: @ 814BA98
push {r4,lr}
ldr r4, _0814BAB8 @ =gUnknown_203F3DC
ldr r0, [r4]
ldr r2, [r0, 0x4]
cmp r2, 0
beq _0814BAAC
adds r1, r0, 0
adds r1, 0x36
bl _call_via_r2
_0814BAAC:
ldr r0, [r4]
bl sub_814D9CC
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0814BAB8: .4byte gUnknown_203F3DC
thumb_func_end sub_814BA98
thumb_func_start sub_814BABC
sub_814BABC: @ 814BABC
push {r4-r6,lr}
adds r6, r0, 0
movs r5, 0
b _0814BAE8
_0814BAC4:
lsls r4, r5, 5
adds r0, r4, 0
adds r0, 0x98
adds r0, r6, r0
lsls r1, r5, 3
subs r1, r5
lsls r1, 2
ldr r2, _0814BB2C @ =gLinkPlayers + 8
adds r1, r2
bl StringCopy
adds r4, r6, r4
adds r4, 0x9F
movs r0, 0xFF
strb r0, [r4]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
_0814BAE8:
ldrb r0, [r6, 0x9]
cmp r5, r0
bcc _0814BAC4
cmp r5, 0x4
bhi _0814BB14
_0814BAF2:
lsls r4, r5, 5
adds r0, r4, 0
adds r0, 0x98
adds r0, r6, r0
movs r1, 0x1
movs r2, 0x7
bl memset
adds r4, r6, r4
adds r4, 0x9F
movs r0, 0xFF
strb r0, [r4]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x4
bls _0814BAF2
_0814BB14:
ldr r0, _0814BB30 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x14]
lsls r0, 29
lsrs r0, 29
cmp r0, 0x1
beq _0814BB3E
cmp r0, 0x1
bgt _0814BB34
cmp r0, 0
beq _0814BB3A
b _0814BB46
.align 2, 0
_0814BB2C: .4byte gLinkPlayers + 8
_0814BB30: .4byte gSaveBlock2Ptr
_0814BB34:
cmp r0, 0x2
beq _0814BB42
b _0814BB46
_0814BB3A:
movs r0, 0x8
b _0814BB44
_0814BB3E:
movs r0, 0x4
b _0814BB44
_0814BB42:
movs r0, 0x1
_0814BB44:
strb r0, [r6, 0xB]
_0814BB46:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_814BABC
.align 2, 0 @ Don't pad with nop.
+15 -15
View File
@@ -3347,8 +3347,8 @@ _08056522:
_08056530: .4byte gUnknown_3005E90
thumb_func_end sub_80564C8
thumb_func_start sub_8056534
sub_8056534: @ 8056534
thumb_func_start CB1_Overworld
CB1_Overworld: @ 8056534
push {r4,lr}
ldr r4, _0805655C @ =gMain
ldr r1, [r4, 0x4]
@@ -3379,7 +3379,7 @@ _08056570:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8056534
thumb_func_end CB1_Overworld
thumb_func_start sub_8056578
sub_8056578: @ 8056578
@@ -3507,7 +3507,7 @@ CB2_NewGame: @ 8056644
ldr r0, _08056698 @ =gMain + 0x438
bl do_load_map_stuff_loop
bl SetFieldVBlankCallback
ldr r0, _0805669C @ =sub_8056534
ldr r0, _0805669C @ =CB1_Overworld
bl SetMainCallback1
ldr r0, _080566A0 @ =sub_80565B4
bl SetMainCallback2
@@ -3518,7 +3518,7 @@ _0805668C: .4byte gFieldCallback
_08056690: .4byte sub_807DF7C
_08056694: .4byte gFieldCallback2
_08056698: .4byte gMain + 0x438
_0805669C: .4byte sub_8056534
_0805669C: .4byte CB1_Overworld
_080566A0: .4byte sub_80565B4
thumb_func_end CB2_NewGame
@@ -3555,7 +3555,7 @@ CB2_WhiteOut: @ 80566A4
bl do_load_map_stuff_loop
bl sub_8112364
bl SetFieldVBlankCallback
ldr r0, _08056714 @ =sub_8056534
ldr r0, _08056714 @ =CB1_Overworld
bl SetMainCallback1
ldr r0, _08056718 @ =sub_80565B4
bl SetMainCallback2
@@ -3567,7 +3567,7 @@ _08056702:
_08056708: .4byte gMain
_0805670C: .4byte gFieldCallback
_08056710: .4byte sub_807F5F0
_08056714: .4byte sub_8056534
_08056714: .4byte CB1_Overworld
_08056718: .4byte sub_80565B4
thumb_func_end CB2_WhiteOut
@@ -3608,7 +3608,7 @@ sub_805674C: @ 805674C
_08056768: .4byte gMain + 0x438
_0805676C:
bl SetFieldVBlankCallback
ldr r0, _08056780 @ =sub_8056534
ldr r0, _08056780 @ =CB1_Overworld
bl SetMainCallback1
ldr r0, _08056784 @ =sub_80565B4
bl SetMainCallback2
@@ -3616,7 +3616,7 @@ _0805677C:
pop {r0}
bx r0
.align 2, 0
_08056780: .4byte sub_8056534
_08056780: .4byte CB1_Overworld
_08056784: .4byte sub_80565B4
thumb_func_end sub_805674C
@@ -3870,7 +3870,7 @@ _0805699C:
ldr r0, _080569B0 @ =gFieldCallback
ldr r1, _080569B4 @ =sub_8056918
str r1, [r0]
ldr r0, _080569B8 @ =sub_8056534
ldr r0, _080569B8 @ =CB1_Overworld
bl SetMainCallback1
bl CB2_ReturnToField
_080569AC:
@@ -3879,7 +3879,7 @@ _080569AC:
.align 2, 0
_080569B0: .4byte gFieldCallback
_080569B4: .4byte sub_8056918
_080569B8: .4byte sub_8056534
_080569B8: .4byte CB1_Overworld
thumb_func_end CB2_ContinueSavedGame
thumb_func_start FieldClearVBlankHBlankCallbacks
@@ -4963,7 +4963,7 @@ sub_80572D8: @ 80572D8
ldr r0, _080572F4 @ =gMain + 0x438
bl sub_8057300
bl SetFieldVBlankCallback
ldr r0, _080572F8 @ =sub_8056534
ldr r0, _080572F8 @ =CB1_Overworld
bl SetMainCallback1
ldr r0, _080572FC @ =sub_80565B4
bl SetMainCallback2
@@ -4971,7 +4971,7 @@ sub_80572D8: @ 80572D8
bx r0
.align 2, 0
_080572F4: .4byte gMain + 0x438
_080572F8: .4byte sub_8056534
_080572F8: .4byte CB1_Overworld
_080572FC: .4byte sub_80565B4
thumb_func_end sub_80572D8
@@ -5148,14 +5148,14 @@ _08057484: .4byte gUnknown_2036E28
_08057488: .4byte gUnknown_2031DE0
_0805748C: .4byte CB2_LoadMap
_08057490:
ldr r0, _080574A0 @ =sub_8056534
ldr r0, _080574A0 @ =CB1_Overworld
bl SetMainCallback1
bl CB2_ReturnToField
_0805749A:
pop {r0}
bx r0
.align 2, 0
_080574A0: .4byte sub_8056534
_080574A0: .4byte CB1_Overworld
thumb_func_end sub_8057430
thumb_func_start Overworld_CreditsMainCB
+159
View File
@@ -1,6 +1,165 @@
#ifndef GUARD_BERRY_CRUSH_H
#define GUARD_BERRY_CRUSH_H
struct BerryCrushGame_Player
{
u16 unk0;
u16 unk2;
union
{
u8 as_2d_bytes[2][8];
u16 as_hwords[8];
} unk4;
u8 unk14[12];
};
struct __attribute__((packed, aligned(2))) BerryCrushGame_4E
{
u16 unk0;
u16 filler2;
u8 unk4_0:1;
u8 unk4_1:1;
s8 unk5;
u16 unk6;
u16 unk8;
u16 unkA;
u16 unkC;
};
struct __attribute__((packed)) BerryCrushGame_40
{
u8 unk0[2];
u16 unk2[6];
struct BerryCrushGame_4E unkE;
};
struct BerryCrushGame_5C
{
u16 unk00;
u8 unk02_0:1;
u8 unk02_1:1;
u8 unk02_2:1;
u8 unk02_3:5;
u8 unk03;
u16 unk04;
u16 unk06;
u16 unk08;
u16 unk0A;
};
union BerryCrushGame_68
{
struct BerryCrushGame_68_x
{
struct BerryCrushGame_68_x_SubStruct
{
s32 unk00;
u16 unk04;
s16 unk06;
u16 unk08;
u16 unk0A;
u16 unk0C[2][5];
u8 filler20[16];
} unk00;
u8 unk30[12];
struct BerryCrushGame_Player others[4];
u8 fillerBC[20];
} as_four_players;
struct BerryCrushGame_68_y
{
u8 filler00[28];
struct BerryCrushGame_Player unk1C[5];
u8 fillerBC[20];
} as_five_players;
};
struct BerryCrushGame_138_C
{
u8 unk0;
u8 unk1;
u8 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
};
struct BerryCrushGame_138
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
s16 unk4;
s16 unk6;
s16 unk8;
const struct BerryCrushGame_138_C *unkC[5];
struct Sprite *unk20;
struct Sprite *unk24[5];
struct Sprite *unk38[5];
struct Sprite *unk4C[11];
struct Sprite *unk78[2];
u8 unk80;
u8 filler81;
u8 unk82;
u8 unk83[5];
};
struct BerryCrushGame
{
MainCallback unk0;
u32 (* unk4)(struct BerryCrushGame *, u8 *);
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u16 unk10;
u16 unk12;
u16 unk14;
u16 unk16;
s16 unk18;
s16 unk1A;
int unk1C;
s32 unk20;
u8 unk24;
u8 unk25_0:1;
u8 unk25_1:1;
u8 unk25_2:1;
u8 unk25_3:1;
u8 unk25_4:1;
u8 unk25_5:3;
u16 unk26;
u16 unk28;
s16 unk2A;
s16 unk2C;
s16 unk2E;
s16 unk30;
s16 unk32;
s16 unk34;
u8 unk36[0xA];
struct BerryCrushGame_40 unk40;
struct BerryCrushGame_5C unk5C;
union BerryCrushGame_68 unk68;
struct BerryCrushGame_138 unk138;
u8 unk1C0[0x1000];
u8 unk11C0[0x1000];
u8 unk21C0[0x1000];
u8 unk31C0[0x1000];
};
void StartBerryCrush(MainCallback callback);
u32 sub_814B6FC(MainCallback callback);
void sub_814B8F0(void);
void sub_814B914(void);
void sub_814B924(void);
void sub_814B930(void);
void sub_814BABC(struct BerryCrushGame *arg0);
void sub_814BB4C(u16, u8, u8 *);
void sub_814D564(u8 *, u32, s32, u32, u32, u32, u32);
void sub_814D9CC(struct BerryCrushGame *arg0);
#endif //GUARD_BERRY_CRUSH_H
+1
View File
@@ -3,5 +3,6 @@
s16 sub_80D8B90(s16 y);
s16 sub_80D8AA0(s16 x, s16 y);
s32 sub_80D8B68(s32 x, s32 y);
#endif //GUARD_MATH_UTIL_H
+2
View File
@@ -189,6 +189,8 @@ void sub_8057F34(void);
u32 sub_8057EC0(void);
void sub_8057F70(void);
void sub_8057F48(void);
void SetMainCallback1(MainCallback cb);
void CB1_Overworld(void);
extern u16 gHeldKeyCodeToSend;
+1 -1
View File
@@ -279,7 +279,7 @@ SECTIONS {
src/pokemon_jump_4.o(.text);
src/pokemon_jump_5.o(.text);
src/pokemon_jump_6.o(.text);
asm/berry_crush.o(.text);
src/berry_crush.o(.text);
asm/berry_crush_2.o(.text);
asm/berry_crush_3.o(.text);
src/wireless_communication_status_screen.o(.text);
+235
View File
@@ -0,0 +1,235 @@
#include "global.h"
#include "gflib.h"
#include "berry_crush.h"
#include "berry_pouch.h"
#include "berry_powder.h"
#include "item.h"
#include "item_menu.h"
#include "link.h"
#include "link_rfu.h"
#include "math_util.h"
#include "overworld.h"
#include "task.h"
#include "constants/songs.h"
#include "constants/items.h"
static EWRAM_DATA struct BerryCrushGame *gUnknown_203F3DC = NULL;
struct BerryCrushGame *sub_814B6F0(void);
static void sub_814B860(void);
static void sub_814BA6C(void);
static void sub_814BA80(void);
static void sub_814BA98(u8 taskId);
struct BerryCrushGame *sub_814B6F0(void)
{
return gUnknown_203F3DC;
}
u32 sub_814B6FC(MainCallback callback)
{
if (!gUnknown_203F3DC)
return 2;
if (!callback)
callback = gUnknown_203F3DC->unk0;
DestroyTask(gUnknown_203F3DC->unkA);
FREE_AND_SET_NULL(gUnknown_203F3DC);
SetMainCallback2(callback);
if (callback == CB2_ReturnToField)
{
PlayNewMapMusic(MUS_POKECEN);
SetMainCallback1(CB1_Overworld);
}
return 0;
}
void StartBerryCrush(MainCallback callback)
{
u8 playerCount = 0;
u8 multiplayerId;
if (!gReceivedRemoteLinkPlayers || gWirelessCommType == 0)
{
SetMainCallback2(callback);
Rfu.linkman_param[0] = 0;
Rfu.linkman_param[1] = 0;
Rfu.errorState = 1;
return;
}
playerCount = GetLinkPlayerCount();
multiplayerId = GetMultiplayerId();
if (playerCount < 2 || multiplayerId >= playerCount)
{
SetMainCallback2(callback);
Rfu.linkman_param[0] = 0;
Rfu.linkman_param[1] = 0;
Rfu.errorState = 1;
return;
}
gUnknown_203F3DC = AllocZeroed(sizeof(*gUnknown_203F3DC));
if (!gUnknown_203F3DC)
{
SetMainCallback2(callback);
Rfu.linkman_param[0] = 0;
Rfu.linkman_param[1] = 0;
Rfu.errorState = 1;
return;
}
gUnknown_203F3DC->unk0 = callback;
gUnknown_203F3DC->unk8 = multiplayerId;
gUnknown_203F3DC->unk9 = playerCount;
sub_814BABC(gUnknown_203F3DC);
gUnknown_203F3DC->unk12 = 1;
gUnknown_203F3DC->unkE = 1;
gUnknown_203F3DC->unkF = 6;
sub_814D564(gUnknown_203F3DC->unk36, 1, -1, 0, 16, 0, 0);
sub_814BB4C(4, 1, gUnknown_203F3DC->unk36);
SetMainCallback2(sub_814BA80);
gUnknown_203F3DC->unkA = CreateTask(sub_814BA98, 8);
}
static void sub_814B860(void)
{
if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1)
gSpecialVar_ItemId = ITEM_CHERI_BERRY;
else
RemoveBagItem(gSpecialVar_ItemId, 1);
gUnknown_203F3DC->unk68.as_four_players.others[gUnknown_203F3DC->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
gUnknown_203F3DC->unkE = 1;
gUnknown_203F3DC->unkF = 9;
sub_814D564(gUnknown_203F3DC->unk36, 0, -1, 0, 16, 0, 0);
sub_814BB4C(4, 1, gUnknown_203F3DC->unk36);
gUnknown_203F3DC->unkA = CreateTask(sub_814BA98, 8);
SetMainCallback2(sub_814BA80);
}
void sub_814B8F0(void)
{
DestroyTask(gUnknown_203F3DC->unkA);
InitBerryPouch(BERRYPOUCH_FROMBERRYCRUSH, sub_814B860, FALSE);
}
void sub_814B914(void)
{
SetVBlankCallback(sub_814BA6C);
}
void sub_814B924(void)
{
SetVBlankCallback(NULL);
}
void sub_814B930(void)
{
u32 var0, var1;
var0 = gUnknown_203F3DC->unk68.as_four_players.unk00.unk04;
var0 <<= 8;
var0 = sub_80D8B68(var0, 60 << 8);
var1 = gUnknown_203F3DC->unk68.as_four_players.unk00.unk0A;
var1 <<= 8;
var1 = sub_80D8B68(var1, var0) & 0xFFFF;
gUnknown_203F3DC->unk16 = var1;
switch (gUnknown_203F3DC->unk9)
{
case 2:
if (gUnknown_203F3DC->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0])
{
gUnknown_203F3DC->unk25_1 = 1;
gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gUnknown_203F3DC->unk16;
}
break;
case 3:
if (gUnknown_203F3DC->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1])
{
gUnknown_203F3DC->unk25_1 = 1;
gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gUnknown_203F3DC->unk16;
}
break;
case 4:
if (gUnknown_203F3DC->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2])
{
gUnknown_203F3DC->unk25_1 = 1;
gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gUnknown_203F3DC->unk16;
}
break;
case 5:
if (gUnknown_203F3DC->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3])
{
gUnknown_203F3DC->unk25_1 = 1;
gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gUnknown_203F3DC->unk16;
}
break;
}
gUnknown_203F3DC->unk1C = gUnknown_203F3DC->unk68.as_four_players.unk00.unk00;
if (GiveBerryPowder(gUnknown_203F3DC->unk1C))
return;
gUnknown_203F3DC->unk25_0 = 1;
}
static void sub_814BA6C(void)
{
TransferPlttBuffer();
LoadOam();
ProcessSpriteCopyRequests();
}
static void sub_814BA80(void)
{
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
}
static void sub_814BA98(u8 taskId)
{
if (gUnknown_203F3DC->unk4)
gUnknown_203F3DC->unk4(gUnknown_203F3DC, gUnknown_203F3DC->unk36);
sub_814D9CC(gUnknown_203F3DC);
}
#define PLAYER_UNK14(game, i) \
((u8 *)(game) \
+ offsetof(struct BerryCrushGame, unk68) \
+ offsetof(struct BerryCrushGame_68_x, unk30) \
+ sizeof(struct BerryCrushGame_Player) * (i))
void sub_814BABC(struct BerryCrushGame *arg0)
{
u8 i;
for (i = 0; i < arg0->unk9; i++)
{
StringCopy(PLAYER_UNK14(arg0, i), gLinkPlayers[i].name);
arg0->unk68.as_five_players.unk1C[i].unk14[PLAYER_NAME_LENGTH] = EOS;
}
for (; i < 5; i++)
{
memset(PLAYER_UNK14(arg0, i), 1, PLAYER_NAME_LENGTH);
arg0->unk68.as_five_players.unk1C[i].unk14[PLAYER_NAME_LENGTH] = EOS;
}
switch (gSaveBlock2Ptr->optionsTextSpeed)
{
case OPTIONS_TEXT_SPEED_SLOW:
arg0->unkB = 8;
break;
case OPTIONS_TEXT_SPEED_MID:
arg0->unkB = 4;
break;
case OPTIONS_TEXT_SPEED_FAST:
arg0->unkB = 1;
break;
}
}
+3 -3
View File
@@ -447,10 +447,10 @@ gUnknown_203B170: @ 203B170
.include "src/pokemon_jump_2.o"
.align 2
.include "src/pokemon_jump_4.o"
.align 2
.include "src/berry_crush.o"
gUnknown_203F3DC: @ 203F3DC
.space 0x4
.align 2
gUnknown_203F3E0: @ 203F3E0
.space 0x4