summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_anim_813F0F4.s8
-rw-r--r--asm/pokeball.s2787
-rw-r--r--asm/pokemon_summary_screen.s4
-rw-r--r--data/pokeball.s137
-rw-r--r--include/data2.h19
-rw-r--r--include/decompress.h14
-rw-r--r--include/field_effect.h6
-rw-r--r--include/graphics.h26
-rw-r--r--include/intro_credits_graphics.h14
-rw-r--r--include/pokeball.h6
-rw-r--r--include/pokemon.h5
-rw-r--r--include/songs.h20
-rw-r--r--include/sprite.h21
-rwxr-xr-xld_script.txt4
-rw-r--r--src/battle_7.c50
-rw-r--r--src/battle_anim.c4
-rw-r--r--src/berry_tag_screen.c4
-rw-r--r--src/credits.c6
-rw-r--r--src/decompress.c64
-rwxr-xr-xsrc/field_effect.c3
-rw-r--r--src/intro.c18
-rw-r--r--src/money.c4
-rw-r--r--src/pokeball.c1193
-rw-r--r--src/pokedex.c10
-rw-r--r--src/pokemon_3.c8
-rw-r--r--src/script_pokemon_util_80C4BF0.c19
-rw-r--r--src/starter_choose.c4
-rw-r--r--src/title_screen.c6
-rw-r--r--src/wallclock.c2
29 files changed, 1393 insertions, 3073 deletions
diff --git a/asm/battle_anim_813F0F4.s b/asm/battle_anim_813F0F4.s
index 296db945e..a5ab2fb83 100644
--- a/asm/battle_anim_813F0F4.s
+++ b/asm/battle_anim_813F0F4.s
@@ -1218,7 +1218,7 @@ sub_813FA94: @ 813FA94
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
- ldr r1, _0813FB5C @ =gSpriteTemplate_820AAB4
+ ldr r1, _0813FB5C @ =gBallSpriteTemplates
adds r0, r1
movs r1, 0x20
movs r2, 0x50
@@ -1295,7 +1295,7 @@ sub_813FA94: @ 813FA94
bx r0
.align 2, 0
_0813FB58: .4byte gLastUsedItem
-_0813FB5C: .4byte gSpriteTemplate_820AAB4
+_0813FB5C: .4byte gBallSpriteTemplates
_0813FB60: .4byte gSprites
_0813FB64: .4byte gBattleAnimEnemyMonIndex
_0813FB68: .4byte sub_813FD90
@@ -1378,7 +1378,7 @@ _0813FBE0:
lsls r0, r4, 1
adds r0, r4
lsls r0, 3
- ldr r1, _0813FCA0 @ =gSpriteTemplate_820AAB4
+ ldr r1, _0813FCA0 @ =gBallSpriteTemplates
adds r0, r1
adds r1, r6, 0
adds r1, 0x20
@@ -1447,7 +1447,7 @@ _0813FBE0:
bx r0
.align 2, 0
_0813FC9C: .4byte gLastUsedItem
-_0813FCA0: .4byte gSpriteTemplate_820AAB4
+_0813FCA0: .4byte gBallSpriteTemplates
_0813FCA4: .4byte gSprites
_0813FCA8: .4byte gBattleAnimEnemyMonIndex
_0813FCAC: .4byte SpriteCallbackDummy
diff --git a/asm/pokeball.s b/asm/pokeball.s
deleted file mode 100644
index eea360775..000000000
--- a/asm/pokeball.s
+++ /dev/null
@@ -1,2787 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8046400
-sub_8046400: @ 8046400
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _08046450 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r6, _08046454 @ =gActiveBank
- ldrb r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08046458 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0]
- ldr r0, _0804645C @ =sub_8046464
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08046460 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- ldrb r0, [r6]
- strh r0, [r1, 0xE]
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08046450: .4byte gDoingBattleAnim
-_08046454: .4byte gActiveBank
-_08046458: .4byte 0x02017810
-_0804645C: .4byte sub_8046464
-_08046460: .4byte gTasks
- thumb_func_end sub_8046400
-
- thumb_func_start sub_8046464
-sub_8046464: @ 8046464
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r0, 0
- str r0, [sp]
- ldr r1, _08046498 @ =gTasks
- mov r2, r10
- lsls r0, r2, 2
- add r0, r10
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x8]
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _0804649C
- adds r0, r2, 0x1
- strh r0, [r1, 0x8]
- b _08046616
- .align 2, 0
-_08046498: .4byte gTasks
-_0804649C:
- ldrh r0, [r1, 0xC]
- mov r8, r0
- ldrb r5, [r1, 0xE]
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _080464C8
- ldr r1, _080464C0 @ =gBattlePartyID
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080464C4 @ =gEnemyParty
- b _080464D6
- .align 2, 0
-_080464C0: .4byte gBattlePartyID
-_080464C4: .4byte gEnemyParty
-_080464C8:
- ldr r1, _08046544 @ =gBattlePartyID
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08046548 @ =gPlayerParty
-_080464D6:
- adds r0, r1
- movs r1, 0x26
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl ball_number_to_ball_processing_index
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80478DC
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- ldr r1, _0804654C @ =gSpriteTemplate_820AAB4
- adds r0, r1
- movs r1, 0x20
- movs r2, 0x50
- movs r3, 0x1D
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, _08046550 @ =gSprites
- mov r9, r2
- lsls r0, r7, 4
- adds r0, r7
- lsls r6, r0, 2
- adds r4, r6, r2
- movs r0, 0x80
- strh r0, [r4, 0x2E]
- movs r3, 0
- strh r3, [r4, 0x30]
- mov r0, r8
- strh r0, [r4, 0x3C]
- mov r2, r8
- cmp r2, 0xFE
- beq _0804655C
- cmp r2, 0xFF
- bne _08046598
- ldr r0, _08046554 @ =gBankTarget
- strb r5, [r0]
- movs r0, 0x18
- strh r0, [r4, 0x20]
- movs r0, 0x44
- strh r0, [r4, 0x22]
- mov r0, r9
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _08046558 @ =sub_8047074
- str r1, [r0]
- b _080465A6
- .align 2, 0
-_08046544: .4byte gBattlePartyID
-_08046548: .4byte gPlayerParty
-_0804654C: .4byte gSpriteTemplate_820AAB4
-_08046550: .4byte gSprites
-_08046554: .4byte gBankTarget
-_08046558: .4byte sub_8047074
-_0804655C:
- adds r0, r5, 0
- movs r1, 0
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x18
- strh r0, [r4, 0x22]
- ldr r0, _08046590 @ =gBankTarget
- strb r5, [r0]
- movs r3, 0
- strh r3, [r4, 0x2E]
- mov r0, r9
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _08046594 @ =sub_8047254
- str r1, [r0]
- b _080465A6
- .align 2, 0
-_08046590: .4byte gBankTarget
-_08046594: .4byte sub_8047254
-_08046598:
- movs r0, 0x1
- bl GetBankByPlayerAI
- ldr r1, _080465C4 @ =gBankTarget
- strb r0, [r1]
- movs r0, 0x1
- str r0, [sp]
-_080465A6:
- ldr r0, _080465C8 @ =gSprites
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- adds r4, r1, r0
- ldr r5, _080465C4 @ =gBankTarget
- ldrb r0, [r5]
- strh r0, [r4, 0x3A]
- ldr r2, [sp]
- cmp r2, 0
- bne _080465CC
- mov r0, r10
- bl DestroyTask
- b _08046616
- .align 2, 0
-_080465C4: .4byte gBankTarget
-_080465C8: .4byte gSprites
-_080465CC:
- movs r0, 0x22
- strh r0, [r4, 0x2E]
- ldrb r0, [r5]
- movs r1, 0
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrb r0, [r5]
- movs r1, 0x1
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x10
- strh r0, [r4, 0x36]
- ldr r0, _08046628 @ =0x0000ffd8
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl sub_80786EC
- mov r3, r10
- strh r3, [r4, 0x6]
- ldr r1, _0804662C @ =gTasks
- mov r2, r10
- lsls r0, r2, 2
- add r0, r10
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r5]
- strh r1, [r0, 0x10]
- ldr r1, _08046630 @ =TaskDummy
- str r1, [r0]
- movs r0, 0x3D
- bl PlaySE
-_08046616:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08046628: .4byte 0x0000ffd8
-_0804662C: .4byte gTasks
-_08046630: .4byte TaskDummy
- thumb_func_end sub_8046464
-
- thumb_func_start objc_0804ABD4
-objc_0804ABD4: @ 8046634
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r7, r0, 0
- bl sub_8078718
- lsls r0, 24
- cmp r0, 0
- beq _080466D4
- ldrb r6, [r7, 0x6]
- ldr r1, _080466E0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldrb r5, [r0, 0x10]
- ldrb r0, [r0, 0xC]
- mov r8, r0
- adds r0, r7, 0
- movs r1, 0x1
- bl StartSpriteAnim
- adds r2, r7, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r7, 0x24]
- ldrh r1, [r7, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r7, 0x20]
- ldrh r0, [r7, 0x26]
- ldrh r2, [r7, 0x22]
- adds r0, r2
- strh r0, [r7, 0x22]
- strh r1, [r7, 0x24]
- strh r1, [r7, 0x26]
- strh r1, [r7, 0x38]
- adds r0, r5, 0
- bl sub_8047978
- lsls r0, 16
- lsrs r0, 16
- bl ball_number_to_ball_processing_index
- adds r4, r0, 0
- ldrh r0, [r7, 0x20]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r7, 0x22]
- subs r1, 0x5
- lsls r1, 24
- lsrs r1, 24
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- movs r2, 0x1
- movs r3, 0x1C
- bl sub_814086C
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0xE
- adds r3, r4, 0
- bl sub_8141314
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7, 0x2E]
- strh r5, [r7, 0x3A]
- mov r0, r8
- strh r0, [r7, 0x3C]
- adds r0, r6, 0
- bl DestroyTask
- ldr r0, _080466E4 @ =sub_80466E8
- str r0, [r7, 0x1C]
-_080466D4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080466E0: .4byte gTasks
-_080466E4: .4byte sub_80466E8
- thumb_func_end objc_0804ABD4
-
- thumb_func_start sub_80466E8
-sub_80466E8: @ 80466E8
- ldr r1, _080466F0 @ =sub_80466F4
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_080466F0: .4byte sub_80466F4
- thumb_func_end sub_80466E8
-
- thumb_func_start sub_80466F4
-sub_80466F4: @ 80466F4
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r0, [r6, 0x38]
- adds r0, 0x1
- movs r7, 0
- strh r0, [r6, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _0804674E
- strh r7, [r6, 0x38]
- ldr r0, _08046754 @ =sub_8046760
- str r0, [r6, 0x1C]
- ldr r5, _08046758 @ =gObjectBankIDs
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0804675C @ =gSprites
- adds r0, r4
- movs r1, 0x2
- bl StartSpriteAffineAnim
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl AnimateSprite
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x30]
-_0804674E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08046754: .4byte sub_8046760
-_08046758: .4byte gObjectBankIDs
-_0804675C: .4byte gSprites
- thumb_func_end sub_80466F4
-
- thumb_func_start sub_8046760
-sub_8046760: @ 8046760
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _08046778
- movs r0, 0x3C
- bl PlaySE
-_08046778:
- ldr r6, _080467C4 @ =gSprites
- ldr r5, _080467C8 @ =gObjectBankIDs
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _080467D0
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- movs r0, 0
- strh r0, [r4, 0x38]
- ldr r0, _080467CC @ =sub_80467F8
- str r0, [r4, 0x1C]
- b _080467F0
- .align 2, 0
-_080467C4: .4byte gSprites
-_080467C8: .4byte gObjectBankIDs
-_080467CC: .4byte sub_80467F8
-_080467D0:
- ldrh r0, [r1, 0x30]
- adds r0, 0x60
- strh r0, [r1, 0x30]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- adds r0, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- movs r2, 0x30
- ldrsh r0, [r1, r2]
- negs r0, r0
- asrs r0, 8
- strh r0, [r1, 0x26]
-_080467F0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8046760
-
- thumb_func_start sub_80467F8
-sub_80467F8: @ 80467F8
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08046840
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- bne _08046840
- strh r1, [r4, 0x34]
- movs r0, 0x20
- strh r0, [r4, 0x36]
- strh r1, [r4, 0x38]
- movs r0, 0
- movs r1, 0x20
- bl Cos
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- movs r0, 0x36
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl Cos
- negs r0, r0
- strh r0, [r4, 0x26]
- ldr r0, _08046848 @ =sub_804684C
- str r0, [r4, 0x1C]
-_08046840:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08046848: .4byte sub_804684C
- thumb_func_end sub_80467F8
-
- thumb_func_start sub_804684C
-sub_804684C: @ 804684C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0
- ldrh r0, [r4, 0x34]
- movs r1, 0xFF
- ands r1, r0
- cmp r1, 0
- beq _08046862
- cmp r1, 0x1
- beq _080468D6
- b _08046902
-_08046862:
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl Cos
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x38]
- adds r1, 0x4
- ldrh r2, [r4, 0x34]
- lsls r0, r2, 16
- asrs r0, 24
- adds r1, r0
- strh r1, [r4, 0x38]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x3F
- ble _08046902
- ldrh r0, [r4, 0x36]
- subs r0, 0xA
- strh r0, [r4, 0x36]
- ldr r1, _080468AC @ =0x00000101
- adds r0, r2, r1
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 24
- cmp r0, 0x4
- bne _0804689E
- movs r5, 0x1
-_0804689E:
- cmp r0, 0x2
- beq _080468BE
- cmp r0, 0x2
- bgt _080468B0
- cmp r0, 0x1
- beq _080468B6
- b _080468CE
- .align 2, 0
-_080468AC: .4byte 0x00000101
-_080468B0:
- cmp r0, 0x3
- beq _080468C6
- b _080468CE
-_080468B6:
- movs r0, 0x38
- bl PlaySE
- b _08046902
-_080468BE:
- movs r0, 0x39
- bl PlaySE
- b _08046902
-_080468C6:
- movs r0, 0x3A
- bl PlaySE
- b _08046902
-_080468CE:
- movs r0, 0x3B
- bl PlaySE
- b _08046902
-_080468D6:
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- bl Cos
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x38]
- subs r1, 0x4
- ldrh r2, [r4, 0x34]
- lsls r0, r2, 16
- asrs r0, 24
- subs r1, r0
- strh r1, [r4, 0x38]
- lsls r1, 16
- cmp r1, 0
- bgt _08046902
- strh r5, [r4, 0x38]
- ldr r0, _08046928 @ =0xffffff00
- ands r0, r2
- strh r0, [r4, 0x34]
-_08046902:
- cmp r5, 0
- beq _0804693A
- movs r5, 0
- strh r5, [r4, 0x34]
- movs r0, 0x40
- movs r1, 0x20
- bl Cos
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- strh r5, [r4, 0x26]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08046930
- ldr r0, _0804692C @ =sub_8046C78
- str r0, [r4, 0x1C]
- b _0804693A
- .align 2, 0
-_08046928: .4byte 0xffffff00
-_0804692C: .4byte sub_8046C78
-_08046930:
- ldr r0, _08046940 @ =sub_8046944
- str r0, [r4, 0x1C]
- movs r0, 0x1
- strh r0, [r4, 0x36]
- strh r5, [r4, 0x38]
-_0804693A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08046940: .4byte sub_8046944
- thumb_func_end sub_804684C
-
- thumb_func_start sub_8046944
-sub_8046944: @ 8046944
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- bne _08046978
- movs r0, 0
- strh r0, [r4, 0x34]
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r0, _08046980 @ =sub_8046984
- str r0, [r4, 0x1C]
- movs r0, 0x17
- bl PlaySE
-_08046978:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08046980: .4byte sub_8046984
- thumb_func_end sub_8046944
-
- thumb_func_start sub_8046984
-sub_8046984: @ 8046984
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x34]
- movs r1, 0xFF
- ands r1, r0
- cmp r1, 0x4
- bhi _08046A84
- lsls r0, r1, 2
- ldr r1, _0804699C @ =_080469A0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0804699C: .4byte _080469A0
- .align 2, 0
-_080469A0:
- .4byte _080469B4
- .4byte _080469E6
- .4byte _080469B4
- .4byte _08046A3A
- .4byte _08046A84
-_080469B4:
- ldrh r0, [r4, 0x36]
- ldrh r2, [r4, 0x24]
- adds r1, r0, r2
- strh r1, [r4, 0x24]
- ldrh r1, [r4, 0x38]
- adds r0, r1
- strh r0, [r4, 0x38]
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x38]
- adds r0, 0x3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bls _08046ACA
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- movs r0, 0
- strh r0, [r4, 0x38]
- b _08046ACA
-_080469E6:
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- bne _08046A2C
- movs r0, 0
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x36]
- negs r0, r0
- strh r0, [r4, 0x36]
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bge _08046A22
- adds r0, r4, 0
- movs r1, 0x2
- bl ChangeSpriteAffineAnim
- b _08046ACA
-_08046A22:
- adds r0, r4, 0
- movs r1, 0x1
- bl ChangeSpriteAffineAnim
- b _08046ACA
-_08046A2C:
- adds r0, r4, 0
- adds r0, 0x2C
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
- b _08046ACA
-_08046A3A:
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1, 0
- ldrh r2, [r4, 0x34]
- adds r0, r2
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 24
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _08046A5C
- ldr r0, _08046A58 @ =sub_8046C78
- str r0, [r4, 0x1C]
- b _08046ACA
- .align 2, 0
-_08046A58: .4byte sub_8046C78
-_08046A5C:
- cmp r1, 0x4
- bne _08046A70
- cmp r0, 0x3
- bne _08046A70
- ldr r0, _08046A6C @ =sub_8046E7C
- str r0, [r4, 0x1C]
- b _08046A76
- .align 2, 0
-_08046A6C: .4byte sub_8046E7C
-_08046A70:
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
-_08046A76:
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- b _08046ACA
-_08046A84:
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- bne _08046ACA
- movs r0, 0
- strh r0, [r4, 0x38]
- ldrh r1, [r4, 0x34]
- ldr r0, _08046AB8 @ =0xffffff00
- ands r0, r1
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAffineAnim
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bge _08046ABC
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- b _08046AC4
- .align 2, 0
-_08046AB8: .4byte 0xffffff00
-_08046ABC:
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_08046AC4:
- movs r0, 0x17
- bl PlaySE
-_08046ACA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8046984
-
- thumb_func_start sub_8046AD0
-sub_8046AD0: @ 8046AD0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _08046AFC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrb r6, [r0, 0xC]
- ldrb r3, [r0, 0xA]
- ldrh r5, [r0, 0x8]
- movs r2, 0x26
- ldrsh r0, [r0, r2]
- adds r2, r1, 0
- cmp r0, 0x20
- bhi _08046B88
- lsls r0, 2
- ldr r1, _08046B00 @ =_08046B04
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08046AFC: .4byte gTasks
-_08046B00: .4byte _08046B04
- .align 2, 0
-_08046B04:
- .4byte _08046B88
- .4byte _08046BA6
- .4byte _08046BB2
- .4byte _08046BF6
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046BD0
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046B88
- .4byte _08046C08
- .4byte _08046C20
- .4byte _08046C48
-_08046B88:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r2
- ldrh r2, [r1, 0x18]
- movs r3, 0x18
- ldrsh r0, [r1, r3]
- cmp r0, 0x2
- bgt _08046BA0
- adds r0, r2, 0x1
- strh r0, [r1, 0x18]
- b _08046C72
-_08046BA0:
- adds r0, r6, 0x1
- strh r0, [r1, 0x26]
- b _08046C72
-_08046BA6:
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r5, 0
- bl PlayCry1
- b _08046BEE
-_08046BB2:
- bl StopCryAndClearCrySongs
- ldr r1, _08046BCC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x3
- strh r1, [r0, 0x1C]
- movs r1, 0x14
- strh r1, [r0, 0x26]
- b _08046C72
- .align 2, 0
-_08046BCC: .4byte gTasks
-_08046BD0:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r2
- ldrh r2, [r1, 0x1C]
- movs r6, 0x1C
- ldrsh r0, [r1, r6]
- cmp r0, 0
- bne _08046C5A
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r5, 0
- movs r2, 0x1
- bl PlayCry4
-_08046BEE:
- adds r0, r4, 0
- bl DestroyTask
- b _08046C72
-_08046BF6:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r2
- movs r1, 0x6
- strh r1, [r0, 0x1C]
- movs r1, 0x1E
- strh r1, [r0, 0x26]
- b _08046C72
-_08046C08:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r2
- ldrh r2, [r1, 0x1C]
- movs r3, 0x1C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _08046C5A
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
-_08046C20:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _08046C72
- bl StopCryAndClearCrySongs
- ldr r0, _08046C44 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x3
- strh r0, [r1, 0x1C]
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08046C72
- .align 2, 0
-_08046C44: .4byte gTasks
-_08046C48:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r2
- ldrh r2, [r1, 0x1C]
- movs r6, 0x1C
- ldrsh r0, [r1, r6]
- cmp r0, 0
- beq _08046C60
-_08046C5A:
- subs r0, r2, 0x1
- strh r0, [r1, 0x1C]
- b _08046C72
-_08046C60:
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r5, 0
- movs r2, 0
- bl PlayCry4
- adds r0, r4, 0
- bl DestroyTask
-_08046C72:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8046AD0
-
- thumb_func_start sub_8046C78
-sub_8046C78: @ 8046C78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r6, r0, 0
- ldrh r0, [r6, 0x3A]
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r5, 0
- bl sub_8047978
- lsls r0, 16
- lsrs r0, 16
- bl ball_number_to_ball_processing_index
- adds r4, r0, 0
- ldrh r0, [r6, 0x20]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x22]
- subs r1, 0x5
- lsls r1, 24
- lsrs r1, 24
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- movs r2, 0x1
- movs r3, 0x1C
- bl sub_814086C
- ldrh r1, [r6, 0x3A]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- movs r2, 0xE
- adds r3, r4, 0
- bl sub_8141314
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x2E]
- ldr r0, _08046D0C @ =sub_8046E9C
- str r0, [r6, 0x1C]
- ldr r0, _08046D10 @ =gMain
- ldr r1, _08046D14 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08046CE8
- b _08046E1C
-_08046CE8:
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08046D20
- ldr r1, _08046D18 @ =gBattlePartyID
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08046D1C @ =gEnemyParty
- adds r0, r1, r0
- movs r3, 0x19
- mov r8, r3
- b _08046D34
- .align 2, 0
-_08046D0C: .4byte sub_8046E9C
-_08046D10: .4byte gMain
-_08046D14: .4byte 0x0000043d
-_08046D18: .4byte gBattlePartyID
-_08046D1C: .4byte gEnemyParty
-_08046D20:
- ldr r1, _08046D90 @ =gBattlePartyID
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08046D94 @ =gPlayerParty
- adds r0, r1, r0
- movs r1, 0xE7
- mov r8, r1
-_08046D34:
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- movs r0, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- beq _08046D5A
- movs r0, 0x1
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bne _08046DAE
-_08046D5A:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08046DAE
- ldr r0, _08046D98 @ =0x02017840
- ldrb r1, [r0, 0x9]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08046DAE
- ldr r0, _08046D9C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08046DA4
- bl IsBGMPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08046DAE
- ldr r0, _08046DA0 @ =gMPlay_BGM
- bl m4aMPlayStop
- b _08046DAE
- .align 2, 0
-_08046D90: .4byte gBattlePartyID
-_08046D94: .4byte gPlayerParty
-_08046D98: .4byte 0x02017840
-_08046D9C: .4byte gBattleTypeFlags
-_08046DA0: .4byte gMPlay_BGM
-_08046DA4:
- ldr r0, _08046DC8 @ =gMPlay_BGM
- ldr r1, _08046DCC @ =0x0000ffff
- movs r2, 0x80
- bl m4aMPlayVolumeControl
-_08046DAE:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08046DC4
- ldr r0, _08046DD0 @ =0x02017840
- ldrb r1, [r0, 0x9]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08046DD4
-_08046DC4:
- movs r4, 0
- b _08046DF6
- .align 2, 0
-_08046DC8: .4byte gMPlay_BGM
-_08046DCC: .4byte 0x0000ffff
-_08046DD0: .4byte 0x02017840
-_08046DD4:
- movs r0, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- beq _08046DF0
- movs r0, 0x1
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bne _08046DF4
-_08046DF0:
- movs r4, 0x1
- b _08046DF6
-_08046DF4:
- movs r4, 0x2
-_08046DF6:
- ldr r0, _08046E6C @ =sub_8046AD0
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08046E70 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r7, [r1, 0x8]
- mov r3, r8
- lsls r0, r3, 24
- asrs r0, 24
- strh r0, [r1, 0xA]
- strh r4, [r1, 0xC]
- strh r2, [r1, 0x26]
-_08046E1C:
- ldr r5, _08046E74 @ =gObjectBankIDs
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08046E78 @ =gSprites
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAffineAnim
- movs r3, 0x3A
- ldrsh r0, [r6, r3]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl AnimateSprite
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x80
- lsls r1, 5
- strh r1, [r0, 0x30]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08046E6C: .4byte sub_8046AD0
-_08046E70: .4byte gTasks
-_08046E74: .4byte gObjectBankIDs
-_08046E78: .4byte gSprites
- thumb_func_end sub_8046C78
-
- thumb_func_start sub_8046E7C
-sub_8046E7C: @ 8046E7C
- adds r3, r0, 0
- adds r3, 0x2C
- ldrb r1, [r3]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r3]
- ldr r1, _08046E98 @ =sub_8046FBC
- str r1, [r0, 0x1C]
- movs r1, 0
- strh r1, [r0, 0x34]
- strh r1, [r0, 0x36]
- strh r1, [r0, 0x38]
- bx lr
- .align 2, 0
-_08046E98: .4byte sub_8046FBC
- thumb_func_end sub_8046E7C
-
- thumb_func_start sub_8046E9C
-sub_8046E9C: @ 8046E9C
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r7, 0
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, _08046F00 @ =gSprites
- ldr r0, _08046F04 @ =gObjectBankIDs
- adds r3, r4, r0
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08046EDE
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
-_08046EDE:
- ldrb r0, [r3]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _08046F08
- adds r0, r1, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r7, 0x1
- b _08046F24
- .align 2, 0
-_08046F00: .4byte gSprites
-_08046F04: .4byte gObjectBankIDs
-_08046F08:
- ldr r2, _08046FA8 @ =0xfffffee0
- adds r0, r2, 0
- ldrh r2, [r1, 0x30]
- adds r0, r2
- strh r0, [r1, 0x30]
- ldrb r0, [r3]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 24
- strh r0, [r1, 0x26]
-_08046F24:
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08046FA0
- cmp r7, 0
- beq _08046FA0
- ldr r2, _08046FAC @ =gSprites
- ldr r0, _08046FB0 @ =gObjectBankIDs
- adds r0, r4, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r2, 0
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r0, _08046FB4 @ =gDoingBattleAnim
- strb r2, [r0]
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- ldr r4, _08046FB8 @ =0x02017810
- adds r1, r4
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- adds r0, r5, 0
- bl FreeSpriteOamMatrix
- adds r0, r5, 0
- bl DestroySprite
- movs r3, 0
- movs r5, 0x8
- adds r2, r4, 0
- movs r4, 0x3
-_08046F78:
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08046F84
- adds r3, 0x1
-_08046F84:
- adds r2, 0xC
- subs r4, 0x1
- cmp r4, 0
- bge _08046F78
- cmp r3, 0x4
- bne _08046FA0
- movs r4, 0
-_08046F92:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_804794C
- adds r4, 0x1
- cmp r4, 0xB
- ble _08046F92
-_08046FA0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08046FA8: .4byte 0xfffffee0
-_08046FAC: .4byte gSprites
-_08046FB0: .4byte gObjectBankIDs
-_08046FB4: .4byte gDoingBattleAnim
-_08046FB8: .4byte 0x02017810
- thumb_func_end sub_8046E9C
-
- thumb_func_start sub_8046FBC
-sub_8046FBC: @ 8046FBC
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r0, [r6, 0x3A]
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r6, 0x36]
- adds r0, 0x1
- strh r0, [r6, 0x36]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0x28
- beq _08047056
- cmp r1, 0x5F
- bne _08046FF4
- ldr r0, _08046FEC @ =gDoingBattleAnim
- movs r1, 0
- strb r1, [r0]
- bl m4aMPlayAllStop
- ldr r0, _08046FF0 @ =0x00000173
- bl PlaySE
- b _08047056
- .align 2, 0
-_08046FEC: .4byte gDoingBattleAnim
-_08046FF0: .4byte 0x00000173
-_08046FF4:
- ldr r0, _0804705C @ =0x0000013b
- cmp r1, r0
- bne _08047056
- ldr r5, _08047060 @ =gSprites
- ldr r4, _08047064 @ =gObjectBankIDs
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- adds r0, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- adds r0, r6, 0
- bl DestroySpriteAndFreeResources
- ldr r0, _08047068 @ =gMain
- ldr r1, _0804706C @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08047056
- lsls r1, r7, 1
- adds r1, r7
- lsls r1, 2
- ldr r0, _08047070 @ =0x02017810
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_08047056:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804705C: .4byte 0x0000013b
-_08047060: .4byte gSprites
-_08047064: .4byte gObjectBankIDs
-_08047068: .4byte gMain
-_0804706C: .4byte 0x0000043d
-_08047070: .4byte 0x02017810
- thumb_func_end sub_8046FBC
-
- thumb_func_start sub_8047074
-sub_8047074: @ 8047074
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x19
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x18
- strh r0, [r4, 0x36]
- ldr r0, _080470BC @ =0x0000ffe2
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3A]
- strh r0, [r4, 0x6]
- adds r0, r4, 0
- bl sub_80786EC
- ldr r0, _080470C0 @ =sub_80470C4
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080470BC: .4byte 0x0000ffe2
-_080470C0: .4byte sub_80470C4
- thumb_func_end sub_8047074
-
- thumb_func_start sub_80470C4
-sub_80470C4: @ 80470C4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- ldrh r0, [r5, 0x3C]
- movs r1, 0xFF
- mov r8, r1
- lsrs r0, 8
- subs r0, 0x23
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2C
- bhi _080471B8
- ldrh r1, [r5, 0x6]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- bne _08047126
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- adds r6, r1, 0
- ands r6, r0
- ldrh r0, [r5, 0x32]
- adds r7, r1, 0
- ands r7, r0
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- movs r1, 0x3
- bl __divsi3
- movs r1, 0x2
- negs r1, r1
- adds r4, r1, 0
- ands r0, r4
- orrs r6, r0
- strh r6, [r5, 0x30]
- movs r2, 0x32
- ldrsh r0, [r5, r2]
- movs r1, 0x3
- bl __divsi3
- ands r0, r4
- orrs r7, r0
- strh r7, [r5, 0x32]
- adds r0, r5, 0
- movs r1, 0x4
- bl StartSpriteAffineAnim
-_08047126:
- ldrh r4, [r5, 0x2E]
- adds r0, r5, 0
- bl sub_8078B5C
- movs r1, 0x3A
- ldrsh r0, [r5, r1]
- movs r1, 0x3
- bl __divsi3
- adds r1, r0, 0
- ldrh r0, [r5, 0x3C]
- adds r0, r1
- strh r0, [r5, 0x3C]
- lsls r0, 16
- asrs r0, 24
- mov r2, r8
- ands r0, r2
- movs r2, 0x38
- ldrsh r1, [r5, r2]
- bl Sin
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- ldrh r1, [r5, 0x6]
- adds r0, r1
- strh r0, [r5, 0x6]
- lsls r0, 16
- lsrs r0, 24
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _08047176
- strh r4, [r5, 0x2E]
- b _0804717E
-_08047176:
- lsls r0, r4, 16
- asrs r0, 16
- subs r0, 0x1
- strh r0, [r5, 0x2E]
-_0804717E:
- ldrh r0, [r5, 0x3C]
- lsrs r0, 8
- cmp r0, 0x4F
- ble _08047220
- ldrh r0, [r5, 0x30]
- movs r1, 0x1
- adds r6, r1, 0
- ands r6, r0
- ldrh r0, [r5, 0x32]
- adds r7, r1, 0
- ands r7, r0
- movs r2, 0x30
- ldrsh r1, [r5, r2]
- lsls r0, r1, 1
- adds r0, r1
- movs r1, 0x2
- negs r1, r1
- adds r2, r1, 0
- ands r0, r2
- orrs r0, r6
- strh r0, [r5, 0x30]
- movs r0, 0x32
- ldrsh r1, [r5, r0]
- lsls r0, r1, 1
- adds r0, r1
- ands r0, r2
- orrs r0, r7
- strh r0, [r5, 0x32]
- b _08047220
-_080471B8:
- adds r0, r5, 0
- bl sub_8078718
- lsls r0, 24
- cmp r0, 0
- beq _08047220
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- ldrb r0, [r5, 0x6]
- strh r0, [r5, 0x3A]
- strh r1, [r5, 0x2E]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08047214
- ldr r0, _0804720C @ =0x02017840
- ldrb r1, [r0, 0x9]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08047214
- movs r0, 0x3A
- ldrsh r4, [r5, r0]
- movs r0, 0x2
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _08047214
- ldr r0, _08047210 @ =sub_8047230
- b _08047216
- .align 2, 0
-_0804720C: .4byte 0x02017840
-_08047210: .4byte sub_8047230
-_08047214:
- ldr r0, _0804722C @ =sub_8046C78
-_08047216:
- str r0, [r5, 0x1C]
- adds r0, r5, 0
- movs r1, 0
- bl StartSpriteAffineAnim
-_08047220:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804722C: .4byte sub_8046C78
- thumb_func_end sub_80470C4
-
- thumb_func_start sub_8047230
-sub_8047230: @ 8047230
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r1, r0, 0x1
- strh r1, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x18
- ble _0804724A
- movs r0, 0
- strh r0, [r2, 0x2E]
- ldr r0, _08047250 @ =sub_8046C78
- str r0, [r2, 0x1C]
-_0804724A:
- pop {r0}
- bx r0
- .align 2, 0
-_08047250: .4byte sub_8046C78
- thumb_func_end sub_8047230
-
- thumb_func_start sub_8047254
-sub_8047254: @ 8047254
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xF
- ble _080472A4
- movs r0, 0
- strh r0, [r5, 0x2E]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080472A0
- ldr r0, _08047298 @ =0x02017840
- ldrb r1, [r0, 0x9]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080472A0
- movs r0, 0x3A
- ldrsh r4, [r5, r0]
- movs r0, 0x3
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _080472A0
- ldr r0, _0804729C @ =sub_8047230
- b _080472A2
- .align 2, 0
-_08047298: .4byte 0x02017840
-_0804729C: .4byte sub_8047230
-_080472A0:
- ldr r0, _080472AC @ =sub_8046C78
-_080472A2:
- str r0, [r5, 0x1C]
-_080472A4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080472AC: .4byte sub_8046C78
- thumb_func_end sub_8047254
-
- thumb_func_start sub_80472B0
-sub_80472B0: @ 80472B0
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- movs r4, 0
- str r4, [sp]
- bl sub_814086C
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80472B0
-
- thumb_func_start sub_80472D8
-sub_80472D8: @ 80472D8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0
- bl sub_8141314
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80472D8
-
- thumb_func_start CreatePokeballSprite
-CreatePokeballSprite: @ 80472F0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- mov r9, r2
- mov r10, r3
- ldr r6, [sp, 0x24]
- ldr r4, [sp, 0x28]
- ldr r0, [sp, 0x2C]
- lsls r5, 24
- lsrs r5, 24
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- mov r1, r9
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- mov r2, r10
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _080473BC @ =gUnknown_0820A92C
- bl LoadCompressedObjectPic
- ldr r0, _080473C0 @ =gUnknown_0820A98C
- bl LoadCompressedObjectPalette
- ldr r0, _080473C4 @ =gSpriteTemplate_820AAB4
- mov r1, r9
- mov r2, r10
- adds r3, r4, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _080473C8 @ =gSprites
- mov r8, r3
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r1, r4, r3
- strh r5, [r1, 0x2E]
- lsls r2, r5, 4
- adds r2, r5
- lsls r2, 2
- add r2, r8
- ldrh r0, [r2, 0x20]
- strh r0, [r1, 0x38]
- ldrh r0, [r2, 0x22]
- strh r0, [r1, 0x3A]
- mov r0, r9
- strh r0, [r2, 0x20]
- mov r3, r10
- strh r3, [r2, 0x22]
- strh r7, [r1, 0x30]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r1, 0x32]
- mov r3, sp
- ldrh r3, [r3, 0x30]
- strh r3, [r1, 0x34]
- ldr r3, [sp, 0x30]
- lsrs r0, r3, 16
- strh r0, [r1, 0x36]
- movs r0, 0x3
- ands r6, r0
- lsls r6, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r6
- strb r0, [r1, 0x5]
- movs r0, 0x1C
- add r8, r0
- add r4, r8
- ldr r0, _080473CC @ =sub_80473D0
- str r0, [r4]
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080473BC: .4byte gUnknown_0820A92C
-_080473C0: .4byte gUnknown_0820A98C
-_080473C4: .4byte gSpriteTemplate_820AAB4
-_080473C8: .4byte gSprites
-_080473CC: .4byte sub_80473D0
- thumb_func_end CreatePokeballSprite
-
- thumb_func_start sub_80473D0
-sub_80473D0: @ 80473D0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldrh r1, [r6, 0x30]
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- cmp r0, 0
- bne _0804747C
- ldrh r0, [r6, 0x2E]
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r6, 0x32]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrh r4, [r6, 0x34]
- ldrh r0, [r6, 0x36]
- lsls r0, 16
- orrs r4, r0
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- cmp r0, 0
- beq _0804740A
- subs r0, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- b _0804740C
-_0804740A:
- movs r5, 0
-_0804740C:
- adds r0, r6, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldrh r0, [r6, 0x20]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x22]
- subs r1, 0x5
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r6, 0x5]
- lsls r2, 28
- lsrs r2, 30
- adds r3, r5, 0
- bl sub_80472B0
- movs r0, 0x1
- mov r1, r8
- adds r2, r4, 0
- bl sub_80472D8
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- strh r0, [r6, 0x30]
- ldr r0, _08047474 @ =sub_804748C
- str r0, [r6, 0x1C]
- ldr r0, _08047478 @ =gSprites
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- adds r4, r0
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- adds r0, r4, 0
- bl AnimateSprite
- movs r0, 0x80
- lsls r0, 5
- strh r0, [r4, 0x30]
- strh r5, [r6, 0x3C]
- b _08047480
- .align 2, 0
-_08047474: .4byte sub_804748C
-_08047478: .4byte gSprites
-_0804747C:
- subs r0, r1, 0x1
- strh r0, [r6, 0x30]
-_08047480:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80473D0
-
- thumb_func_start sub_804748C
-sub_804748C: @ 804748C
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r0, 0
- mov r12, r0
- movs r6, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r3, r0, 24
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080474B6
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
-_080474B6:
- ldr r0, _08047544 @ =gSprites
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r5, r1, r0
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _080474D8
- adds r0, r5, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r1, 0x1
- mov r12, r1
-_080474D8:
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r7, 0x20
- ldrsh r1, [r4, r7]
- subs r0, r1
- movs r1, 0x3C
- ldrsh r2, [r4, r1]
- muls r0, r2
- cmp r0, 0
- bge _080474EE
- adds r0, 0x7F
-_080474EE:
- asrs r0, 7
- ldrh r7, [r4, 0x20]
- adds r0, r7
- lsls r0, 16
- lsrs r3, r0, 16
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r7, 0x22
- ldrsh r1, [r4, r7]
- subs r0, r1
- muls r0, r2
- cmp r0, 0
- bge _0804750A
- adds r0, 0x7F
-_0804750A:
- asrs r0, 7
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r3, [r5, 0x20]
- strh r0, [r5, 0x22]
- ldrh r2, [r4, 0x3C]
- movs r7, 0x3C
- ldrsh r0, [r4, r7]
- cmp r0, 0x7F
- bgt _0804754C
- ldr r1, _08047548 @ =gSineTable
- lsls r0, r2, 24
- lsrs r0, 23
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _08047530
- adds r0, 0x7
-_08047530:
- asrs r0, 3
- negs r0, r0
- lsls r0, 16
- lsrs r0, 16
- adds r1, r2, 0x4
- strh r1, [r4, 0x3C]
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- b _0804755A
- .align 2, 0
-_08047544: .4byte gSprites
-_08047548: .4byte gSineTable
-_0804754C:
- ldrh r0, [r4, 0x38]
- strh r0, [r5, 0x20]
- ldrh r0, [r4, 0x3A]
- strh r0, [r5, 0x22]
- strh r6, [r5, 0x24]
- strh r6, [r5, 0x26]
- movs r6, 0x1
-_0804755A:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08047578
- mov r2, r12
- cmp r2, 0
- beq _08047578
- cmp r6, 0
- beq _08047578
- adds r0, r4, 0
- bl DestroySpriteAndFreeResources
-_08047578:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_804748C
-
- thumb_func_start sub_8047580
-sub_8047580: @ 8047580
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r0
- adds r6, r2, 0
- mov r8, r3
- ldr r5, [sp, 0x20]
- ldr r4, [sp, 0x24]
- ldr r0, [sp, 0x28]
- mov r9, r0
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r6, 24
- lsrs r6, 24
- mov r1, r8
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- lsrs r4, 24
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _08047624 @ =gUnknown_0820A92C
- bl LoadCompressedObjectPic
- ldr r0, _08047628 @ =gUnknown_0820A98C
- bl LoadCompressedObjectPalette
- ldr r0, _0804762C @ =gSpriteTemplate_820AAB4
- adds r1, r6, 0
- mov r2, r8
- adds r3, r4, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _08047630 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r6
- mov r1, r10
- strh r1, [r2, 0x2E]
- mov r4, r9
- strh r4, [r2, 0x30]
- strh r7, [r2, 0x32]
- mov r1, sp
- ldrh r1, [r1, 0x2C]
- strh r1, [r2, 0x34]
- ldr r4, [sp, 0x2C]
- lsrs r1, r4, 16
- strh r1, [r2, 0x36]
- movs r1, 0x3
- ands r5, r1
- lsls r5, 2
- ldrb r4, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r5
- strb r1, [r2, 0x5]
- adds r6, 0x1C
- adds r3, r6
- ldr r1, _08047634 @ =sub_8047638
- str r1, [r3]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08047624: .4byte gUnknown_0820A92C
-_08047628: .4byte gUnknown_0820A98C
-_0804762C: .4byte gSpriteTemplate_820AAB4
-_08047630: .4byte gSprites
-_08047634: .4byte sub_8047638
- thumb_func_end sub_8047580
-
- thumb_func_start sub_8047638
-sub_8047638: @ 8047638
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080476D0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r4, 0x32]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrh r5, [r4, 0x34]
- ldrh r0, [r4, 0x36]
- lsls r0, 16
- orrs r5, r0
- adds r0, r4, 0
- adds r0, 0x43
- ldrb r0, [r0]
- cmp r0, 0
- beq _08047672
- subs r0, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- b _08047674
-_08047672:
- movs r6, 0
-_08047674:
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldrh r0, [r4, 0x20]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x22]
- subs r1, 0x5
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r4, 0x5]
- lsls r2, 28
- lsrs r2, 30
- adds r3, r6, 0
- bl sub_80472B0
- movs r0, 0x1
- mov r1, r8
- adds r2, r5, 0
- bl sub_80472D8
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- strh r0, [r4, 0x30]
- ldr r0, _080476C8 @ =sub_80476E0
- str r0, [r4, 0x1C]
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- ldr r0, _080476CC @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- adds r0, r4, 0
- bl AnimateSprite
- strh r5, [r4, 0x30]
- b _080476D4
- .align 2, 0
-_080476C8: .4byte sub_80476E0
-_080476CC: .4byte gSprites
-_080476D0:
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
-_080476D4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8047638
-
- thumb_func_start sub_80476E0
-sub_80476E0: @ 80476E0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- adds r0, 0x1
- strh r0, [r5, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _080476F8
- movs r0, 0x3C
- bl PlaySE
-_080476F8:
- ldrh r1, [r5, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08047734 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _0804773C
- adds r0, r5, 0
- movs r1, 0x2
- bl StartSpriteAnim
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0
- strh r0, [r5, 0x38]
- ldr r0, _08047738 @ =sub_8047754
- str r0, [r5, 0x1C]
- b _0804774C
- .align 2, 0
-_08047734: .4byte gSprites
-_08047738: .4byte sub_8047754
-_0804773C:
- ldrh r0, [r4, 0x30]
- adds r0, 0x60
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- negs r0, r0
- asrs r0, 8
- strh r0, [r4, 0x26]
-_0804774C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80476E0
-
- thumb_func_start sub_8047754
-sub_8047754: @ 8047754
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08047768
- ldr r0, _0804776C @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_08047768:
- pop {r0}
- bx r0
- .align 2, 0
-_0804776C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8047754
-
- thumb_func_start obj_delete_and_free_associated_resources_
-obj_delete_and_free_associated_resources_: @ 8047770
- push {lr}
- bl DestroySpriteAndFreeResources
- pop {r0}
- bx r0
- thumb_func_end obj_delete_and_free_associated_resources_
-
- thumb_func_start sub_804777C
-sub_804777C: @ 804777C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r0, _080477FC @ =gHealthboxIDs
- adds r0, r5, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, _08047800 @ =gSprites
- adds r4, r0, r6
- movs r1, 0
- movs r0, 0x5
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x30]
- movs r0, 0x73
- strh r0, [r4, 0x24]
- strh r1, [r4, 0x26]
- ldr r0, _08047804 @ =sub_8047830
- str r0, [r4, 0x1C]
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _080477CA
- ldrh r0, [r4, 0x2E]
- negs r0, r0
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x30]
- negs r0, r0
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x24]
- negs r0, r0
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x26]
- negs r0, r0
- strh r0, [r4, 0x26]
-_080477CA:
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r1, r0, r1
- adds r0, r6
- ldr r1, [r1]
- bl _call_via_r1
- adds r0, r5, 0
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080477F4
- ldr r0, _08047808 @ =sub_804780C
- str r0, [r4, 0x1C]
-_080477F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080477FC: .4byte gHealthboxIDs
-_08047800: .4byte gSprites
-_08047804: .4byte sub_8047830
-_08047808: .4byte sub_804780C
- thumb_func_end sub_804777C
-
- thumb_func_start sub_804780C
-sub_804780C: @ 804780C
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _08047826
- movs r0, 0
- strh r0, [r1, 0x30]
- ldr r0, _0804782C @ =sub_8047830
- str r0, [r1, 0x1C]
-_08047826:
- pop {r0}
- bx r0
- .align 2, 0
-_0804782C: .4byte sub_8047830
- thumb_func_end sub_804780C
-
- thumb_func_start sub_8047830
-sub_8047830: @ 8047830
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x24]
- ldrh r1, [r2, 0x2E]
- subs r0, r1
- strh r0, [r2, 0x24]
- ldrh r0, [r2, 0x26]
- ldrh r1, [r2, 0x30]
- subs r0, r1
- strh r0, [r2, 0x26]
- ldr r0, [r2, 0x24]
- cmp r0, 0
- bne _0804784E
- ldr r0, _08047854 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_0804784E:
- pop {r0}
- bx r0
- .align 2, 0
-_08047854: .4byte SpriteCallbackDummy
- thumb_func_end sub_8047830
-
- thumb_func_start sub_8047858
-sub_8047858: @ 8047858
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08047890 @ =oamc_804BEB4
- adds r0, r5, 0
- bl CreateInvisibleSpriteWithCallback
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08047894 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r3, r1, r2
- movs r0, 0x1
- strh r0, [r3, 0x2E]
- ldr r0, _08047898 @ =gHealthboxIDs
- adds r4, r0
- ldrb r0, [r4]
- strh r0, [r3, 0x30]
- adds r2, 0x1C
- adds r1, r2
- str r5, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08047890: .4byte oamc_804BEB4
-_08047894: .4byte gSprites
-_08047898: .4byte gHealthboxIDs
- thumb_func_end sub_8047858
-
- thumb_func_start oamc_804BEB4
-oamc_804BEB4: @ 804789C
- push {lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _080478D8 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrh r0, [r3, 0x2E]
- movs r2, 0
- strh r0, [r1, 0x26]
- ldrh r0, [r3, 0x2E]
- negs r0, r0
- strh r0, [r3, 0x2E]
- ldrh r0, [r3, 0x32]
- adds r0, 0x1
- strh r0, [r3, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080478D4
- strh r2, [r1, 0x24]
- strh r2, [r1, 0x26]
- adds r0, r3, 0
- bl DestroySprite
-_080478D4:
- pop {r0}
- bx r0
- .align 2, 0
-_080478D8: .4byte gSprites
- thumb_func_end oamc_804BEB4
-
- thumb_func_start sub_80478DC
-sub_80478DC: @ 80478DC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08047938 @ =gUnknown_0820A92C
- lsls r6, r4, 3
- adds r5, r6, r0
- ldrh r0, [r5, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, _0804793C @ =0xffff0000
- cmp r0, r1
- bne _08047904
- adds r0, r5, 0
- bl LoadCompressedObjectPic
- ldr r0, _08047940 @ =gUnknown_0820A98C
- adds r0, r6, r0
- bl LoadCompressedObjectPalette
-_08047904:
- cmp r4, 0x6
- beq _08047930
- cmp r4, 0x6
- blt _08047914
- cmp r4, 0xB
- bgt _08047914
- cmp r4, 0xA
- bge _08047930
-_08047914:
- ldr r1, _08047938 @ =gUnknown_0820A92C
- lsls r0, r4, 3
- adds r0, r1
- ldrh r0, [r0, 0x6]
- bl GetSpriteTileStartByTag
- adds r1, r0, 0
- lsls r1, 16
- ldr r0, _08047944 @ =gUnknown_08D030D0
- lsrs r1, 11
- ldr r2, _08047948 @ =0x06010100
- adds r1, r2
- bl LZDecompressVram
-_08047930:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08047938: .4byte gUnknown_0820A92C
-_0804793C: .4byte 0xffff0000
-_08047940: .4byte gUnknown_0820A98C
-_08047944: .4byte gUnknown_08D030D0
-_08047948: .4byte 0x06010100
- thumb_func_end sub_80478DC
-
- thumb_func_start sub_804794C
-sub_804794C: @ 804794C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- ldr r0, _08047970 @ =gUnknown_0820A92C
- lsrs r4, 21
- adds r0, r4, r0
- ldrh r0, [r0, 0x6]
- bl FreeSpriteTilesByTag
- ldr r0, _08047974 @ =gUnknown_0820A98C
- adds r4, r0
- ldrh r0, [r4, 0x4]
- bl FreeSpritePaletteByTag
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08047970: .4byte gUnknown_0820A92C
-_08047974: .4byte gUnknown_0820A98C
- thumb_func_end sub_804794C
-
- thumb_func_start sub_8047978
-sub_8047978: @ 8047978
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _080479A4
- ldr r1, _0804799C @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080479A0 @ =gEnemyParty
- b _080479B2
- .align 2, 0
-_0804799C: .4byte gBattlePartyID
-_080479A0: .4byte gEnemyParty
-_080479A4:
- ldr r1, _080479C4 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080479C8 @ =gPlayerParty
-_080479B2:
- adds r0, r1
- movs r1, 0x26
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080479C4: .4byte gBattlePartyID
-_080479C8: .4byte gPlayerParty
- thumb_func_end sub_8047978
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 20231a0bb..fea619ac8 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -8398,7 +8398,7 @@ sub_80A1DE8: @ 80A1DE8
lsls r0, r4, 1
adds r0, r4
lsls r0, 3
- ldr r1, _080A1E48 @ =gSpriteTemplate_820AAB4
+ ldr r1, _080A1E48 @ =gBallSpriteTemplates
adds r0, r1
movs r1, 0x6
movs r2, 0x88
@@ -8429,7 +8429,7 @@ sub_80A1DE8: @ 80A1DE8
pop {r0}
bx r0
.align 2, 0
-_080A1E48: .4byte gSpriteTemplate_820AAB4
+_080A1E48: .4byte gBallSpriteTemplates
_080A1E4C: .4byte 0x02018000
_080A1E50: .4byte gSprites
_080A1E54: .4byte SpriteCallbackDummy
diff --git a/data/pokeball.s b/data/pokeball.s
deleted file mode 100644
index 788f8bdb7..000000000
--- a/data/pokeball.s
+++ /dev/null
@@ -1,137 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_0820A92C:: @ 820A92C
- obj_tiles gInterfaceGfx_PokeBall, 384, 0xd6d8 @ poke
- obj_tiles gInterfaceGfx_GreatBall, 384, 0xd6d9 @ great
- obj_tiles gInterfaceGfx_SafariBall, 384, 0xd6da @ safari
- obj_tiles gInterfaceGfx_UltraBall, 384, 0xd6db @ ultra
- obj_tiles gInterfaceGfx_MasterBall, 384, 0xd6dc @ master
- obj_tiles gInterfaceGfx_NetBall, 384, 0xd6dd @ net
- obj_tiles gInterfaceGfx_DiveBall, 384, 0xd6de @ dive
- obj_tiles gInterfaceGfx_NestBall, 384, 0xd6df @ nest
- obj_tiles gInterfaceGfx_RepeatBall, 384, 0xd6e0 @ repeat
- obj_tiles gInterfaceGfx_TimerBall, 384, 0xd6e1 @ timer
- obj_tiles gInterfaceGfx_LuxuryBall, 384, 0xd6e2 @ luxury
- obj_tiles gInterfaceGfx_PremierBall, 384, 0xd6e3 @ premier
-
- .align 2
-gUnknown_0820A98C:: @ 820A98C
- obj_pal gInterfacePal_PokeBall, 0xD6D8 @ poke
- obj_pal gInterfacePal_GreatBall, 0xD6D9 @ great
- obj_pal gInterfacePal_SafariBall, 0xD6DA @ safari
- obj_pal gInterfacePal_UltraBall, 0xD6DB @ ultra
- obj_pal gInterfacePal_MasterBall, 0xD6DC @ master
- obj_pal gInterfacePal_NetBall, 0xD6DD @ net
- obj_pal gInterfacePal_DiveBall, 0xD6DE @ dive
- obj_pal gInterfacePal_NestBall, 0xD6DF @ nest
- obj_pal gInterfacePal_RepeatBall, 0xD6E0 @ repeat
- obj_pal gInterfacePal_TimerBall, 0xD6E1 @ timer
- obj_pal gInterfacePal_LuxuryBall, 0xD6E2 @ luxury
- obj_pal gInterfacePal_PremierBall, 0xD6E3 @ premier
-
- .align 2
-gOamData_820A9EC:: @ 820A9EC
- .2byte 0x0300
- .2byte 0x4000
- .2byte 0x0800
-
- .align 2
-gSpriteAnim_820A9F4: @ 820A9F4
- obj_image_anim_frame 0, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_820A9FC: @ 820A9FC
- obj_image_anim_frame 4, 1
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_820AA04: @ 820AA04
- obj_image_anim_frame 8, 5
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_820AA0C: @ 820AA0C
- obj_image_anim_frame 12, 1
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_820AA14:: @ 820AA14
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820AA1C:: @ 820AA1C
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 8, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820AA28:: @ 820AA28
- obj_image_anim_frame 4, 5
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_820AA34:: @ 820AA34
- .4byte gSpriteAnim_820AA14
- .4byte gSpriteAnim_820AA1C
- .4byte gSpriteAnim_820AA28
-
- @ unused?
- .4byte gSpriteAnim_820A9F4
- .4byte gSpriteAnim_820AA04
- .4byte gSpriteAnim_820A9FC
- .4byte gSpriteAnim_820AA0C
-
- .align 2
-gSpriteAffineAnim_820AA50:: @ 820AA50
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_820AA60:: @ 820AA60
- obj_rot_scal_anim_frame 0x0, 0x0, -3, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_820AA70:: @ 820AA70
- obj_rot_scal_anim_frame 0x0, 0x0, 3, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_820AA80:: @ 820AA80
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_820AA90:: @ 820AA90
- obj_rot_scal_anim_frame 0x0, 0x0, 25, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_820AAA0:: @ 820AAA0
- .4byte gSpriteAffineAnim_820AA50
- .4byte gSpriteAffineAnim_820AA60
- .4byte gSpriteAffineAnim_820AA70
- .4byte gSpriteAffineAnim_820AA80
- .4byte gSpriteAffineAnim_820AA90
-
- .align 2
-gSpriteTemplate_820AAB4:: @ 820AAB4
- spr_template 55000, 55000, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55001, 55001, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55002, 55002, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55003, 55003, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55004, 55004, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55005, 55005, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55006, 55006, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55007, 55007, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55008, 55008, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55009, 55009, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55010, 55010, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
- spr_template 55011, 55011, gOamData_820A9EC, gSpriteAnimTable_820AA34, NULL, gSpriteAffineAnimTable_820AAA0, objc_0804ABD4
diff --git a/include/data2.h b/include/data2.h
index 759efe3d3..f292472ef 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -3,7 +3,8 @@
#include "sprite.h"
-struct UnknownStructD2 {
+struct UnknownStructD2
+{
u32 unk0;
u32 unk4;
u32 unk8;
@@ -21,15 +22,15 @@ extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18;
extern const union AnimCmd *const gSpriteAnimTable_81E7C64[];
extern struct MonCoords gMonFrontPicCoords[];
extern struct MonCoords gMonBackPicCoords[];
-extern struct SpriteSheet gMonFrontPicTable[];
-extern struct SpriteSheet gMonBackPicTable[];
-extern const struct SpritePalette gMonPaletteTable[];
-extern const struct SpritePalette gMonShinyPaletteTable[];
+extern struct CompressedSpriteSheet gMonFrontPicTable[];
+extern struct CompressedSpriteSheet gMonBackPicTable[];
+extern const struct CompressedSpritePalette gMonPaletteTable[];
+extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const union AnimCmd *const *const gUnknown_081EC2A4[];
extern const union AnimCmd *const *const gUnknown_081ECACC[];
extern struct MonCoords gTrainerBackPicCoords[];
-extern struct SpriteSheet gTrainerBackPicTable[];
-extern const struct SpritePalette gTrainerBackPicPaletteTable[];
+extern struct CompressedSpriteSheet gTrainerBackPicTable[];
+extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern u8 gEnemyMonElevation[];
extern const u8 gTrainerClassNames[][13];
extern const struct Trainer gTrainers[];
@@ -37,8 +38,8 @@ extern u8 gSpeciesNames[][11];
extern u8 gMoveNames[][13];
extern const struct UnknownStructD2 gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
-extern struct SpriteSheet gUnknown_081FAEA4;
-extern struct SpritePalette gUnknown_081FAEAC;
+extern struct CompressedSpriteSheet gUnknown_081FAEA4;
+extern struct CompressedSpritePalette gUnknown_081FAEAC;
extern const struct SpriteTemplate gSpriteTemplate_81FAF0C;
extern void *const gUnknown_081FAF4C[];
extern struct BattleMove gBattleMoves[];
diff --git a/include/decompress.h b/include/decompress.h
index 28570afdd..07d69301f 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -5,13 +5,13 @@
void sub_800D238(const void *src, void *dest);
void LZDecompressVram(const void *src, void *dest);
-void LoadCompressedObjectPic(const struct SpriteSheet *a);
-void LoadCompressedObjectPicOverrideBuffer(const struct SpriteSheet *a, void *buffer);
-void LoadCompressedObjectPalette(const struct SpritePalette *a);
-void LoadCompressedObjectPaletteOverrideBuffer(const struct SpritePalette *a, void *buffer);
-void DecompressPicFromTable_2(const struct SpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f);
-void HandleLoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g);
-void LoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 h);
+void LoadCompressedObjectPic(const struct CompressedSpriteSheet *a);
+void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *a, void *buffer);
+void LoadCompressedObjectPalette(const struct CompressedSpritePalette *a);
+void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
+void DecompressPicFromTable_2(const struct CompressedSpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f);
+void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g);
+void LoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 h);
void Unused_LZDecompressWramIndirect(const void **src, void *dest);
#endif // GUARD_DECOMPRESS_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 74b5fa34d..cd84652b1 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -72,15 +72,13 @@ enum FieldEffectScriptIdx
FLDEFF_USE_TELEPORT
};
-extern const struct SpritePalette gTrainerFrontPicPaletteTable[2];
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[2];
extern const struct SpritePalette gUnknown_0839F114;
-extern const struct SpriteSheet gTrainerFrontPicTable[2];
+extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2];
extern const struct SpriteTemplate gSpriteTemplate_839F128;
extern const struct OamData gOamData_839F0F4;
extern struct SpriteTemplate gUnknown_02024E8C;
-extern const struct SpritePalette *sub_80409C8(u16, u32, u32);
-
extern u8 gLastFieldPokeMenuOpened;
u32 FieldEffectStart(u8 id);
diff --git a/include/graphics.h b/include/graphics.h
index 096a1982c..c3fe20996 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2,6 +2,32 @@
#define GUARD_GRAPHICS_H
// data/graphics.s
+extern const u8 gInterfaceGfx_PokeBall[];
+extern const u8 gInterfacePal_PokeBall[];
+extern const u8 gInterfaceGfx_GreatBall[];
+extern const u8 gInterfacePal_GreatBall[];
+extern const u8 gInterfaceGfx_SafariBall[];
+extern const u8 gInterfacePal_SafariBall[];
+extern const u8 gInterfaceGfx_UltraBall[];
+extern const u8 gInterfacePal_UltraBall[];
+extern const u8 gInterfaceGfx_MasterBall[];
+extern const u8 gInterfacePal_MasterBall[];
+extern const u8 gInterfaceGfx_NetBall[];
+extern const u8 gInterfacePal_NetBall[];
+extern const u8 gInterfaceGfx_DiveBall[];
+extern const u8 gInterfacePal_DiveBall[];
+extern const u8 gInterfaceGfx_NestBall[];
+extern const u8 gInterfacePal_NestBall[];
+extern const u8 gInterfaceGfx_RepeatBall[];
+extern const u8 gInterfacePal_RepeatBall[];
+extern const u8 gInterfaceGfx_TimerBall[];
+extern const u8 gInterfacePal_TimerBall[];
+extern const u8 gInterfaceGfx_LuxuryBall[];
+extern const u8 gInterfacePal_LuxuryBall[];
+extern const u8 gInterfaceGfx_PremierBall[];
+extern const u8 gInterfacePal_PremierBall[];
+extern const u8 gUnknown_08D030D0[];
+
extern const u8 gMonFootprint_QuestionMark[];
// data/graphics/pokemon/graphics.inc
diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h
index 85485a2c4..5abb2381b 100644
--- a/include/intro_credits_graphics.h
+++ b/include/intro_credits_graphics.h
@@ -1,14 +1,14 @@
#ifndef GUARD_INTRO_CREDITS_GRAPHICS_H
#define GUARD_INTRO_CREDITS_GRAPHICS_H
-extern const struct SpriteSheet gIntro2BrendanSpriteSheet;
-extern const struct SpriteSheet gIntro2MaySpriteSheet;
-extern const struct SpriteSheet gIntro2BicycleSpriteSheet;
-extern const struct SpriteSheet gIntro2LatiosSpriteSheet;
-extern const struct SpriteSheet gIntro2LatiasSpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2MaySpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2LatiosSpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2LatiasSpriteSheet;
extern const struct SpritePalette gIntro2SpritePalettes[];
-extern const struct SpriteSheet gUnknown_08416E24;
-extern const struct SpriteSheet gUnknown_08416E34;
+extern const struct CompressedSpriteSheet gUnknown_08416E24;
+extern const struct CompressedSpriteSheet gUnknown_08416E34;
void load_intro_part2_graphics(/*TODO: arg types*/);
void sub_8148C78(/*TODO: arg types*/);
diff --git a/include/pokeball.h b/include/pokeball.h
index b6fbbcf77..19f813415 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -1,7 +1,11 @@
#ifndef GUARD_POKEBALL_H
#define GUARD_POKEBALL_H
-void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s4);
+extern const struct SpriteTemplate gBallSpriteTemplates[];
+
+void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u32 s4);
void sub_804777C(u8);
+void sub_80478DC(u8);
+void sub_804794C(u8);
#endif // GUARD_POKEBALL_H
diff --git a/include/pokemon.h b/include/pokemon.h
index d67cd647a..47990073b 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -503,8 +503,9 @@ u8 sub_8040574(struct Pokemon *party);
void ClearBattleMonForms(void);
void sub_80408BC();
void current_map_music_set__default_for_battle(u16);
-const u16 *species_and_otid_get_pal(u16, u32, u32);
-const struct SpritePalette *sub_80409C8(u16, u32, u32);
+const u8 *pokemon_get_pal(struct Pokemon *mon);
+const u8 *species_and_otid_get_pal(u16, u32, u32);
+const struct CompressedSpritePalette *sub_80409C8(u16, u32, u32);
bool8 IsOtherTrainer(u32, u8 *);
void sub_8040B8C(void);
void SetWildMonHeldItem(void);
diff --git a/include/songs.h b/include/songs.h
index 72d28a355..8180ee67e 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -59,12 +59,12 @@ enum
SE_MOTER,
SE_CARD,
SE_SAVE,
- SE_KON,
- SE_KON2,
- SE_KON3,
- SE_KON4,
- SE_SUIKOMU,
- SE_NAGERU,
+ /*0x38*/ SE_KON,
+ /*0x39*/ SE_KON2,
+ /*0x3A*/ SE_KON3,
+ /*0x3B*/ SE_KON4,
+ /*0x3C*/ SE_SUIKOMU,
+ /*0x3D*/ SE_NAGERU,
SE_TOY_C,
SE_TOY_D,
SE_TOY_E,
@@ -270,10 +270,10 @@ enum
BGM_NAMINORI,
BGM_DAN01,
/*0x16F*/ BGM_FANFA1,
- BGM_ME_ASA,
- BGM_ME_BACHI,
- BGM_FANFA4,
- BGM_FANFA5,
+ /*0x170*/ BGM_ME_ASA,
+ /*0x171*/ BGM_ME_BACHI,
+ /*0x172*/ BGM_FANFA4,
+ /*0x173*/ BGM_FANFA5,
BGM_ME_WAZA,
BGM_BIJYUTU,
BGM_DOORO_X4,
diff --git a/include/sprite.h b/include/sprite.h
index dd9d5efb7..3f893132e 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -5,11 +5,18 @@
struct SpriteSheet
{
- const u8 *data;
+ const u8 *data; // Raw uncompressed pixel data
u16 size;
u16 tag;
};
+struct CompressedSpriteSheet
+{
+ const u8 *data; // LZ77 compressed pixel data
+ u16 size; // Uncompressed size of pixel data
+ u16 tag;
+};
+
struct SpriteFrameImage
{
u8 *data;
@@ -20,7 +27,13 @@ struct SpriteFrameImage
struct SpritePalette
{
- const u16 *data;
+ const u16 *data; // Raw uncompressed palette data
+ u16 tag;
+};
+
+struct CompressedSpritePalette
+{
+ const u8 *data; // LZ77 compressed palette data
u16 tag;
};
@@ -99,6 +112,10 @@ union AffineAnimCmd
#define AFFINEANIMCMD_FRAME(_xScale, _yScale, _rotation, _duration) \
{.frame = {.xScale = _xScale, .yScale = _yScale, .rotation = _rotation, .duration = _duration}}
+#define AFFINEANIMCMD_LOOP(_count) \
+ {.loop = {.type = AFFINEANIMCMDTYPE_LOOP, .count = _count}}
+#define AFFINEANIMCMD_JUMP(_target) \
+ {.jump = {.type = AFFINEANIMCMDTYPE_JUMP, .target = _target}}
#define AFFINEANIMCMD_END \
{.type = AFFINEANIMCMDTYPE_END}
diff --git a/ld_script.txt b/ld_script.txt
index 9f9df16c8..281f1781d 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -78,7 +78,7 @@ SECTIONS {
asm/egg_hatch.o(.text);
src/battle_interface.o(.text);
src/smokescreen.o(.text);
- asm/pokeball.o(.text);
+ src/pokeball.o(.text);
src/load_save.o(.text);
asm/trade.o(.text);
asm/berry_blender.o(.text);
@@ -339,7 +339,7 @@ SECTIONS {
data/daycare.o(.rodata);
data/egg_hatch.o(.rodata);
data/battle_interface.o(.rodata);
- data/pokeball.o(.rodata);
+ src/pokeball.o(.rodata);
data/trade.o(.rodata);
data/berry_blender.o(.rodata);
src/new_game.o(.rodata);
diff --git a/src/battle_7.c b/src/battle_7.c
index a2990018e..a93237608 100644
--- a/src/battle_7.c
+++ b/src/battle_7.c
@@ -55,21 +55,21 @@ extern void (*gAnimScriptCallback)(void);
extern u8 gAnimScriptActive;
extern const u8 *const gBattleAnims_Unknown1[];
extern const u8 *const gBattleAnims_Unknown2[];
-extern const struct SpriteSheet gTrainerFrontPicTable[];
+extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
-extern const struct SpritePalette gTrainerFrontPicPaletteTable[];
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const u8 gSubstituteDollTilemap[];
extern const u8 gSubstituteDollGfx[];
extern const u8 gSubstituteDollPal[];
-extern const struct SpriteSheet gUnknown_081FAF24;
+extern const struct CompressedSpriteSheet gUnknown_081FAF24;
extern const struct SpriteTemplate gSpriteTemplate_81FAF34;
extern void (*const gOpponentBufferCommands[])(void);
-extern const struct SpriteSheet gUnknown_0820A47C;
-extern const struct SpriteSheet gUnknown_0820A484;
-extern const struct SpriteSheet gUnknown_0820A48C[];
-extern const struct SpriteSheet gUnknown_0820A49C[];
-extern const struct SpriteSheet gUnknown_0820A4AC;
-extern const struct SpriteSheet gUnknown_0820A4B4[];
+extern const struct CompressedSpriteSheet gUnknown_0820A47C;
+extern const struct CompressedSpriteSheet gUnknown_0820A484;
+extern const struct CompressedSpriteSheet gUnknown_0820A48C[];
+extern const struct CompressedSpriteSheet gUnknown_0820A49C[];
+extern const struct CompressedSpriteSheet gUnknown_0820A4AC;
+extern const struct CompressedSpriteSheet gUnknown_0820A4B4[];
extern const struct SpritePalette gUnknown_0820A4D4[];
extern const u8 gUnknown_08D09C48[];
@@ -84,10 +84,8 @@ extern u8 sub_8078874(u8);
extern u8 sub_8077F68(u8);
extern u8 sub_8077F7C(u8);
extern void sub_8094958(void);
-extern const u16 *pokemon_get_pal(struct Pokemon *);
extern void sub_80105DC(struct Sprite *);
extern void move_anim_start_t2();
-extern const u16 *species_and_otid_get_pal();
void sub_80315E8(u8);
u8 sub_803163C(u8);
@@ -283,7 +281,7 @@ void sub_8031794(struct Pokemon *pkmn, u8 b)
u32 otId;
u8 var;
u16 paletteOffset;
- const u16 *palette;
+ const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
if (ewram17800[b].unk2 == 0)
@@ -308,16 +306,16 @@ void sub_8031794(struct Pokemon *pkmn, u8 b)
r7);
paletteOffset = 0x100 + b * 16;
if (ewram17800[b].unk2 == 0)
- palette = pokemon_get_pal(pkmn);
+ lzPaletteData = pokemon_get_pal(pkmn);
else
- palette = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(palette, ewram);
+ lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
+ sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
paletteOffset = 0x100 + b * 16;
- sub_800D238(palette, ewram + 0x16400);
+ sub_800D238(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
if (ewram17800[b].unk2 != 0)
@@ -335,7 +333,7 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b)
u32 otId;
u8 var;
u16 paletteOffset;
- const u16 *palette;
+ const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
if (ewram17800[b].unk2 == 0)
@@ -360,16 +358,16 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b)
r7);
paletteOffset = 0x100 + b * 16;
if (ewram17800[b].unk2 == 0)
- palette = pokemon_get_pal(pkmn);
+ lzPaletteData = pokemon_get_pal(pkmn);
else
- palette = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(palette, ewram);
+ lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
+ sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
paletteOffset = 0x100 + b * 16;
- sub_800D238(palette, ewram + 0x16400);
+ sub_800D238(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
if (ewram17800[b].unk2 != 0)
@@ -390,7 +388,7 @@ void nullsub_9(u16 unused)
void sub_8031A6C(u16 a, u8 b)
{
u8 status;
- struct SpriteSheet spriteSheet;
+ struct CompressedSpriteSheet spriteSheet;
status = GetBankIdentity(b);
DecompressPicFromTable_2(
@@ -624,7 +622,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
u32 personalityValue;
u32 otId;
u8 r10;
- const u16 *palette;
+ const u8 *lzPaletteData;
if (c)
{
@@ -697,14 +695,14 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800);
paletteOffset = 0x100 + a * 16;
- palette = species_and_otid_get_pal(species, otId, personalityValue);
- sub_800D238(palette, ewram);
+ lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
+ sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 32);
if (species == SPECIES_CASTFORM)
{
u16 *paletteSrc = (u16 *)(ewram + 0x16400);
- sub_800D238(palette, paletteSrc);
+ sub_800D238(lzPaletteData, paletteSrc);
LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32);
}
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index cc856d5cd..55ede1788 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -58,8 +58,8 @@ extern struct MusicPlayerInfo gMPlay_SE2;
extern const u16 gUnknown_081C7160[];
extern const u8 *const gBattleAnims_Moves[];
-extern const struct SpriteSheet gBattleAnimPicTable[];
-extern const struct SpritePalette gBattleAnimPaletteTable[];
+extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
+extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
static void RunAnimScriptCommand(void);
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 5647d4593..116ca2cca 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -38,8 +38,8 @@ extern struct BerryTagStatus gUnknown_0203932E;
extern u16 gScriptItemId;
extern u16 gUnknown_030041B4;
-extern const struct SpriteSheet gUnknown_083C1F74;
-extern const struct SpritePalette gUnknown_083C1F7C;
+extern const struct CompressedSpriteSheet gUnknown_083C1F74;
+extern const struct CompressedSpritePalette gUnknown_083C1F7C;
extern u8 *gUnknown_0841192C[];
diff --git a/src/credits.c b/src/credits.c
index a7d6191e6..8ec126a41 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1495,7 +1495,7 @@ void spritecb_81454E0(struct Sprite *sprite) {
static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
{
u32 personality;
- const u16 *palette;
+ const u8 *lzPaletteData;
u8 spriteId;
u8 spriteId2;
@@ -1527,8 +1527,8 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
1
);
- palette = species_and_otid_get_pal(species, 0, 0xFFFF);
- LoadCompressedPalette(palette, 0x100 + (position * 16), 0x20);
+ lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF);
+ LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20);
sub_8143648(position, position);
spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
diff --git a/src/decompress.c b/src/decompress.c
index 1d38447b5..d7f7087a7 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -16,57 +16,57 @@ void LZDecompressVram(const void *src, void *dest)
LZ77UnCompVram(src, dest);
}
-void LoadCompressedObjectPic(const struct SpriteSheet *a)
+void LoadCompressedObjectPic(const struct CompressedSpriteSheet *src)
{
- struct SpriteSheet spriteSheet;
+ struct SpriteSheet dest;
- LZ77UnCompWram(a->data, (void *)WRAM);
- spriteSheet.data = (void *)WRAM;
- spriteSheet.size = a->size;
- spriteSheet.tag = a->tag;
- LoadSpriteSheet(&spriteSheet);
+ LZ77UnCompWram(src->data, (void *)WRAM);
+ dest.data = (void *)WRAM;
+ dest.size = src->size;
+ dest.tag = src->tag;
+ LoadSpriteSheet(&dest);
}
-void LoadCompressedObjectPicOverrideBuffer(const struct SpriteSheet *a, void *buffer)
+void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer)
{
- struct SpriteSheet spriteSheet;
+ struct SpriteSheet dest;
- LZ77UnCompWram(a->data, buffer);
- spriteSheet.data = buffer;
- spriteSheet.size = a->size;
- spriteSheet.tag = a->tag;
- LoadSpriteSheet(&spriteSheet);
+ LZ77UnCompWram(src->data, buffer);
+ dest.data = buffer;
+ dest.size = src->size;
+ dest.tag = src->tag;
+ LoadSpriteSheet(&dest);
}
-void LoadCompressedObjectPalette(const struct SpritePalette *a)
+void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src)
{
- struct SpritePalette spritePalette;
+ struct SpritePalette dest;
- LZ77UnCompWram(a->data, (void *)WRAM);
- spritePalette.data = (void *)WRAM;
- spritePalette.tag = a->tag;
- LoadSpritePalette(&spritePalette);
+ LZ77UnCompWram(src->data, (void *)WRAM);
+ dest.data = (void *)WRAM;
+ dest.tag = src->tag;
+ LoadSpritePalette(&dest);
}
-void LoadCompressedObjectPaletteOverrideBuffer(const struct SpritePalette *a, void *buffer)
+void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer)
{
- struct SpritePalette spritePalette;
+ struct SpritePalette dest;
LZ77UnCompWram(a->data, buffer);
- spritePalette.data = buffer;
- spritePalette.tag = a->tag;
- LoadSpritePalette(&spritePalette);
+ dest.data = buffer;
+ dest.tag = a->tag;
+ LoadSpritePalette(&dest);
}
-void DecompressPicFromTable_2(const struct SpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 species)
+void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, u8 b, u8 c, void *d, void *buffer, s32 species)
{
if (species > SPECIES_EGG)
- LZ77UnCompWram(gMonFrontPicTable[0].data, e);
+ LZ77UnCompWram(gMonFrontPicTable[0].data, buffer);
else
- LZ77UnCompWram(a->data, e);
+ LZ77UnCompWram(src->data, buffer);
}
-void HandleLoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g)
+void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g)
{
u32 frontOrBack;
@@ -76,10 +76,10 @@ void HandleLoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32
else
frontOrBack = 1; // frontPic
- LoadSpecialPokePic(spriteSheet, b, c, d, dest, species, g, frontOrBack);
+ LoadSpecialPokePic(src, b, c, d, dest, species, g, frontOrBack);
}
-void LoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 frontOrBack)
+void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 frontOrBack)
{
u8 frontOrBack8 = frontOrBack;
@@ -101,7 +101,7 @@ void LoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32
else if (species > SPECIES_EGG) // is species unknown? draw the ? icon
LZ77UnCompWram(gMonFrontPicTable[0].data, dest);
else
- LZ77UnCompWram(spriteSheet->data, dest);
+ LZ77UnCompWram(src->data, dest);
DrawSpindaSpots(species, g, dest, frontOrBack8);
}
diff --git a/src/field_effect.c b/src/field_effect.c
index 9591bb6a0..a7f0e4129 100755
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -657,7 +657,8 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
{
- const struct SpritePalette *spritePalette;
+ const struct CompressedSpritePalette *spritePalette;
+
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g);
spritePalette = sub_80409C8(species, d, g);
LoadCompressedObjectPalette(spritePalette);
diff --git a/src/intro.c b/src/intro.c
index f13bd04e6..396f5e5df 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -31,7 +31,7 @@ extern struct GcmbStruct gMultibootProgramStruct;
extern u16 gSaveFileStatus;
extern u8 gReservedSpritePaletteCount;
extern const u8 gInterfaceGfx_PokeBall[];
-extern const u16 gInterfacePal_PokeBall[];
+extern const u8 gInterfacePal_PokeBall[];
extern const u8 gIntroCopyright_Gfx[];
extern const u16 gIntroCopyright_Pal[];
extern const u16 gIntroCopyright_Tilemap[];
@@ -411,12 +411,12 @@ static const struct SpriteTemplate gSpriteTemplate_840AFF0 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_813DA64,
};
-const struct SpriteSheet gUnknown_0840B008[] =
+const struct CompressedSpriteSheet gUnknown_0840B008[] =
{
{gIntroTiles, 0x1400, 2000},
{NULL},
};
-const struct SpriteSheet gUnknown_0840B018[] =
+const struct CompressedSpriteSheet gUnknown_0840B018[] =
{
{gIntro1EonTiles, 0x400, 2002},
{NULL},
@@ -738,17 +738,17 @@ static const struct SpriteTemplate gSpriteTemplate_840B1F4 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_813EDFC,
};
-const struct SpriteSheet gIntro3PokeballGfx_Table[] =
+const struct CompressedSpriteSheet gIntro3PokeballGfx_Table[] =
{
{gInterfaceGfx_PokeBall, 0x100, 2002},
{NULL},
};
-const struct SpriteSheet gIntro3MiscGfx_Table[] =
+const struct CompressedSpriteSheet gIntro3MiscGfx_Table[] =
{
{gIntro3MiscTiles, 0xa00, 2003},
{NULL},
};
-const struct SpritePalette gInterfacePokeballPal_Table[] =
+const struct CompressedSpritePalette gInterfacePokeballPal_Table[] =
{
{gInterfacePal_PokeBall, 2002},
{NULL},
@@ -1772,15 +1772,15 @@ void sub_813CE30(u16 scrX, u16 scrY, u16 zoom, u16 alpha)
static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front)
{
- const u16 *pal;
+ const u8 *lzPaletteData;
u8 spriteId;
if (front)
LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1);
else
LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0);
- pal = species_and_otid_get_pal(species, 0, 0xFFFF);
- LoadCompressedPalette(pal, 0x100 + d * 0x10, 0x20);
+ lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF);
+ LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20);
sub_8143648(d, d);
spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4);
gSprites[spriteId].oam.paletteNum = d;
diff --git a/src/money.c b/src/money.c
index de0730951..ab4508a39 100644
--- a/src/money.c
+++ b/src/money.c
@@ -10,8 +10,8 @@
extern u16 gSpecialVar_0x8005;
extern u8 gUnknown_02038734;
-extern const struct SpriteSheet gUnknown_083CF584;
-extern const struct SpritePalette gUnknown_083CF58C;
+extern const struct CompressedSpriteSheet gUnknown_083CF584;
+extern const struct CompressedSpritePalette gUnknown_083CF58C;
extern const struct SpriteTemplate gSpriteTemplate_83CF56C;
bool8 IsEnoughMoney(u32 budget, u32 cost)
diff --git a/src/pokeball.c b/src/pokeball.c
new file mode 100644
index 000000000..ee3b95678
--- /dev/null
+++ b/src/pokeball.c
@@ -0,0 +1,1193 @@
+#include "global.h"
+#include "gba/m4a_internal.h"
+#include "battle.h"
+#include "decompress.h"
+#include "graphics.h"
+#include "m4a.h"
+#include "main.h"
+#include "pokeball.h"
+#include "pokemon.h"
+#include "rom_8077ABC.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u16 gBattleTypeFlags;
+extern u8 gBankTarget;
+extern u8 gActiveBank;
+extern u16 gBattlePartyID[];
+extern u8 gObjectBankIDs[];
+extern u8 gDoingBattleAnim;
+extern u8 gHealthboxIDs[];
+
+#define GFX_TAG_POKEBALL 55000
+#define GFX_TAG_GREATBALL 55001
+#define GFX_TAG_SAFARIBALL 55002
+#define GFX_TAG_ULTRABALL 55003
+#define GFX_TAG_MASTERBALL 55004
+#define GFX_TAG_NETBALL 55005
+#define GFX_TAG_DIVEBALL 55006
+#define GFX_TAG_NESTBALL 55007
+#define GFX_TAG_REPEATBALL 55008
+#define GFX_TAG_TIMERBALL 55009
+#define GFX_TAG_LUXURYBALL 55010
+#define GFX_TAG_PREMIERBALL 55011
+
+static const struct CompressedSpriteSheet sBallSpriteSheets[] =
+{
+ {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL},
+ {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL},
+ {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL},
+ {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL},
+ {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL},
+ {gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL},
+ {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL},
+ {gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL},
+ {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL},
+ {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL},
+ {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL},
+ {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL},
+};
+
+static const struct CompressedSpritePalette sBallSpritePalettes[] =
+{
+ {gInterfacePal_PokeBall, GFX_TAG_POKEBALL},
+ {gInterfacePal_GreatBall, GFX_TAG_GREATBALL},
+ {gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL},
+ {gInterfacePal_UltraBall, GFX_TAG_ULTRABALL},
+ {gInterfacePal_MasterBall, GFX_TAG_MASTERBALL},
+ {gInterfacePal_NetBall, GFX_TAG_NETBALL},
+ {gInterfacePal_DiveBall, GFX_TAG_DIVEBALL},
+ {gInterfacePal_NestBall, GFX_TAG_NESTBALL},
+ {gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL},
+ {gInterfacePal_TimerBall, GFX_TAG_TIMERBALL},
+ {gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL},
+ {gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL},
+};
+
+static const struct OamData sBallOamData =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sBallAnimSeq3[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq5[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq4[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq6[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sBallAnimSeq0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sBallAnimSeq1[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sBallAnimSeq2[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sBallAnimSequences[] =
+{
+ sBallAnimSeq0,
+ sBallAnimSeq1,
+ sBallAnimSeq2,
+
+ // unused?
+ sBallAnimSeq3,
+ sBallAnimSeq4,
+ sBallAnimSeq5,
+ sBallAnimSeq6,
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq1[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -3, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq2[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 3, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq3[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sBallAffineAnimSeq4[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 25, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd *const sBallAffineAnimSequences[] =
+{
+ sBallAffineAnimSeq0,
+ sBallAffineAnimSeq1,
+ sBallAffineAnimSeq2,
+ sBallAffineAnimSeq3,
+ sBallAffineAnimSeq4,
+};
+
+static void objc_0804ABD4(struct Sprite *sprite);
+const struct SpriteTemplate gBallSpriteTemplates[] =
+{
+ {
+ .tileTag = GFX_TAG_POKEBALL,
+ .paletteTag = GFX_TAG_POKEBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_GREATBALL,
+ .paletteTag = GFX_TAG_GREATBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_SAFARIBALL,
+ .paletteTag = GFX_TAG_SAFARIBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_ULTRABALL,
+ .paletteTag = GFX_TAG_ULTRABALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_MASTERBALL,
+ .paletteTag = GFX_TAG_MASTERBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_NETBALL,
+ .paletteTag = GFX_TAG_NETBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_DIVEBALL,
+ .paletteTag = GFX_TAG_DIVEBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_NESTBALL,
+ .paletteTag = GFX_TAG_NESTBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_REPEATBALL,
+ .paletteTag = GFX_TAG_REPEATBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_TIMERBALL,
+ .paletteTag = GFX_TAG_TIMERBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_LUXURYBALL,
+ .paletteTag = GFX_TAG_LUXURYBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+ {
+ .tileTag = GFX_TAG_PREMIERBALL,
+ .paletteTag = GFX_TAG_PREMIERBALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sBallAffineAnimSequences,
+ .callback = objc_0804ABD4,
+ },
+};
+
+extern u32 ball_number_to_ball_processing_index(u16); // not sure of return type
+extern void sub_80786EC();
+extern bool8 sub_8078718(struct Sprite *);
+extern u8 sub_814086C(u8, u8, int, int, u8);
+extern u8 sub_8141314(u8, u8, int, u8);
+
+static void sub_8046464(u8);
+static void sub_80466E8(struct Sprite *);
+static void sub_80466F4(struct Sprite *);
+static void sub_8046760(struct Sprite *);
+static void sub_80467F8(struct Sprite *);
+static void sub_804684C(struct Sprite *);
+static void sub_8046944(struct Sprite *);
+static void sub_8046984(struct Sprite *);
+static void sub_8046C78(struct Sprite *);
+static void sub_8046E7C(struct Sprite *);
+static void sub_8046E9C(struct Sprite *);
+static void sub_8046FBC(struct Sprite *);
+static void sub_8047074(struct Sprite *);
+static void sub_80470C4(struct Sprite *);
+static void sub_8047230(struct Sprite *);
+static void sub_8047254(struct Sprite *);
+static void sub_80473D0(struct Sprite *);
+static void sub_804748C(struct Sprite *);
+static void sub_8047638(struct Sprite *);
+static void sub_80476E0(struct Sprite *);
+static void sub_8047754(struct Sprite *);
+static void sub_804780C(struct Sprite *);
+static void sub_8047830(struct Sprite *);
+static void oamc_804BEB4(struct Sprite *);
+static u16 sub_8047978(u8);
+
+u8 sub_8046400(u16 a, u8 b)
+{
+ u8 taskId;
+
+ gDoingBattleAnim = 1;
+ ewram17810[gActiveBank].unk0_3 = 1;
+ taskId = CreateTask(sub_8046464, 5);
+ gTasks[taskId].data[1] = a;
+ gTasks[taskId].data[2] = b;
+ gTasks[taskId].data[3] = gActiveBank;
+ return 0;
+}
+
+static void sub_8046464(u8 taskId)
+{
+ bool8 sp0 = FALSE;
+ u16 r8;
+ u8 r5;
+ u16 ball;
+ u8 r4;
+ u8 spriteId;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ return;
+ }
+ r8 = gTasks[taskId].data[2];
+ r5 = gTasks[taskId].data[3];
+ if (GetBankSide(r5) != 0)
+ ball = GetMonData(&gEnemyParty[gBattlePartyID[r5]], MON_DATA_POKEBALL);
+ else
+ ball = GetMonData(&gPlayerParty[gBattlePartyID[r5]], MON_DATA_POKEBALL);
+ r4 = ball_number_to_ball_processing_index(ball);
+ sub_80478DC(r4);
+ spriteId = CreateSprite(&gBallSpriteTemplates[r4], 32, 80, 0x1D);
+ gSprites[spriteId].data0 = 0x80;
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].data7 = r8;
+ switch (r8)
+ {
+ case 0xFF:
+ gBankTarget = r5;
+ gSprites[spriteId].pos1.x = 24;
+ gSprites[spriteId].pos1.y = 68;
+ gSprites[spriteId].callback = sub_8047074;
+ break;
+ case 0xFE:
+ gSprites[spriteId].pos1.x = sub_8077ABC(r5, 0);
+ gSprites[spriteId].pos1.y = sub_8077ABC(r5, 1) + 24;
+ gBankTarget = r5;
+ gSprites[spriteId].data0 = 0;
+ gSprites[spriteId].callback = sub_8047254;
+ break;
+ default:
+ gBankTarget = GetBankByPlayerAI(1);
+ sp0 = TRUE;
+ break;
+ }
+ gSprites[spriteId].data6 = gBankTarget;
+ if (!sp0)
+ {
+ DestroyTask(taskId);
+ return;
+ }
+ gSprites[spriteId].data0 = 0x22;
+ gSprites[spriteId].data2 = sub_8077ABC(gBankTarget, 0);
+ gSprites[spriteId].data4 = sub_8077ABC(gBankTarget, 1) - 16;
+ gSprites[spriteId].data5 = -40;
+ sub_80786EC(&gSprites[spriteId]);
+ gSprites[spriteId].oam.affineParam = taskId;
+ gTasks[taskId].data[4] = gBankTarget;
+ gTasks[taskId].func = TaskDummy;
+ PlaySE(SE_NAGERU);
+}
+
+static void objc_0804ABD4(struct Sprite *sprite)
+{
+ if (sub_8078718(sprite))
+ {
+ u8 taskId = sprite->oam.affineParam;
+ u8 r5 = gTasks[taskId].data[4];
+ u8 r8 = gTasks[taskId].data[2];
+ u32 r4; // not sure of this type
+
+ StartSpriteAnim(sprite, 1);
+ sprite->affineAnimPaused = TRUE;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data5 = 0;
+ r4 = ball_number_to_ball_processing_index(sub_8047978(r5));
+ sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4);
+ sprite->data0 = sub_8141314(0, r5, 14, r4);
+ sprite->data6 = r5;
+ sprite->data7 = r8;
+ DestroyTask(taskId);
+ sprite->callback = sub_80466E8;
+ }
+}
+
+static void sub_80466E8(struct Sprite *sprite)
+{
+ sprite->callback = sub_80466F4;
+}
+
+static void sub_80466F4(struct Sprite *sprite)
+{
+ sprite->data5++;
+ if (sprite->data5 == 10)
+ {
+ sprite->data5 = 0;
+ sprite->callback = sub_8046760;
+ StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 2);
+ AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]);
+ gSprites[gObjectBankIDs[sprite->data6]].data1 = 0;
+ }
+}
+
+static void sub_8046760(struct Sprite *sprite)
+{
+ sprite->data5++;
+ if (sprite->data5 == 11)
+ PlaySE(SE_SUIKOMU);
+ if (gSprites[gObjectBankIDs[sprite->data6]].affineAnimEnded)
+ {
+ StartSpriteAnim(sprite, 2);
+ gSprites[gObjectBankIDs[sprite->data6]].invisible = TRUE;
+ sprite->data5 = 0;
+ sprite->callback = sub_80467F8;
+ }
+ else
+ {
+ gSprites[gObjectBankIDs[sprite->data6]].data1 += 0x60;
+ gSprites[gObjectBankIDs[sprite->data6]].pos2.y = -gSprites[gObjectBankIDs[sprite->data6]].data1 >> 8;
+ }
+}
+
+static void sub_80467F8(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ sprite->data5++;
+ if (sprite->data5 == 1)
+ {
+ sprite->data3 = 0;
+ sprite->data4 = 32;
+ sprite->data5 = 0;
+ sprite->pos1.y += Cos(0, 32);
+ sprite->pos2.y = -Cos(0, sprite->data4);
+ sprite->callback = sub_804684C;
+ }
+ }
+}
+
+static void sub_804684C(struct Sprite *sprite)
+{
+ bool8 r5 = FALSE;
+
+ switch (sprite->data3 & 0xFF)
+ {
+ case 0:
+ sprite->pos2.y = -Cos(sprite->data5, sprite->data4);
+ sprite->data5 += 4 + (sprite->data3 >> 8);
+ if (sprite->data5 >= 64)
+ {
+ sprite->data4 -= 10;
+ sprite->data3 += 0x101;
+ if (sprite->data3 >> 8 == 4)
+ r5 = TRUE;
+ switch (sprite->data3 >> 8)
+ {
+ case 1:
+ PlaySE(SE_KON);
+ break;
+ case 2:
+ PlaySE(SE_KON2);
+ break;
+ case 3:
+ PlaySE(SE_KON3);
+ break;
+ default:
+ PlaySE(SE_KON4);
+ break;
+ }
+ }
+ break;
+ case 1:
+ sprite->pos2.y = -Cos(sprite->data5, sprite->data4);
+ sprite->data5 -= 4 + (sprite->data3 >> 8);
+ if (sprite->data5 <= 0)
+ {
+ sprite->data5 = 0;
+ sprite->data3 &= 0xFF00;
+ }
+ break;
+ }
+ if (r5)
+ {
+ sprite->data3 = 0;
+ sprite->pos1.y += Cos(64, 32);
+ sprite->pos2.y = 0;
+ if (sprite->data7 == 0)
+ {
+ sprite->callback = sub_8046C78;
+ }
+ else
+ {
+ sprite->callback = sub_8046944;
+ sprite->data4 = 1;
+ sprite->data5 = 0;
+ }
+ }
+}
+
+static void sub_8046944(struct Sprite *sprite)
+{
+ sprite->data3++;
+ if (sprite->data3 == 31)
+ {
+ sprite->data3 = 0;
+ sprite->affineAnimPaused = TRUE;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_8046984;
+ PlaySE(SE_BOWA);
+ }
+}
+
+static void sub_8046984(struct Sprite *sprite)
+{
+ switch (sprite->data3 & 0xFF)
+ {
+ case 0:
+ case 2:
+ sprite->pos2.x += sprite->data4;
+ sprite->data5 += sprite->data4;
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->data5 > 3 || sprite->data5 < -3)
+ {
+ sprite->data3++;
+ sprite->data5 = 0;
+ }
+ break;
+ case 1:
+ sprite->data5++;
+ if (sprite->data5 == 1)
+ {
+ sprite->data5 = 0;
+ sprite->data4 = -sprite->data4;
+ sprite->data3++;
+ sprite->affineAnimPaused = FALSE;
+ if (sprite->data4 < 0)
+ ChangeSpriteAffineAnim(sprite, 2);
+ else
+ ChangeSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->affineAnimPaused = TRUE;
+ }
+ break;
+ case 3:
+ sprite->data3 += 0x100;
+ if (sprite->data3 >> 8 == sprite->data7)
+ {
+ sprite->callback = sub_8046C78;
+ }
+ else
+ {
+ if (sprite->data7 == 4 && sprite->data3 >> 8 == 3)
+ {
+ sprite->callback = sub_8046E7C;
+ sprite->affineAnimPaused = TRUE;
+ }
+ else
+ {
+ sprite->data3++;
+ sprite->affineAnimPaused = TRUE;
+ }
+ }
+ break;
+ case 4:
+ default:
+ sprite->data5++;
+ if (sprite->data5 == 31)
+ {
+ sprite->data5 = 0;
+ sprite->data3 &= 0xFF00;
+ StartSpriteAffineAnim(sprite, 3);
+ if (sprite->data4 < 0)
+ StartSpriteAffineAnim(sprite, 2);
+ else
+ StartSpriteAffineAnim(sprite, 1);
+ PlaySE(SE_BOWA);
+ }
+ break;
+ }
+}
+
+static void sub_8046AD0(u8 taskId)
+{
+ u8 r6 = gTasks[taskId].data[2];
+ u8 r3 = gTasks[taskId].data[1];
+ u16 species = gTasks[taskId].data[0];
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ default:
+ if (gTasks[taskId].data[8] < 3)
+ gTasks[taskId].data[8]++;
+ else
+ gTasks[taskId].data[15] = r6 + 1;
+ break;
+ case 1:
+ PlayCry1(species, r3);
+ DestroyTask(taskId);
+ break;
+ case 2:
+ StopCryAndClearCrySongs();
+ gTasks[taskId].data[10] = 3;
+ gTasks[taskId].data[15] = 20;
+ break;
+ case 20:
+ if (gTasks[taskId].data[10] != 0)
+ {
+ gTasks[taskId].data[10]--;
+ break;
+ }
+ PlayCry4(species, r3, 1);
+ DestroyTask(taskId);
+ break;
+ case 3:
+ gTasks[taskId].data[10] = 6;
+ gTasks[taskId].data[15] = 30;
+ break;
+ case 30:
+ if (gTasks[taskId].data[10] != 0)
+ {
+ gTasks[taskId].data[10]--;
+ break;
+ }
+ gTasks[taskId].data[15]++;
+ // fall through
+ case 31:
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ StopCryAndClearCrySongs();
+ gTasks[taskId].data[10] = 3;
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 32:
+ if (gTasks[taskId].data[10] != 0)
+ {
+ gTasks[taskId].data[10]--;
+ break;
+ }
+ PlayCry4(species, r3, 0);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_8046C78(struct Sprite *sprite)
+{
+ u8 r5 = sprite->data6;
+ u32 r4; // not sure of this type
+
+ StartSpriteAnim(sprite, 1);
+ r4 = ball_number_to_ball_processing_index(sub_8047978(r5));
+ sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4);
+ sprite->data0 = sub_8141314(1, sprite->data6, 14, r4);
+ sprite->callback = sub_8046E9C;
+ if (gMain.inBattle)
+ {
+ struct Pokemon *pkmn;
+ u16 species;
+ s8 r8;
+ u16 r4_2;
+ u8 taskId;
+
+ if (GetBankSide(r5) != 0)
+ {
+ pkmn = &gEnemyParty[gBattlePartyID[r5]];
+ r8 = 25;
+ }
+ else
+ {
+ pkmn = &gPlayerParty[gBattlePartyID[r5]];
+ r8 = -25;
+ }
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ if ((r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1))
+ && IsDoubleBattle() && ewram17840.unk9_0)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (IsBGMPlaying())
+ m4aMPlayStop(&gMPlay_BGM);
+ }
+ else
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128);
+ }
+ }
+ if (!IsDoubleBattle() || !ewram17840.unk9_0)
+ r4_2 = 0;
+ else if (r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1))
+ r4_2 = 1;
+ else
+ r4_2 = 2;
+ taskId = CreateTask(sub_8046AD0, 3);
+ gTasks[taskId].data[0] = species;
+ gTasks[taskId].data[1] = r8;
+ gTasks[taskId].data[2] = r4_2;
+ gTasks[taskId].data[15] = 0;
+ }
+ StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 1);
+ AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]);
+ gSprites[gObjectBankIDs[sprite->data6]].data1 = 0x1000;
+}
+
+static void sub_8046E7C(struct Sprite *sprite)
+{
+ sprite->animPaused = TRUE;
+ sprite->callback = sub_8046FBC;
+ sprite->data3 = 0;
+ sprite->data4 = 0;
+ sprite->data5 = 0;
+}
+
+static void sub_8046E9C(struct Sprite *sprite)
+{
+ bool8 r7 = FALSE;
+ u8 r4 = sprite->data6;
+
+ gSprites[gObjectBankIDs[r4]].invisible = FALSE;
+ if (sprite->animEnded)
+ sprite->invisible = TRUE;
+ if (gSprites[gObjectBankIDs[r4]].affineAnimEnded)
+ {
+ StartSpriteAffineAnim(&gSprites[gObjectBankIDs[r4]], 0);
+ r7 = TRUE;
+ }
+ else
+ {
+ gSprites[gObjectBankIDs[r4]].data1 -= 288;
+ gSprites[gObjectBankIDs[r4]].pos2.y = gSprites[gObjectBankIDs[r4]].data1 >> 8;
+ }
+ if (sprite->animEnded && r7)
+ {
+ s32 i;
+ u32 r3;
+
+ gSprites[gObjectBankIDs[r4]].pos2.y = 0;
+ gDoingBattleAnim = 0;
+ ewram17810[r4].unk0_3 = 0;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ for (r3 = 0, i = 0; i < 4; i++)
+ {
+ if (ewram17810[i].unk0_3 == 0)
+ r3++;
+ }
+ if (r3 == 4)
+ {
+ for (i = 0; i < 12; i++)
+ sub_804794C(i);
+ }
+ }
+}
+
+static void sub_8046FBC(struct Sprite *sprite)
+{
+ u8 r7 = sprite->data6;
+
+ sprite->data4++;
+ if (sprite->data4 == 40)
+ {
+ return;
+ }
+ else if (sprite->data4 == 95)
+ {
+ gDoingBattleAnim = 0;
+ m4aMPlayAllStop();
+ PlaySE(BGM_FANFA5);
+ }
+ else if (sprite->data4 == 315)
+ {
+ FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data6]].oam.matrixNum);
+ DestroySprite(&gSprites[gObjectBankIDs[sprite->data6]]);
+ DestroySpriteAndFreeResources(sprite);
+ if (gMain.inBattle)
+ ewram17810[r7].unk0_3 = 0;
+ }
+}
+
+static void sub_8047074(struct Sprite *sprite)
+{
+ sprite->data0 = 25;
+ sprite->data2 = sub_8077ABC(sprite->data6, 2);
+ sprite->data4 = sub_8077ABC(sprite->data6, 3) + 24;
+ sprite->data5 = -30;
+ sprite->oam.affineParam = sprite->data6;
+ sub_80786EC(sprite);
+ sprite->callback = sub_80470C4;
+}
+
+#define HIBYTE(x) (((x) >> 8) & 0xFF)
+
+static void sub_80470C4(struct Sprite *sprite)
+{
+ u32 r6;
+ u32 r7;
+
+ if (HIBYTE(sprite->data7) >= 35 && HIBYTE(sprite->data7) < 80)
+ {
+ s16 r4;
+
+ if ((sprite->oam.affineParam & 0xFF00) == 0)
+ {
+ r6 = sprite->data1 & 1;
+ r7 = sprite->data2 & 1;
+ sprite->data1 = ((sprite->data1 / 3) & ~1) | r6;
+ sprite->data2 = ((sprite->data2 / 3) & ~1) | r7;
+ StartSpriteAffineAnim(sprite, 4);
+ }
+ r4 = sprite->data0;
+ sub_8078B5C(sprite);
+ sprite->data7 += sprite->data6 / 3;
+ sprite->pos2.y += Sin(HIBYTE(sprite->data7), sprite->data5);
+ sprite->oam.affineParam += 0x100;
+ if ((sprite->oam.affineParam >> 8) % 3 != 0)
+ sprite->data0 = r4;
+ else
+ sprite->data0 = r4 - 1;
+ if (HIBYTE(sprite->data7) >= 80)
+ {
+ r6 = sprite->data1 & 1;
+ r7 = sprite->data2 & 1;
+ sprite->data1 = ((sprite->data1 * 3) & ~1) | r6;
+ sprite->data2 = ((sprite->data2 * 3) & ~1) | r7;
+ }
+ }
+ else
+ {
+ if (sub_8078718(sprite))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data6 = sprite->oam.affineParam & 0xFF;
+ sprite->data0 = 0;
+ if (IsDoubleBattle() && ewram17840.unk9_0
+ && sprite->data6 == GetBankByPlayerAI(2))
+ sprite->callback = sub_8047230;
+ else
+ sprite->callback = sub_8046C78;
+ StartSpriteAffineAnim(sprite, 0);
+ }
+ }
+}
+
+static void sub_8047230(struct Sprite *sprite)
+{
+ if (sprite->data0++ > 24)
+ {
+ sprite->data0 = 0;
+ sprite->callback = sub_8046C78;
+ }
+}
+
+static void sub_8047254(struct Sprite *sprite)
+{
+ sprite->data0++;
+ if (sprite->data0 > 15)
+ {
+ sprite->data0 = 0;
+ if (IsDoubleBattle() && ewram17840.unk9_0
+ && sprite->data6 == GetBankByPlayerAI(3))
+ sprite->callback = sub_8047230;
+ else
+ sprite->callback = sub_8046C78;
+ }
+}
+
+static u8 sub_80472B0(u8 a, u8 b, u8 c, u8 d)
+{
+ return sub_814086C(a, b, c, d, 0);
+}
+
+static u8 sub_80472D8(u8 a, u8 b, u32 c)
+{
+ return sub_8141314(a, b, c, 0);
+}
+
+void CreatePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&sBallSpriteSheets[0]);
+ LoadCompressedObjectPalette(&sBallSpritePalettes[0]);
+ spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f);
+ gSprites[spriteId].data0 = a;
+ gSprites[spriteId].data5 = gSprites[a].pos1.x;
+ gSprites[spriteId].data6 = gSprites[a].pos1.y;
+ gSprites[a].pos1.x = x;
+ gSprites[a].pos1.y = y;
+ gSprites[spriteId].data1 = g;
+ gSprites[spriteId].data2 = b;
+ gSprites[spriteId].data3 = h;
+ gSprites[spriteId].data4 = h >> 16;
+ gSprites[spriteId].oam.priority = e;
+ gSprites[spriteId].callback = sub_80473D0;
+ gSprites[a].invisible = TRUE;
+}
+
+static void sub_80473D0(struct Sprite *sprite)
+{
+ if (sprite->data1 == 0)
+ {
+ u8 r5;
+ u8 r7 = sprite->data0;
+ u8 r8 = sprite->data2;
+ u32 r4 = (u16)sprite->data3 | ((u16)sprite->data4 << 16);
+
+ if (sprite->subpriority != 0)
+ r5 = sprite->subpriority - 1;
+ else
+ r5 = 0;
+ StartSpriteAnim(sprite, 1);
+ sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
+ sprite->data1 = sub_80472D8(1, r8, r4);
+ sprite->callback = sub_804748C;
+ gSprites[r7].invisible = FALSE;
+ StartSpriteAffineAnim(&gSprites[r7], 1);
+ AnimateSprite(&gSprites[r7]);
+ gSprites[r7].data1 = 0x1000;
+ sprite->data7 = 0;
+ }
+ else
+ {
+ sprite->data1--;
+ }
+}
+
+static void sub_804748C(struct Sprite *sprite)
+{
+ bool8 r12 = FALSE;
+ bool8 r6 = FALSE;
+ u8 r3 = sprite->data0;
+ u16 var1;
+ u16 var2;
+
+ if (sprite->animEnded)
+ sprite->invisible = TRUE;
+ if (gSprites[r3].affineAnimEnded)
+ {
+ StartSpriteAffineAnim(&gSprites[r3], 0);
+ r12 = TRUE;
+ }
+ var1 = (sprite->data5 - sprite->pos1.x) * sprite->data7 / 128 + sprite->pos1.x;
+ var2 = (sprite->data6 - sprite->pos1.y) * sprite->data7 / 128 + sprite->pos1.y;
+ gSprites[r3].pos1.x = var1;
+ gSprites[r3].pos1.y = var2;
+ if (sprite->data7 < 128)
+ {
+ s16 sine = -(gSineTable[(u8)sprite->data7] / 8);
+
+ sprite->data7 += 4;
+ gSprites[r3].pos2.x = sine;
+ gSprites[r3].pos2.y = sine;
+ }
+ else
+ {
+ gSprites[r3].pos1.x = sprite->data5;
+ gSprites[r3].pos1.y = sprite->data6;
+ gSprites[r3].pos2.x = 0;
+ gSprites[r3].pos2.y = 0;
+ r6 = TRUE;
+ }
+ if (sprite->animEnded && r12 && r6)
+ DestroySpriteAndFreeResources(sprite);
+}
+
+u8 sub_8047580(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&sBallSpriteSheets[0]);
+ LoadCompressedObjectPalette(&sBallSpritePalettes[0]);
+ spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f);
+ gSprites[spriteId].data0 = a;
+ gSprites[spriteId].data1 = g;
+ gSprites[spriteId].data2 = b;
+ gSprites[spriteId].data3 = h;
+ gSprites[spriteId].data4 = h >> 16;
+ gSprites[spriteId].oam.priority = e;
+ gSprites[spriteId].callback = sub_8047638;
+ return spriteId;
+}
+
+static void sub_8047638(struct Sprite *sprite)
+{
+ if (sprite->data1 == 0)
+ {
+ u8 r6;
+ u8 r7 = sprite->data0;
+ u8 r8 = sprite->data2;
+ u32 r5 = (u16)sprite->data3 | ((u16)sprite->data4 << 16);
+
+ if (sprite->subpriority != 0)
+ r6 = sprite->subpriority - 1;
+ else
+ r6 = 0;
+ StartSpriteAnim(sprite, 1);
+ sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
+ sprite->data1 = sub_80472D8(1, r8, r5);
+ sprite->callback = sub_80476E0;
+ StartSpriteAffineAnim(&gSprites[r7], 2);
+ AnimateSprite(&gSprites[r7]);
+ gSprites[r7].data1 = 0;
+ }
+ else
+ {
+ sprite->data1--;
+ }
+}
+
+static void sub_80476E0(struct Sprite *sprite)
+{
+ u8 r1;
+
+ sprite->data5++;
+ if (sprite->data5 == 11)
+ PlaySE(SE_SUIKOMU);
+ r1 = sprite->data0;
+ if (gSprites[r1].affineAnimEnded)
+ {
+ StartSpriteAnim(sprite, 2);
+ gSprites[r1].invisible = TRUE;
+ sprite->data5 = 0;
+ sprite->callback = sub_8047754;
+ }
+ else
+ {
+ gSprites[r1].data1 += 96;
+ gSprites[r1].pos2.y = -gSprites[r1].data1 >> 8;
+ }
+}
+
+static void sub_8047754(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ sprite->callback = SpriteCallbackDummy;
+}
+
+void obj_delete_and_free_associated_resources_(struct Sprite *sprite)
+{
+ DestroySpriteAndFreeResources(sprite);
+}
+
+void sub_804777C(u8 a)
+{
+ struct Sprite *sprite = &gSprites[gHealthboxIDs[a]];
+
+ sprite->data0 = 5;
+ sprite->data1 = 0;
+ sprite->pos2.x = 0x73;
+ sprite->pos2.y = 0;
+ sprite->callback = sub_8047830;
+ if (GetBankSide(a) != 0)
+ {
+ sprite->data0 = -sprite->data0;
+ sprite->data1 = -sprite->data1;
+ sprite->pos2.x = -sprite->pos2.x;
+ sprite->pos2.y = -sprite->pos2.y;
+ }
+ gSprites[sprite->data5].callback(&gSprites[sprite->data5]);
+ if (GetBankIdentity(a) == 2)
+ sprite->callback = sub_804780C;
+}
+
+static void sub_804780C(struct Sprite *sprite)
+{
+ sprite->data1++;
+ if (sprite->data1 == 20)
+ {
+ sprite->data1 = 0;
+ sprite->callback = sub_8047830;
+ }
+}
+
+static void sub_8047830(struct Sprite *sprite)
+{
+ sprite->pos2.x -= sprite->data0;
+ sprite->pos2.y -= sprite->data1;
+ if (sprite->pos2.x == 0 && sprite->pos2.y == 0)
+ sprite->callback = SpriteCallbackDummy;
+}
+
+void sub_8047858(u8 a)
+{
+ u8 spriteId;
+
+ spriteId = CreateInvisibleSpriteWithCallback(oamc_804BEB4);
+ gSprites[spriteId].data0 = 1;
+ gSprites[spriteId].data1 = gHealthboxIDs[a];
+ gSprites[spriteId].callback = oamc_804BEB4;
+}
+
+static void oamc_804BEB4(struct Sprite *sprite)
+{
+ u8 r1 = sprite->data1;
+
+ gSprites[r1].pos2.y = sprite->data0;
+ sprite->data0 = -sprite->data0;
+ sprite->data2++;
+ if (sprite->data2 == 21)
+ {
+ gSprites[r1].pos2.x = 0;
+ gSprites[r1].pos2.y = 0;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_80478DC(u8 a)
+{
+ u16 var;
+
+ if (GetSpriteTileStartByTag(sBallSpriteSheets[a].tag) == 0xFFFF)
+ {
+ LoadCompressedObjectPic(&sBallSpriteSheets[a]);
+ LoadCompressedObjectPalette(&sBallSpritePalettes[a]);
+ }
+ switch (a)
+ {
+ case 6:
+ case 10:
+ case 11:
+ break;
+ default:
+ var = GetSpriteTileStartByTag(sBallSpriteSheets[a].tag);
+ LZDecompressVram(gUnknown_08D030D0, (void *)(VRAM + 0x10100 + var * 32));
+ break;
+ }
+}
+
+void sub_804794C(u8 a)
+{
+ FreeSpriteTilesByTag(sBallSpriteSheets[a].tag);
+ FreeSpritePaletteByTag(sBallSpritePalettes[a].tag);
+}
+
+static u16 sub_8047978(u8 a)
+{
+ if (GetBankSide(a) == 0)
+ return GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_POKEBALL);
+ else
+ return GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_POKEBALL);
+}
diff --git a/src/pokedex.c b/src/pokedex.c
index 8674c3d2b..17ae9a597 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -162,7 +162,7 @@ extern const u8 gUnknown_08E96ACC[];
extern const u8 gUnknown_08E96B58[];
extern const u16 gPokedexMenu_Pal[];
extern const u16 gPokedexMenu2_Pal[];
-extern const struct SpriteSheet gTrainerFrontPicTable[];
+extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
extern const struct PokedexEntry gPokedexEntries[];
extern const u8 gPokedexMenuSearch_Gfx[];
@@ -493,7 +493,7 @@ static const struct SpriteTemplate gSpriteTemplate_83A05B4 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_808F168,
};
-static const struct SpriteSheet gUnknown_083A05CC[] =
+static const struct CompressedSpriteSheet gUnknown_083A05CC[] =
{
{gPokedexMenu2_Gfx, 0x1F00, 0x1000},
{NULL, 0, 0},
@@ -3921,7 +3921,7 @@ static void sub_8090B8C(u8 taskId)
u32 otId;
u32 personality;
u8 paletteNum;
- const u16 *palette;
+ const u8 *lzPaletteData;
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000);
@@ -3930,8 +3930,8 @@ static void sub_8090B8C(u8 taskId)
otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12];
personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14];
paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum;
- palette = species_and_otid_get_pal(species, otId, personality);
- LoadCompressedPalette(palette, 0x100 | paletteNum * 16, 32);
+ lzPaletteData = species_and_otid_get_pal(species, otId, personality);
+ LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32);
DestroyTask(taskId);
}
}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index ef9a1698d..cb8eb2a46 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1172,7 +1172,7 @@ void current_map_music_set__default_for_battle(u16 song)
PlayNewMapMusic(sub_8040728());
}
-const u16 *pokemon_get_pal(struct Pokemon *mon)
+const u8 *pokemon_get_pal(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
@@ -1186,7 +1186,7 @@ const u16 *pokemon_get_pal(struct Pokemon *mon)
//Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
-const u16 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
+const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
@@ -1200,7 +1200,7 @@ const u16 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality)
return gMonPaletteTable[species].data;
}
-const struct SpritePalette *sub_8040990(struct Pokemon *mon)
+const struct CompressedSpritePalette *sub_8040990(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
@@ -1208,7 +1208,7 @@ const struct SpritePalette *sub_8040990(struct Pokemon *mon)
return sub_80409C8(species, otId, personality);
}
-const struct SpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality)
+const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality)
{
u32 shinyValue;
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index fb72be527..ecfd8111b 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -407,7 +407,7 @@ u8 sub_80C5044(void)
void ShowContestEntryMonPic(void)
{
- struct SpritePalette *paletteData;
+ const struct CompressedSpritePalette *palette;
u32 var1, var2;
u16 species;
u8 spriteId;
@@ -425,13 +425,18 @@ void ShowContestEntryMonPic(void)
taskId = CreateTask(sub_80C5190, 0x50);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = species;
- HandleLoadSpecialPokePic((struct SpriteSheet *)&gMonFrontPicTable[species].data,
- gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,
- (u32)gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], species, var1);
- paletteData = (struct SpritePalette *) sub_80409C8(species, var2, var1);
- LoadCompressedObjectPalette(paletteData);
+ HandleLoadSpecialPokePic(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ gMonFrontPicCoords[species].y_offset,
+ (u32)gUnknown_081FAF4C[0],
+ gUnknown_081FAF4C[1],
+ species,
+ var1);
+ palette = sub_80409C8(species, var2, var1);
+ LoadCompressedObjectPalette(palette);
GetMonSpriteTemplate_803C56C(species, 1);
- gUnknown_02024E8C.paletteTag = paletteData->tag;
+ gUnknown_02024E8C.paletteTag = palette->tag;
spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0);
gTasks[taskId].data[2] = spriteId;
gTasks[taskId].data[3] = left;
diff --git a/src/starter_choose.c b/src/starter_choose.c
index f30be8e08..c838f2dc0 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -172,12 +172,12 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7790[] =
{
gSpriteAffineAnim_83F7774,
};
-static const struct SpriteSheet gUnknown_083F7794[] =
+static const struct CompressedSpriteSheet gUnknown_083F7794[] =
{
{gBirchBallarrow_Gfx, 0x0800, 0x1000},
{NULL},
};
-static const struct SpriteSheet gUnknown_083F77A4[] =
+static const struct CompressedSpriteSheet gUnknown_083F77A4[] =
{
{gBirchCircle_Gfx, 0x0800, 0x1001},
{NULL},
diff --git a/src/title_screen.c b/src/title_screen.c
index 12c31d10a..dd06956c3 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -152,7 +152,7 @@ static const struct SpriteTemplate sVersionBannerRightSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_VersionBannerRight,
};
-static const struct SpriteSheet gUnknown_08393EFC[] =
+static const struct CompressedSpriteSheet gUnknown_08393EFC[] =
{
{gVersionTiles, 0x1000, 1000},
{NULL},
@@ -234,7 +234,7 @@ static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_PressStartCopyrightBanner,
};
-static const struct SpriteSheet gUnknown_08393F8C[] =
+static const struct CompressedSpriteSheet gUnknown_08393F8C[] =
{
{gTitleScreenPressStart_Gfx, 0x520, 1001},
{NULL},
@@ -279,7 +279,7 @@ static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_PokemonLogoShine,
};
-static const struct SpriteSheet sPokemonLogoShineSpriteSheet[] =
+static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] =
{
{sLogoShineTiles, 0x800, 1002},
{NULL},
diff --git a/src/wallclock.c b/src/wallclock.c
index efc7dd42a..8db13dc2d 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -24,7 +24,7 @@ extern u16 gMiscClockFemale_Pal[];
//--------------------------------------------------
static const u8 ClockGfx_Misc[] = INCBIN_U8("graphics/misc/clock_misc.4bpp.lz");
-static const struct SpriteSheet gUnknown_083F7A90[] =
+static const struct CompressedSpriteSheet gUnknown_083F7A90[] =
{
{ClockGfx_Misc, 0x2000, 0x1000},
{NULL},