Merge pull request #284 from PikalaxALT/berry_crush

Berry crush
This commit is contained in:
PikalaxALT 2020-03-03 15:55:58 -05:00 committed by GitHub
commit 0e468b49bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 3977 additions and 7986 deletions

View File

@ -1,7 +1,17 @@
#!/usr/bin/perl
use IPC::Cmd qw[ run ];
# Usage:
# calcrom.pl <mapfile> [--verbose]
#
# mapfile: path to .map file output by LD
# verbose: set to get more detailed output
use IPC::Cmd qw[ run ];
use Getopt::Long;
my $verbose = "";
GetOptions("verbose" => \$verbose);
(@ARGV == 1)
or die "ERROR: no map file specified.\n";
open(my $file, $ARGV[0])
@ -11,13 +21,15 @@ my $src = 0;
my $asm = 0;
my $srcdata = 0;
my $data = 0;
my @pairs = ();
while (my $line = <$file>)
{
if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/.+\.o/)
if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/(.+)\.o/)
{
my $section = $1;
my $size = hex($2);
my $dir = $3;
my $basename = $4;
if ($size & 3)
{
$size += 4 - ($size % 3);
@ -31,6 +43,10 @@ while (my $line = <$file>)
}
elsif ($dir eq 'asm')
{
if (!($basename =~ /(crt0|libagbsyscall|libgcnmultiboot|m4a_1)/))
{
push @pairs, [$basename, $size];
}
$asm += $size;
}
}
@ -48,6 +64,8 @@ while (my $line = <$file>)
}
}
my @sorted = sort { $a->[1] <=> $b->[1] } @pairs;
# Note that the grep filters out all branch labels. It also requires a minimum
# line length of 5, to filter out a ton of generated symbols (like AcCn). No
# settings to nm seem to remove these symbols. Finally, nm prints out a separate
@ -131,6 +149,17 @@ print "$total total bytes of code\n";
print "$src bytes of code in src ($srcPct%)\n";
print "$asm bytes of code in asm ($asmPct%)\n";
print "\n";
if ($verbose != 0)
{
print "BREAKDOWN\n";
foreach my $item (@sorted)
{
print " $item->[1] bytes in asm/$item->[0].s\n"
}
print "\n";
}
print "$total_syms total symbols\n";
print "$documented symbols documented ($docPct%)\n";
print "$partial_documented symbols partially documented ($partialPct%)\n";

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.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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

View File

@ -1,371 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_846E2E0:: @ 846E2E0
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
gUnknown_846E2E8:: @ 846E2E8
.byte 0x00, 0x01, 0x02, 0x03, 0x05, 0x00, 0x00, 0x00
gUnknown_846E2F0:: @ 846E2F0
.byte 0x04, 0x01, 0x00, 0xff
.byte 0x00, 0x00, 0x00, 0x04
.byte 0x02, 0x00, 0xff, 0x00
.byte 0x00, 0x00, 0x04, 0x02
.byte 0x00, 0xfe, 0x00, 0x00
.byte 0x00, 0x06, 0x03, 0x01
.byte 0xff, 0xfd, 0xff, 0x00
.byte 0x06, 0x04, 0x01, 0xfe
.byte 0xfc, 0xfe, 0x00, 0x00
gUnknown_846E314:: @ 846E314
.byte 0x03, 0x02, 0x01, 0x00
.byte 0x03, 0x03, 0x01, 0x00
.byte 0x03, 0x03, 0x02, 0x00
.byte 0x03, 0x04, 0x02, 0x00
.byte 0x03, 0x05, 0x03, 0x00
gUnknown_846E328:: @ 846E328
.4byte gUnknown_841CE3C
.4byte gUnknown_841CE78
.4byte gUnknown_841CEA8
.4byte gUnknown_841CF14
.4byte gUnknown_841CF50
.4byte gUnknown_841CF70
.4byte gUnknown_841CFA0
.4byte gUnknown_841CFD4
.4byte gUnknown_841D008
gUnknown_846E34C:: @ 846E34C
.4byte NULL
.4byte sub_814BBB8
.4byte sub_814BC10
.4byte sub_814BC74
.4byte sub_814BD7C
.4byte sub_814BD9C
.4byte sub_814BDBC
.4byte sub_814BE0C
.4byte sub_814BE64
.4byte sub_814BE7C
.4byte sub_814BFD0
.4byte sub_814C118
.4byte sub_814C24C
.4byte sub_814C850
.4byte sub_814C8F8
.4byte sub_814C990
.4byte sub_814CB20
.4byte sub_814CC0C
.4byte sub_814CFA8
.4byte sub_814D094
.4byte sub_814D188
.4byte sub_814D240
.4byte sub_814D31C
.4byte sub_814D3A4
.4byte sub_814D468
.4byte sub_814D4C8
gUnknown_846E3B4:: @ 846E3B4
.byte 0x02, 0x04, 0x06, 0x07
.byte 0x03, 0x05, 0x08, 0x0b
.byte 0x03, 0x07, 0x0b, 0x0f
.byte 0x04, 0x08, 0x0c, 0x11
gUnknown_846E3C4:: @ 846E3C4
.byte 0x05, 0x07, 0x09, 0x0c
gUnknown_846E3C8:: @ 846E3C8
.byte 0x03, 0x07, 0x0f, 0x1f
gUnknown_846E3CC:: @ 846E3CC
.4byte 0x000000f8
@ {
@ .bg = 0,
@ .charBaseIndex = 2,
@ .mapBaseIndex = 15,
@ .screenSize = 0,
@ .paletteMode = 0,
@ .priority = 0,
@ .baseTile = 0x0000
@ }
.4byte 0x000014d1
@ {
@ .bg = 1,
@ .charBaseIndex = 0,
@ .mapBaseIndex = 13,
@ .screenSize = 2,
@ .paletteMode = 0,
@ .priority = 1,
@ .baseTile = 0x0000
@ }
.4byte 0x000020c2
@ {
@ .bg = 2,
@ .charBaseIndex = 0,
@ .mapBaseIndex = 12,
@ .screenSize = 0,
@ .paletteMode = 0,
@ .priority = 2,
@ .baseTile = 0x0000
@ }
.4byte 0x000030b3
@ {
@ .bg = 3,
@ .charBaseIndex = 0,
@ .mapBaseIndex = 11,
@ .screenSize = 0,
@ .paletteMode = 0,
@ .priority = 3,
@ .baseTile = 0x0000
@ }
gUnknown_846E3DC:: @ 846E3DC
.byte 0x01, 0x02, 0x03
gUnknown_846E3DF:: @ 846E3DF
.byte 0x00, 0x01, 0x02
gUnknown_846E3E2:: @ 846E3E2
.byte 0x00, 0x03, 0x04
gUnknown_846E3E5:: @ 846E3E5
.byte 0x01, 0x08, 0x09
.byte 0x01, 0x06, 0x07
gUnknown_846E3EB:: @ 846E3EB
.byte 0x01, 0x04, 0x05
.align 2
gUnknown_846E3F0:: @ 846E3F0
.byte 0, 3, 4, 24, 13, 15
.2byte 0x0001
gUnknown_846E3F8:: @ 846E3F8
.byte 0, 0, 0, 9, 2, 8
.2byte 0x03ed
.byte 0, 0, 3, 9, 2, 8
.2byte 0x03db
.byte 0, 0, 6, 9, 2, 8
.2byte 0x03c9
.byte 0, 21, 3, 9, 2, 8
.2byte 0x03b7
.byte 0, 21, 6, 9, 2, 8
.2byte 0x03a5
.byte 255, 0, 0, 0, 0, 0
.2byte 0x0000
.byte 0, 4, 2, 22, 16, 15
.2byte 0x0001
.byte 0, 4, 2, 22, 16, 15
.2byte 0x0001
.byte 0, 3, 2, 24, 16, 15
.2byte 0x0001
.byte 255, 0, 0, 0, 0, 0
.2byte 0x0000
gUnknown_846E448:: @ 846E448
.byte 0x06, 0x08, 0x09, 0x0b
.byte 0x0c, 0x0e, 0x0f, 0x10
gUnknown_846E450:: @ 846E450
.4byte 50000000, 25000000, 12500000, 6250000, 3125000, 1562500, 781250, 390625
gUnknown_846E470:: @ 846E470 gbapal
.incbin "graphics/link_games/unk_846E4D0.gbapal"
gUnknown_846E490:: @ 846E490 gbapal
.incbin "graphics/link_games/unk_846E7FC.gbapal"
gUnknown_846E4B0:: @ 846E4B0 gbapal
.incbin "graphics/link_games/unk_846ECC4.gbapal"
gUnknown_846E4D0:: @ 846E4D0 4bpp.lz
.incbin "graphics/link_games/unk_846E4D0.4bpp.lz"
gUnknown_846E7FC:: @ 846E7FC 4bpp.lz
.incbin "graphics/link_games/unk_846E7FC.4bpp.lz"
gUnknown_846EB78:: @ 846EB78 4bpp.lz
.incbin "graphics/link_games/unk_846EB78.4bpp.lz"
gUnknown_846ECC4:: @ 846ECC4 4bpp.lz
.incbin "graphics/link_games/unk_846ECC4.4bpp.lz"
gUnknown_846ED90:: @ 846ED90 bin.lz
.incbin "graphics/link_games/unk_846ED90.bin.lz"
gUnknown_846EEC0:: @ 846EEC0 bin.lz
.incbin "graphics/link_games/unk_846EEC0.bin.lz"
gUnknown_846F058:: @ 846F058 bin.lz
.incbin "graphics/link_games/unk_846F058.bin.lz"
gUnknown_846F280:: @ 846F280
.byte 0x01, 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x01, 0x03, 0x00, 0x00
.byte 0x01, 0x03, 0x02, 0x04, 0x00
.byte 0x00, 0x01, 0x03, 0x02, 0x04
gUnknown_846F294:: @ 846F294
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x03, 0x00, 0xe4, 0xff, 0xfc, 0xff, 0xe8, 0xff, 0x10, 0x00
.byte 0x02, 0x00, 0x06, 0x00, 0xf0, 0xff, 0x14, 0x00, 0xf8, 0xff, 0x10, 0x00
.byte 0x03, 0x14, 0x03, 0x00, 0x1c, 0x00, 0xfc, 0xff, 0x20, 0x00, 0xf8, 0xff
.byte 0x04, 0x14, 0x06, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0xf8, 0xff
gUnknown_846F2D0:: @ 846F2D0
.byte 0x00, 0x00
.byte 0xff, 0x00
.byte 0x01, 0x01
gUnknown_846F2D6:: @ 846F2D6
.byte 0x00, 0x00
.byte 0xf0, 0xfc
.byte 0x10, 0xfc
.byte 0xf8, 0xfe
.byte 0x08, 0xfe
.byte 0xe8, 0xf8
.byte 0x18, 0xf8
.byte 0xe0, 0xf4
.byte 0x20, 0xf4
.byte 0xd8, 0xf0
.byte 0x28, 0xf0
gUnknown_846F2EC:: @ 846F2EC
.2byte 5, 6, 7, 8, 9
.align 2
gUnknown_846F2F8:: @ 846F2F8
obj_tiles gUnknown_846E4D0, 0x0800, 1
obj_tiles gUnknown_846E7FC, 0x0e00, 2
obj_tiles gUnknown_846EB78, 0x0700, 3
obj_tiles gUnknown_846ECC4, 0x02c0, 4
obj_tiles NULL, 0x0000, 0
gUnknown_846F320:: @ 846F320
obj_pal gUnknown_846E470, 1
obj_pal gUnknown_846E490, 2
obj_pal gUnknown_846E4B0, 4
obj_pal NULL, 0
gUnknown_846F340::
obj_image_anim_frame 0x0000, 0
obj_image_anim_end
gUnknown_846F348::
obj_image_anim_frame 0x0000, 4
obj_image_anim_frame 0x0010, 4
obj_image_anim_frame 0x0020, 4
obj_image_anim_end
gUnknown_846F358::
obj_image_anim_frame 0x0030, 2
obj_image_anim_frame 0x0040, 2
obj_image_anim_frame 0x0050, 2
obj_image_anim_frame 0x0060, 2
obj_image_anim_end
gUnknown_846F36C::
obj_image_anim_frame 0x0000, 2
obj_image_anim_frame 0x0004, 2
obj_image_anim_frame 0x0008, 2
obj_image_anim_frame 0x000c, 2
obj_image_anim_frame 0x0010, 2
obj_image_anim_frame 0x0014, 2
obj_image_anim_jump 0
gUnknown_846F388::
obj_image_anim_frame 0x0018, 4
obj_image_anim_frame 0x001c, 4
obj_image_anim_frame 0x0020, 4
obj_image_anim_frame 0x0024, 4
obj_image_anim_frame 0x0028, 4
obj_image_anim_frame 0x002c, 4
obj_image_anim_frame 0x0030, 4
obj_image_anim_frame 0x0034, 4
obj_image_anim_jump 0
gUnknown_846F3AC::
obj_image_anim_frame 0x0014, 0
obj_image_anim_end
gUnknown_846F3B4::
obj_image_anim_frame 0x0000, 0
obj_image_anim_end
gUnknown_846F3BC::
obj_rot_scal_anim_frame 256, 256, 0, 0
obj_rot_scal_anim_frame 0, 0, 2, 1
obj_rot_scal_anim_jump 1
gUnknown_846F3D4::
obj_rot_scal_anim_frame 256, 256, 0, 0
obj_rot_scal_anim_frame 0, 0, 254, 1
obj_rot_scal_anim_jump 1
gUnknown_846F3EC::
.4byte gUnknown_846F340
gUnknown_846F3F0::
.4byte gUnknown_846F348
.4byte gUnknown_846F358
gUnknown_846F3F8::
.4byte gUnknown_846F36C
.4byte gUnknown_846F388
gUnknown_846F400::
.4byte gUnknown_846F3AC
gUnknown_846F404::
.4byte gUnknown_846F3B4
gUnknown_846F408::
.4byte gUnknown_846F3BC
.4byte gUnknown_846F3D4
gUnknown_846F410:: @ 846F410
spr_template 1, 1, gOamData_AffineOff_ObjNormal_64x64, gUnknown_846F3EC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_846F428:: @ 846F428
spr_template 2, 2, gOamData_AffineOff_ObjNormal_32x32, gUnknown_846F3F0, NULL, gDummySpriteAffineAnimTable, sub_814EFD0
gUnknown_846F440:: @ 846F440
spr_template 3, 2, gOamData_AffineOff_ObjNormal_16x16, gUnknown_846F3F8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_846F458:: @ 846F458
spr_template 4, 4, gOamData_AffineOff_ObjNormal_8x16, gUnknown_846F400, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_846F470:: @ 846F470
spr_template 5, 5, gOamData_AffineDouble_ObjNormal_32x32, gUnknown_846F404, NULL, gUnknown_846F408, SpriteCallbackDummy
gUnknown_846F488:: @ 846F488 DigitObjUtilTemplate
@ strConvMode, shape, size, priority
.byte 1 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 9
.byte 2, 8 @ ndigits, width
.align 2
.2byte 0x9c, 0x00 @ x, y
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
.4byte gUnknown_846F320 + 0x10 @ spritePalette
@ strConvMode, shape, size, priority
.byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
.byte 2, 8 @ ndigits, width
.align 2
.2byte 0xb4, 0x00 @ x, y
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
.4byte gUnknown_846F320 + 0x10 @ spritePalette
@ strConvMode, shape, size, priority
.byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
.byte 2, 8 @ ndigits, width
.align 2
.2byte 0xcc, 0x00 @ x, y
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
.4byte gUnknown_846F320 + 0x10 @ spritePalette
gUnknown_846F4B8:: @ 846F4B8
.4byte gUnknown_841D034
.4byte gUnknown_841D03C
.4byte gUnknown_841D044
.4byte gUnknown_841D0D4
.4byte gUnknown_841D0E8
.4byte gUnknown_841D100

View File

@ -1,36 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_847565C_UnrefDupe:: @ 8471F00 struct BgTemplate(???)
.4byte 0x000001e0
.4byte 0x000012c9
.4byte 0x000012ea
.4byte 0x000021ff
.4byte 0x000000ff
.4byte 0x00000000
.align 2
gUnknown_8475674_UnrefDupe:: @ 8471F18
window_template 0x00, 0x01, 0x01, 0x1c, 0x03, 0x0d, 0x0013
window_template 0x00, 0x01, 0x06, 0x1c, 0x0d, 0x0d, 0x0067
.align 2
gUnknown_8475684_UnrefDupe:: @ 8471F28
window_template 0x00, 0x01, 0x06, 0x1c, 0x07, 0x0d, 0x0067
.align 2
gUnknown_847568C_UnrefDupe:: @ 8471F30
window_template 0x00, 0x01, 0x08, 0x13, 0x03, 0x0d, 0x0013
window_template 0x00, 0x16, 0x07, 0x06, 0x04, 0x0d, 0x004c
.align 2
gUnknown_847569C_UnrefDupe:: @ 8471F40
window_template 0x00, 0x04, 0x06, 0x16, 0x05, 0x0d, 0x0013
.align 2
gUnknown_84756A4_UnrefDupe:: @ 8471F48
window_template 0x00, 0x05, 0x08, 0x13, 0x03, 0x0d, 0x0013

View File

@ -13,18 +13,6 @@
.section .rodata
.align 2
gUnknown_8479668:: @ 8479668
.incbin "graphics/misc/unk_8479688.gbapal"
gUnknown_8479688::
.incbin "graphics/misc/unk_8479688.4bpp.lz"
gUnknown_8479748::
.incbin "graphics/misc/unk_8479748.4bpp.lz"
.section .rodata.after_trainer_tower
// berry_fix_program
gUnknown_847A8D8::

View File

@ -3448,90 +3448,90 @@ gUnknown_841D008:: @ 841D008
.string "Communication standby$"
.align 2
gUnknown_841D020:: @ 841D020
gText_1_ClrLtGryShdwBlk_Dynamic0:: @ 841D020
.string "1. {COLOR LIGHT_GRAY}{SHADOW BLACK}{DYNAMIC 0x00}$"
gUnknown_841D02C:: @ 841D02C
gText_1_Dynamic0:: @ 841D02C
.string "1. {DYNAMIC 0x00}$"
.align 2
gUnknown_841D034:: @ 0x841D034
gText_SpaceTimes:: @ 0x841D034
.string " times$"
.align 2
gUnknown_841D03C:: @ 0x841D03C
gText_XDotY:: @ 0x841D03C
.string "{STR_VAR_1}.{STR_VAR_2}$"
.align 2
gUnknown_841D044:: @ 0x841D044
gText_StrVar1Berry:: @ 0x841D044
.string "{STR_VAR_1} BERRY$"
.align 2
gUnknown_841D050:: @ 841D050
gText_TimeColon:: @ 841D050
.string "Time:$"
.align 2
gUnknown_841D058:: @ 841D058
gText_PressingSpeed:: @ 841D058
.string "Pressing Speed:$"
gUnknown_841D068:: @ 841D068
gText_Silkiness:: @ 841D068
.string "Silkiness:$"
.align 2
gUnknown_841D074:: @ 841D074
gText_StrVar1:: @ 841D074
.string "{STR_VAR_1}$"
.align 2
gUnknown_841D078:: @ 841D078
gText_SpaceMin:: @ 841D078
.string "min.$"
.align 2
gUnknown_841D080:: @ 841D080
gText_XDotY2:: @ 841D080
.string "{STR_VAR_1}.{STR_VAR_2}$"
.align 2
gUnknown_841D088:: @ 841D088
gText_SpaceSec:: @ 841D088
.string "sec.$"
.align 2
gUnknown_841D090:: @ 841D090
gText_XDotY3:: @ 841D090
.string "{STR_VAR_1}.{STR_VAR_2}$"
.align 2
gUnknown_841D098:: @ 841D098
gText_TimesPerSec:: @ 841D098
.string "Times/sec.$"
.align 2
gUnknown_841D0A4:: @ 841D0A4
.string "{STR_VAR_1}$"
gText_Var1Percent:: @ 841D0A4
.string "{STR_VAR_1}%$"
.align 2
gUnknown_841D0A8:: @ 841D0A8
gText_PressesRankings:: @ 841D0A8
.string "No. of Presses Rankings$"
.align 2
gUnknown_841D0C0:: @ 841D0C0
gText_CrushingResults:: @ 841D0C0
.string "Crushing Results$"
.align 2
gUnknown_841D0D4:: @ 0x841D0D4
gText_NeatnessRankings:: @ 0x841D0D4
.string "Neatness Rankings$"
.align 2
gUnknown_841D0E8:: @ 0x841D0E8
gText_CooperativeRankings:: @ 0x841D0E8
.string "Cooperative Rankings$"
.align 2
gUnknown_841D100:: @ 0x841D100
gText_PressingPowerRankings:: @ 0x841D100
.string "Pressing-Power Rankings$"
gUnknown_841D118:: @ 841D118
gText_BerryCrush2:: @ 841D118
.string "BERRY CRUSH$"
gUnknown_841D124:: @ 841D124
gText_PressingSpeedRankings:: @ 841D124
.string "Pressing-Speed Rankings$"
gUnknown_841D13C:: @ 841D13C
gText_Var1Players:: @ 841D13C
.string "{STR_VAR_1} PLAYERS$"
.align 2

View File

@ -72,6 +72,6 @@ struct UnkStruct_0858AB24 {
u16 unk1;
};
extern const struct UnkStruct_0858AB24 gUnknown_0858AB24[];
extern const struct UnkStruct_0858AB24 gUnknown_83DFC9C[];
#endif // GUARD_BERRY_H

View File

@ -1,6 +1,184 @@
#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];
};
#define PLAYER_UNK14(game, i) \
((u8 *)(game) \
+ offsetof(struct BerryCrushGame, unk68) \
+ offsetof(struct BerryCrushGame_68_x, unk30) \
+ sizeof(struct BerryCrushGame_Player) * (i))
struct BerryCrushGame *sub_814B6F0(void);
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);
int sub_814D9CC(struct BerryCrushGame *arg0);
int sub_814D5C8(void);
int sub_814D888(void);
void sub_814DA24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void sub_814DC24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void sub_814E80C(struct BerryCrushGame *arg0);
void sub_814DA04(struct BerryCrushGame *arg0);
void sub_814EB04(struct BerryCrushGame_138 *arg0);
void sub_814DB84(struct Sprite * sprite);
void ShowBerryCrushRankings(void);
#endif //GUARD_BERRY_CRUSH_H

View File

@ -11,8 +11,12 @@ struct DigitObjUtilTemplate
u8 xDelta;
s16 x;
s16 y;
const struct SpriteSheet *spriteSheet;
const struct SpritePalette *spritePal;
union
{
const struct SpriteSheet * uncompressed;
const struct CompressedSpriteSheet * compressed;
} spriteSheet;
const struct SpritePalette * spritePal;
};
extern const u16 gUnknown_8479668[];

View File

@ -4875,10 +4875,15 @@ extern const u32 gLinkMiscMenu_Tilemap[];
// union_room_chat_objects
extern const u32 gUnionRoomChatIcons[];
//battle_bg
// battle_bg
extern const u32 gFile_graphics_battle_transitions_vs_frame_sheet[];
extern const u32 gVsLettersGfx[];
extern const u32 gFile_graphics_battle_transitions_vs_frame_palette[];
extern const u32 gFile_graphics_battle_transitions_vs_frame_tilemap[];
// berry_crush
extern const u16 gUnknown_8EAFEA0[];
extern const u32 gUnknown_8EAFFC0[];
extern const u32 gUnknown_8EB0ADC[];
#endif //GUARD_GRAPHICS_H

View File

@ -79,5 +79,6 @@ void RemovePCItem(u16 itemId, u16 quantity);
void SortAndCompactBagPocket(struct BagPocket * pocket);
u8 CountItemsInPC(void);
void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
bool8 CheckHasAtLeastOneBerry(void);
#endif // GUARD_ITEM_H

View File

@ -275,6 +275,7 @@ bool32 GetRfuUnkCE8(void);
void sub_80FA4A8(void);
void sub_80FB9D0(void);
void sub_80FB030(u32 a0);
void sub_80FBA44(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];

View File

@ -3,5 +3,9 @@
s16 sub_80D8B90(s16 y);
s16 sub_80D8AA0(s16 x, s16 y);
s32 sub_80D8B68(s32 x, s32 y);
s32 sub_80D8AE0(s32 x, s32 y);
s16 sub_80D8B40(u8 s, s16 x, s16 y);
s16 sub_80D8ABC(u8 s, s16 x, s16 y);
#endif //GUARD_MATH_UTIL_H

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;

View File

@ -1148,4 +1148,38 @@ extern const u8 gUnknown_841DF92[];
extern const u8 gUnknown_841DF99[];
extern const u8 gUnknown_841DFA0[];
// berry_crush
extern const u8 gUnknown_841CE3C[];
extern const u8 gUnknown_841CE78[];
extern const u8 gUnknown_841CEA8[];
extern const u8 gUnknown_841CF14[];
extern const u8 gUnknown_841CF50[];
extern const u8 gUnknown_841CF70[];
extern const u8 gUnknown_841CFA0[];
extern const u8 gUnknown_841CFD4[];
extern const u8 gUnknown_841D008[];
extern const u8 gText_1_ClrLtGryShdwBlk_Dynamic0[];
extern const u8 gText_1_Dynamic0[];
extern const u8 gText_SpaceTimes[];
extern const u8 gText_XDotY[];
extern const u8 gText_StrVar1Berry[];
extern const u8 gText_TimeColon[];
extern const u8 gText_PressingSpeed[];
extern const u8 gText_Silkiness[];
extern const u8 gText_StrVar1[];
extern const u8 gText_SpaceMin[];
extern const u8 gText_XDotY2[];
extern const u8 gText_SpaceSec[];
extern const u8 gText_XDotY3[];
extern const u8 gText_TimesPerSec[];
extern const u8 gText_Var1Percent[];
extern const u8 gText_PressesRankings[];
extern const u8 gText_CrushingResults[];
extern const u8 gText_BerryCrush2[];
extern const u8 gText_PressingSpeedRankings[];
extern const u8 gText_Var1Players[];
extern const u8 gText_NeatnessRankings[];
extern const u8 gText_CooperativeRankings[];
extern const u8 gText_PressingPowerRankings[];
#endif //GUARD_STRINGS_H

View File

@ -279,9 +279,9 @@ SECTIONS {
src/pokemon_jump_4.o(.text);
src/pokemon_jump_5.o(.text);
src/pokemon_jump_6.o(.text);
asm/berry_crush.o(.text);
asm/berry_crush_2.o(.text);
asm/berry_crush_3.o(.text);
src/berry_crush.o(.text);
src/berry_crush_2.o(.text);
src/berry_crush_3.o(.text);
src/wireless_communication_status_screen.o(.text);
src/braille_text.o(.text);
src/text_window.o(.text);
@ -572,24 +572,23 @@ SECTIONS {
src/pokemon_jump_4.o(.rodata);
src/pokemon_jump_5.o(.rodata);
src/pokemon_jump_6.o(.rodata);
data/berry_crush.o(.rodata);
src/berry_crush_2.o(.rodata);
src/berry_crush_3.o(.rodata);
src/wireless_communication_status_screen.o(.rodata);
src/braille_text.o(.rodata);
src/text_window_graphics.o(.rodata);
src/quest_log_player.o(.rodata);
data/berry_powder.o(.rodata);
src/dodrio_berry_picking.o(.rodata);
src/battle_controller_pokedude.o(.rodata);
src/teachy_tv.o(.rodata);
src/digit_obj_util.o(.rodata);
data/data_8479668.o(.rodata);
src/ss_anne.o(.rodata);
src/cereader_tool.o(.rodata);
src/renewable_hidden_items.o(.rodata);
src/trainer_tower.o(.rodata);
src/minigame_countdown.o(.rodata);
src/berry_fix_program.o(.rodata);
data/data_8479668.o(.rodata.after_trainer_tower);
data/data_8479668.o(.rodata);
/* These should not be moved to C files */
src/mystery_event_msg.o(.rodata);

228
src/berry_crush.c Normal file
View File

@ -0,0 +1,228 @@
#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;
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);
}
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;
}
}

1480
src/berry_crush_2.c Normal file

File diff suppressed because it is too large Load Diff

1824
src/berry_crush_3.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -65,6 +65,10 @@ static const u8 sTilesPerImage[4][4] =
}
};
const u16 gUnknown_8479668[] = INCBIN_U16("graphics/misc/unk_8479688.gbapal");
const u32 gUnknown_8479688[] = INCBIN_U32("graphics/misc/unk_8479688.4bpp.lz");
const u32 gUnknown_8479748[] = INCBIN_U32("graphics/misc/unk_8479748.4bpp.lz");
// code
bool32 DigitObjUtil_Init(u32 count)
{
@ -125,19 +129,19 @@ bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemp
if (sOamWork->array[id].firstOamId == 0xFF)
return FALSE;
sOamWork->array[id].tileStart = GetSpriteTileStartByTag(template->spriteSheet->tag);
sOamWork->array[id].tileStart = GetSpriteTileStartByTag(template->spriteSheet.uncompressed->tag);
if (sOamWork->array[id].tileStart == 0xFFFF)
{
if (template->spriteSheet->size != 0)
if (template->spriteSheet.uncompressed->size != 0)
{
sOamWork->array[id].tileStart = LoadSpriteSheet(template->spriteSheet);
sOamWork->array[id].tileStart = LoadSpriteSheet(template->spriteSheet.uncompressed);
}
else
{
struct CompressedSpriteSheet compObjectPic;
compObjectPic = *(struct CompressedSpriteSheet*)(template->spriteSheet);
compObjectPic.size = GetDecompressedDataSize(template->spriteSheet->data);
compObjectPic = *template->spriteSheet.compressed;
compObjectPic.size = GetDecompressedDataSize((const void *)template->spriteSheet.compressed->data);
sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic);
}
@ -158,7 +162,7 @@ bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemp
sOamWork->array[id].priority = template->priority;
sOamWork->array[id].xDelta = template->xDelta;
sOamWork->array[id].tilesPerImage = GetTilesPerImage(template->shape, template->size);
sOamWork->array[id].tileTag = template->spriteSheet->tag;
sOamWork->array[id].tileTag = template->spriteSheet.uncompressed->tag;
sOamWork->array[id].palTag = template->spritePal->tag;
sOamWork->array[id].isActive = TRUE;

View File

@ -32,6 +32,128 @@
/*static*/ void nullsub_98(void);
// const rom data
// Large chunk of data
/*static*/ const struct BgTemplate sUnknown_847565C_Unref_Dupe[] =
{
{
.bg = 0,
.charBaseIndex = 0,
.mapBaseIndex = 30,
.screenSize = 0,
.paletteMode = 0,
.priority = 0,
.baseTile = 0
},
{
.bg = 1,
.charBaseIndex = 2,
.mapBaseIndex = 12,
.screenSize = 1,
.paletteMode = 0,
.priority = 1,
.baseTile = 0
},
{
.bg = 2,
.charBaseIndex = 2,
.mapBaseIndex = 14,
.screenSize = 1,
.paletteMode = 0,
.priority = 1,
.baseTile = 0
},
{
.bg = 3,
.charBaseIndex = 3,
.mapBaseIndex = 31,
.screenSize = 0,
.paletteMode = 0,
.priority = 2,
.baseTile = 0
},
};
// Unknown unreferenced data, feel free to remove.
/*static*/ const u32 sUnused_Unref_Dupe[] = {255, 0};
/*static*/ const struct WindowTemplate sUnknown_8475674_Unref_Dupe[] =
{
{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
.width = 28,
.height = 3,
.paletteNum = 13,
.baseBlock = 0x13,
},
{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 6,
.width = 28,
.height = 13,
.paletteNum = 13,
.baseBlock = 0x67,
}
};
/*static*/ const struct WindowTemplate sUnknown_8475684_Unref_Dupe =
{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 6,
.width = 28,
.height = 7,
.paletteNum = 13,
.baseBlock = 0x67,
};
/*static*/ const struct WindowTemplate sUnknown_847568C_Unref_Dupe[] =
{
{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 8,
.width = 19,
.height = 3,
.paletteNum = 13,
.baseBlock = 0x13,
},
{
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 7,
.width = 6,
.height = 4,
.paletteNum = 13,
.baseBlock = 0x4C,
}
};
/*static*/ const struct WindowTemplate sUnknown_847569C_Unref_Dupe =
{
.bg = 0,
.tilemapLeft = 4,
.tilemapTop = 6,
.width = 22,
.height = 5,
.paletteNum = 13,
.baseBlock = 0x13,
};
/*static*/ const struct WindowTemplate sUnknown_84756A4_Unref_Dupe =
{
.bg = 0,
.tilemapLeft = 5,
.tilemapTop = 8,
.width = 19,
.height = 3,
.paletteNum = 13,
.baseBlock = 0x13,
};
/*static*/ const u8 sUnknown_8471F50[5][5][11] =
{
{

View File

@ -766,7 +766,7 @@ static void sub_814A9C8(void)
ptr->xDelta = 8;
ptr->x = 108;
ptr->y = 6;
ptr->spriteSheet = (void*) &gUnknown_846D960;
ptr->spriteSheet.compressed = &gUnknown_846D960;
ptr->spritePal = &gUnknown_846D968;
DigitObjUtil_Init(2);

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