Port berry_crush.c part 1 from Emerald
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user