summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2016-11-25 13:32:45 -0600
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-11-25 11:32:45 -0800
commite30044965f85abdbbcc80e37b1151bb7b7d786cb (patch)
treed1d0574119a1a7da8ff692a9b84e4345b056fdc5
parentbc912a7a7378dce12ebea75b82bbcf6d7c1e3524 (diff)
Decompile more intro functions (#108)
* start decompiling intro task * ignore Thumbs.db * decompile more code * actually ignore Thumbs.db * decompile more functions * fix sapphire * sort of fix task_intro_7 * name some functions and variables * more cleanup
-rw-r--r--.gitignore1
-rw-r--r--asm/rom_813BA94.s2007
-rw-r--r--asm/rom_8148B8C.s24
-rw-r--r--include/sprite.h10
-rw-r--r--src/decompress.c14
-rw-r--r--src/intro.c592
-rw-r--r--src/sprite.c14
-rw-r--r--sym_common.txt2
8 files changed, 616 insertions, 2048 deletions
diff --git a/.gitignore b/.gitignore
index 79b9641a0..550f7677c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,4 @@ types_*.taghl
*.s.old2
*.dump
*.sa*
+Thumbs.db
diff --git a/asm/rom_813BA94.s b/asm/rom_813BA94.s
index e11d5fad9..7e966cf91 100644
--- a/asm/rom_813BA94.s
+++ b/asm/rom_813BA94.s
@@ -6,1993 +6,6 @@
.text
- thumb_func_start task_intro_1
-task_intro_1: @ 813BA94
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- bl SetVBlankCallback
- ldr r4, _0813BC18 @ =gUnknown_02039318
- bl Random
- movs r1, 0x1
- ands r1, r0
- strh r1, [r4]
- bl intro_reset_and_hide_bgs
- ldr r0, _0813BC1C @ =REG_BG3VOFS
- movs r6, 0
- strh r6, [r0]
- ldr r1, _0813BC20 @ =REG_BG2VOFS
- movs r0, 0x50
- strh r0, [r1]
- subs r1, 0x4
- movs r0, 0x18
- strh r0, [r1]
- subs r1, 0x4
- movs r0, 0x28
- strh r0, [r1]
- ldr r0, _0813BC24 @ =gUnknown_08407764
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _0813BC28 @ =gUnknown_08406B74
- ldr r1, _0813BC2C @ =0x06008000
- bl LZ77UnCompVram
- ldr r1, _0813BC30 @ =0x06008800
- add r0, sp, 0x8
- strh r6, [r0]
- ldr r4, _0813BC34 @ =0x040000d4
- str r0, [r4]
- str r1, [r4, 0x4]
- ldr r5, _0813BC38 @ =0x81000400
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, _0813BC3C @ =gUnknown_08406F28
- ldr r1, _0813BC40 @ =0x06009000
- bl LZ77UnCompVram
- ldr r1, _0813BC44 @ =0x06009800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, _0813BC48 @ =gUnknown_0840725C
- ldr r1, _0813BC4C @ =0x0600a000
- bl LZ77UnCompVram
- ldr r1, _0813BC50 @ =0x0600a800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, _0813BC54 @ =gUnknown_0840754C
- ldr r1, _0813BC58 @ =0x0600b000
- bl LZ77UnCompVram
- ldr r1, _0813BC5C @ =0x0600b800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, _0813BC60 @ =gUnknown_08406974
- movs r5, 0x80
- lsls r5, 2
- movs r1, 0
- adds r2, r5, 0
- bl LoadPalette
- ldr r1, _0813BC64 @ =REG_BG3CNT
- ldr r2, _0813BC68 @ =0x00009603
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- ldr r3, _0813BC6C @ =0x00009402
- adds r0, r3, 0
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _0813BC70 @ =0x00009201
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- movs r3, 0x90
- lsls r3, 8
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _0813BC74 @ =gUnknown_0840B008
- bl LoadCompressedObjectPic
- ldr r0, _0813BC78 @ =gUnknown_0840B018
- bl LoadCompressedObjectPic
- ldr r0, _0813BC7C @ =gUnknown_0840B028
- bl LoadSpritePalettes
- ldr r4, _0813BC80 @ =gPlttBufferUnfaded + 0x200
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0x10
- bl CpuSet
- movs r2, 0xE1
- lsls r2, 1
- adds r1, r4, r2
- adds r0, r4, 0
- movs r2, 0xF
- bl CpuSet
- movs r3, 0xD2
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0xE
- bl CpuSet
- movs r0, 0xC3
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xD
- bl CpuSet
- movs r2, 0xB4
- lsls r2, 1
- adds r1, r4, r2
- adds r0, r4, 0
- movs r2, 0xC
- bl CpuSet
- movs r3, 0xA5
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0xB
- bl CpuSet
- movs r0, 0x96
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xA
- bl CpuSet
- movs r1, 0xE
- negs r1, r1
- movs r0, 0x78
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0xEC
- adds r2, r5, 0
- movs r3, 0x1
- bl sub_813D584
- ldr r2, _0813BC84 @ =gTasks
- mov r3, r8
- lsls r1, r3, 2
- add r1, r8
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x8]
- ldr r0, _0813BC88 @ =task_intro_2
- str r0, [r1]
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BC18: .4byte gUnknown_02039318
-_0813BC1C: .4byte REG_BG3VOFS
-_0813BC20: .4byte REG_BG2VOFS
-_0813BC24: .4byte gUnknown_08407764
-_0813BC28: .4byte gUnknown_08406B74
-_0813BC2C: .4byte 0x06008000
-_0813BC30: .4byte 0x06008800
-_0813BC34: .4byte 0x040000d4
-_0813BC38: .4byte 0x81000400
-_0813BC3C: .4byte gUnknown_08406F28
-_0813BC40: .4byte 0x06009000
-_0813BC44: .4byte 0x06009800
-_0813BC48: .4byte gUnknown_0840725C
-_0813BC4C: .4byte 0x0600a000
-_0813BC50: .4byte 0x0600a800
-_0813BC54: .4byte gUnknown_0840754C
-_0813BC58: .4byte 0x0600b000
-_0813BC5C: .4byte 0x0600b800
-_0813BC60: .4byte gUnknown_08406974
-_0813BC64: .4byte REG_BG3CNT
-_0813BC68: .4byte 0x00009603
-_0813BC6C: .4byte 0x00009402
-_0813BC70: .4byte 0x00009201
-_0813BC74: .4byte gUnknown_0840B008
-_0813BC78: .4byte gUnknown_0840B018
-_0813BC7C: .4byte gUnknown_0840B028
-_0813BC80: .4byte gPlttBufferUnfaded + 0x200
-_0813BC84: .4byte gTasks
-_0813BC88: .4byte task_intro_2
- thumb_func_end task_intro_1
-
- thumb_func_start task_intro_2
-task_intro_2: @ 813BC8C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r5, 0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _0813BCE0 @ =sub_813B784
- bl SetVBlankCallback
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xFA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _0813BCE4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813BCE8 @ =sub_813BCF0
- str r1, [r0]
- ldr r0, _0813BCEC @ =gUnknown_03005ED0
- str r5, [r0]
- movs r0, 0xCF
- lsls r0, 1
- bl m4aSongNumStart
- bl ResetSerial
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BCE0: .4byte sub_813B784
-_0813BCE4: .4byte gTasks
-_0813BCE8: .4byte sub_813BCF0
-_0813BCEC: .4byte gUnknown_03005ED0
- thumb_func_end task_intro_2
-
- thumb_func_start sub_813BCF0
-sub_813BCF0: @ 813BCF0
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r3, r0, 24
- adds r5, r3, 0
- ldr r4, _0813BDD4 @ =gUnknown_03005ED0
- ldr r0, [r4]
- cmp r0, 0x4C
- bne _0813BD1E
- ldr r2, _0813BDD8 @ =gSprites
- ldr r1, _0813BDDC @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- movs r6, 0x8
- ldrsh r1, [r0, r6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0813BD1E:
- ldr r0, [r4]
- cmp r0, 0xFB
- bne _0813BD40
- ldr r2, _0813BDD8 @ =gSprites
- ldr r1, _0813BDDC @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- movs r3, 0x8
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x2E]
-_0813BD40:
- ldr r1, [r4]
- movs r0, 0xB8
- lsls r0, 1
- cmp r1, r0
- bne _0813BD60
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x70
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0x30
- movs r1, 0
- movs r3, 0x5
- bl sub_813D584
-_0813BD60:
- ldr r1, [r4]
- movs r0, 0xC0
- lsls r0, 1
- cmp r1, r0
- bne _0813BD80
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x80
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0xC8
- movs r1, 0x3C
- movs r3, 0x9
- bl sub_813D584
-_0813BD80:
- ldr r1, [r4]
- movs r0, 0x8C
- lsls r0, 2
- cmp r1, r0
- bne _0813BDA0
- ldr r0, _0813BDE0 @ =sub_813CCE8
- movs r1, 0
- bl CreateTask
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x78
- movs r1, 0x50
- bl sub_813D954
-_0813BDA0:
- ldr r1, [r4]
- ldr r0, _0813BDE4 @ =0x000002e3
- cmp r1, r0
- bls _0813BDCA
- ldr r1, _0813BDDC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0x50
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- movs r1, 0x18
- strh r1, [r0, 0xE]
- strh r2, [r0, 0x10]
- movs r1, 0x28
- strh r1, [r0, 0x12]
- strh r2, [r0, 0x14]
- ldr r1, _0813BDE8 @ =task_intro_4
- str r1, [r0]
-_0813BDCA:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BDD4: .4byte gUnknown_03005ED0
-_0813BDD8: .4byte gSprites
-_0813BDDC: .4byte gTasks
-_0813BDE0: .4byte sub_813CCE8
-_0813BDE4: .4byte 0x000002e3
-_0813BDE8: .4byte task_intro_4
- thumb_func_end sub_813BCF0
-
- thumb_func_start task_intro_4
-task_intro_4: @ 813BDEC
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r0, _0813BE80 @ =gUnknown_03005ED0
- ldr r3, [r0]
- ldr r0, _0813BE84 @ =0x00000387
- cmp r3, r0
- bhi _0813BEAC
- ldr r0, _0813BE88 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- lsls r0, 16
- ldrh r2, [r1, 0xC]
- adds r0, r2
- ldr r2, _0813BE8C @ =0xffff4000
- adds r0, r2
- asrs r2, r0, 16
- strh r2, [r1, 0xA]
- strh r0, [r1, 0xC]
- ldr r0, _0813BE90 @ =REG_BG2VOFS
- strh r2, [r0]
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- lsls r0, 16
- ldrh r2, [r1, 0x10]
- adds r0, r2
- ldr r2, _0813BE94 @ =0xffff0000
- adds r0, r2
- asrs r2, r0, 16
- strh r2, [r1, 0xE]
- strh r0, [r1, 0x10]
- ldr r0, _0813BE98 @ =REG_BG1VOFS
- strh r2, [r0]
- movs r2, 0x12
- ldrsh r0, [r1, r2]
- lsls r0, 16
- ldrh r2, [r1, 0x14]
- adds r0, r2
- ldr r2, _0813BE9C @ =0xfffe8000
- adds r0, r2
- asrs r2, r0, 16
- strh r2, [r1, 0x12]
- strh r0, [r1, 0x14]
- ldr r0, _0813BEA0 @ =REG_BG0VOFS
- strh r2, [r0]
- movs r0, 0xDC
- lsls r0, 2
- cmp r3, r0
- bne _0813BED2
- ldr r0, _0813BEA4 @ =gSpriteTemplate_840AFF0
- movs r1, 0xC8
- movs r2, 0xA0
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0813BEA8 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _0813BED2
- .align 2, 0
-_0813BE80: .4byte gUnknown_03005ED0
-_0813BE84: .4byte 0x00000387
-_0813BE88: .4byte gTasks
-_0813BE8C: .4byte 0xffff4000
-_0813BE90: .4byte REG_BG2VOFS
-_0813BE94: .4byte 0xffff0000
-_0813BE98: .4byte REG_BG1VOFS
-_0813BE9C: .4byte 0xfffe8000
-_0813BEA0: .4byte REG_BG0VOFS
-_0813BEA4: .4byte gSpriteTemplate_840AFF0
-_0813BEA8: .4byte gSprites
-_0813BEAC:
- ldr r0, _0813BEDC @ =0x000003ef
- cmp r3, r0
- bls _0813BED2
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813BEE0 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0813BEE4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813BEE8 @ =sub_813BEEC
- str r1, [r0]
-_0813BED2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BEDC: .4byte 0x000003ef
-_0813BEE0: .4byte 0x0000ffff
-_0813BEE4: .4byte gTasks
-_0813BEE8: .4byte sub_813BEEC
- thumb_func_end task_intro_4
-
- thumb_func_start sub_813BEEC
-sub_813BEEC: @ 813BEEC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0813BF10 @ =gUnknown_03005ED0
- ldr r1, [r0]
- ldr r0, _0813BF14 @ =0x00000402
- cmp r1, r0
- bls _0813BF0A
- ldr r0, _0813BF18 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _0813BF1C @ =task_intro_6
- str r0, [r1]
-_0813BF0A:
- pop {r0}
- bx r0
- .align 2, 0
-_0813BF10: .4byte gUnknown_03005ED0
-_0813BF14: .4byte 0x00000402
-_0813BF18: .4byte gTasks
-_0813BF1C: .4byte task_intro_6
- thumb_func_end sub_813BEEC
-
- thumb_func_start task_intro_6
-task_intro_6: @ 813BF20
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl intro_reset_and_hide_bgs
- movs r0, 0
- bl SetVBlankCallback
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r0, _0813BF60 @ =gUnknown_02039358
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0813BF64 @ =gUnknown_0203935A
- strh r1, [r0]
- .ifdef SAPPHIRE
- movs r0, 0
- .else
- movs r0, 0x1
- .endif
- bl load_intro_part2_graphics
- ldr r1, _0813BF68 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813BF6C @ =sub_813BF70
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813BF60: .4byte gUnknown_02039358
-_0813BF64: .4byte gUnknown_0203935A
-_0813BF68: .4byte gTasks
-_0813BF6C: .4byte sub_813BF70
- thumb_func_end task_intro_6
-
- thumb_func_start sub_813BF70
-sub_813BF70: @ 813BF70
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0813BF88 @ =gUnknown_02039318
- ldrh r0, [r0]
- cmp r0, 0
- bne _0813BF90
- ldr r0, _0813BF8C @ =gIntro2BrendanSpriteSheet
- bl LoadCompressedObjectPic
- b _0813BF96
- .align 2, 0
-_0813BF88: .4byte gUnknown_02039318
-_0813BF8C: .4byte gIntro2BrendanSpriteSheet
-_0813BF90:
- ldr r0, _0813BFBC @ =gIntro2MaySpriteSheet
- bl LoadCompressedObjectPic
-_0813BF96:
- ldr r0, _0813BFC0 @ =gIntro2BicycleSpriteSheet
- bl LoadCompressedObjectPic
- ldr r0, _0813BFC4 @ =gIntro2LatiasSpriteSheet, =gIntro2LatiosSpriteSheet
- bl LoadCompressedObjectPic
- ldr r0, _0813BFC8 @ =gIntro2SpritePalettes
- bl LoadSpritePalettes
- ldr r0, _0813BFCC @ =gUnknown_02039318
- ldrh r0, [r0]
- cmp r0, 0
- bne _0813BFD0
- movs r0, 0x88
- lsls r0, 1
- movs r1, 0x64
- bl sub_8149310
- b _0813BFDA
- .align 2, 0
-_0813BFBC: .4byte gIntro2MaySpriteSheet
-_0813BFC0: .4byte gIntro2BicycleSpriteSheet
- .ifdef SAPPHIRE
-_0813BFC4: .4byte gIntro2LatiasSpriteSheet
- .else
-_0813BFC4: .4byte gIntro2LatiosSpriteSheet
- .endif
-_0813BFC8: .4byte gIntro2SpritePalettes
-_0813BFCC: .4byte gUnknown_02039318
-_0813BFD0:
- movs r0, 0x88
- lsls r0, 1
- movs r1, 0x64
- bl sub_8149368
-_0813BFDA:
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, _0813C060 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r5, r2, 0
- adds r5, 0x1C
- adds r3, r0, r5
- ldr r1, _0813C064 @ =sub_813D788
- str r1, [r3]
- adds r2, 0x8
- adds r0, r2
- ldr r1, _0813C068 @ =gUnknown_0840AE80
- str r1, [r0]
- ldr r0, _0813C06C @ =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- strh r6, [r4, 0xA]
- movs r0, 0x40
- negs r0, r0
- movs r1, 0x3C
- .ifdef SAPPHIRE
- bl sapphire_sub_81494A0
- .else
- bl sub_8149424
- .endif
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r1, _0813C070 @ =sub_813D880
- str r1, [r0]
- strh r6, [r4, 0xC]
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813C074 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _0813C078 @ =sub_813B784
- bl SetVBlankCallback
- movs r1, 0x80
- lsls r1, 7
- .ifdef SAPPHIRE
- movs r0, 0
- movs r2, 0x40
- .else
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x1
- .endif
- movs r3, 0x10
- bl sub_8148EC0
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x8]
- .ifdef SAPPHIRE
- movs r0, 0
- .else
- movs r0, 0x1
- .endif
- bl sub_8148C78
- ldr r0, _0813C07C @ =sub_813C080
- str r0, [r4]
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C060: .4byte gSprites
-_0813C064: .4byte sub_813D788
-_0813C068: .4byte gUnknown_0840AE80
-_0813C06C: .4byte gTasks
-_0813C070: .4byte sub_813D880
-_0813C074: .4byte 0x0000ffff
-_0813C078: .4byte sub_813B784
-_0813C07C: .4byte sub_813C080
- thumb_func_end sub_813BF70
-
- thumb_func_start sub_813C080
-sub_813C080: @ 813C080
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- ldr r5, _0813C1BC @ =gUnknown_03005ED0
- ldr r1, [r5]
- ldr r0, _0813C1C0 @ =0x0000071f
- cmp r1, r0
- bls _0813C0B4
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813C1C4 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0813C1C8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813C1CC @ =sub_813C1F4
- str r1, [r0]
-_0813C0B4:
- ldr r1, [r5]
- ldr r0, _0813C1D0 @ =0x00000455
- ldr r3, _0813C1C8 @ =gTasks
- cmp r1, r0
- bne _0813C0D8
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0813C0D8:
- ldr r1, [r5]
- ldr r0, _0813C1D8 @ =0x000004be
- cmp r1, r0
- bne _0813C0FA
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x2E]
-_0813C0FA:
- ldr r1, [r5]
- ldr r0, _0813C1DC @ =0x00000572
- cmp r1, r0
- bne _0813C11C
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xC
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0813C11C:
- ldr r1, [r5]
- ldr r0, _0813C1E0 @ =0x00000576
- cmp r1, r0
- bne _0813C13E
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x2E]
-_0813C13E:
- ldr r1, [r5]
- ldr r0, _0813C1E4 @ =0x00000632
- cmp r1, r0
- bne _0813C160
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strh r1, [r0, 0x2E]
-_0813C160:
- ldr r1, [r5]
- ldr r0, _0813C1E8 @ =0x000006bf
- cmp r1, r0
- bne _0813C182
- ldr r2, _0813C1D4 @ =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r4, 0xA
- ldrsh r1, [r0, r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x4
- strh r1, [r0, 0x2E]
-_0813C182:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r3
- ldrh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 18
- movs r1, 0x7F
- ands r0, r1
- movs r1, 0x30
- bl Sin
- ldr r1, _0813C1EC @ =gUnknown_0203935A
- strh r0, [r1]
- ldrh r2, [r4, 0xE]
- movs r7, 0xE
- ldrsh r1, [r4, r7]
- ldr r0, _0813C1F0 @ =0x000001ff
- cmp r1, r0
- bgt _0813C1AE
- adds r0, r2, 0x1
- strh r0, [r4, 0xE]
-_0813C1AE:
- .ifdef SAPPHIRE
- movs r0, 0
- .else
- movs r0, 0x1
- .endif
- bl sub_8149020
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C1BC: .4byte gUnknown_03005ED0
-_0813C1C0: .4byte 0x0000071f
-_0813C1C4: .4byte 0x0000ffff
-_0813C1C8: .4byte gTasks
-_0813C1CC: .4byte sub_813C1F4
-_0813C1D0: .4byte 0x00000455
-_0813C1D4: .4byte gSprites
-_0813C1D8: .4byte 0x000004be
-_0813C1DC: .4byte 0x00000572
-_0813C1E0: .4byte 0x00000576
-_0813C1E4: .4byte 0x00000632
-_0813C1E8: .4byte 0x000006bf
-_0813C1EC: .4byte gUnknown_0203935A
-_0813C1F0: .4byte 0x000001ff
- thumb_func_end sub_813C080
-
- thumb_func_start sub_813C1F4
-sub_813C1F4: @ 813C1F4
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0813C220 @ =gUnknown_03005ED0
- ldr r1, [r0]
- ldr r0, _0813C224 @ =0x00000814
- cmp r1, r0
- bls _0813C218
- ldr r0, _0813C228 @ =gTasks
- lsls r4, r2, 2
- adds r4, r2
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x8]
- bl DestroyTask
- ldr r0, _0813C22C @ =task_intro_10
- str r0, [r4]
-_0813C218:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C220: .4byte gUnknown_03005ED0
-_0813C224: .4byte 0x00000814
-_0813C228: .4byte gTasks
-_0813C22C: .4byte task_intro_10
- thumb_func_end sub_813C1F4
-
- thumb_func_start task_intro_10
-task_intro_10: @ 813C230
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- bl intro_reset_and_hide_bgs
- ldr r0, _0813C2C0 @ =gUnknown_08409C04
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _0813C2C4 @ =gUnknown_08409AD4
- ldr r1, _0813C2C8 @ =0x06004000
- bl LZ77UnCompVram
- ldr r0, _0813C2CC @ =gUnknown_084098D4
- movs r2, 0x80
- lsls r2, 2
- movs r1, 0
- bl LoadPalette
- ldr r0, _0813C2D0 @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- movs r5, 0
- strh r5, [r4, 0x8]
- strh r5, [r4, 0xA]
- strh r5, [r4, 0xC]
- strh r5, [r4, 0xE]
- movs r0, 0x78
- movs r1, 0x50
- movs r2, 0
- movs r3, 0
- bl sub_813CE30
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813C2D4 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, _0813C2D8 @ =REG_BG2CNT
- ldr r2, _0813C2DC @ =0x00004883
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xC
- ldr r2, _0813C2E0 @ =0x00001441
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _0813C2E4 @ =task_intro_11
- str r0, [r4]
- ldr r0, _0813C2E8 @ =gUnknown_03005ED0
- str r5, [r0]
- movs r0, 0xDD
- lsls r0, 1
- bl m4aSongNumStart
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C2C0: .4byte gUnknown_08409C04
-_0813C2C4: .4byte gUnknown_08409AD4
-_0813C2C8: .4byte 0x06004000
-_0813C2CC: .4byte gUnknown_084098D4
-_0813C2D0: .4byte gTasks
-_0813C2D4: .4byte 0x0000ffff
-_0813C2D8: .4byte REG_BG2CNT
-_0813C2DC: .4byte 0x00004883
-_0813C2E0: .4byte 0x00001441
-_0813C2E4: .4byte task_intro_11
-_0813C2E8: .4byte gUnknown_03005ED0
- thumb_func_end task_intro_10
-
- thumb_func_start task_intro_11
-task_intro_11: @ 813C2EC
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, _0813C324 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r3, r0, r2
- movs r1, 0x80
- lsls r1, 3
- adds r0, r1, 0
- ldrh r1, [r3, 0x8]
- adds r0, r1
- strh r0, [r3, 0x8]
- ldrh r4, [r3, 0xA]
- movs r0, 0xA
- ldrsh r1, [r3, r0]
- ldr r0, _0813C328 @ =0x000006bf
- cmp r1, r0
- bgt _0813C32C
- ldrh r0, [r3, 0xC]
- adds r1, r4, r0
- strh r1, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xC]
- b _0813C330
- .align 2, 0
-_0813C324: .4byte gTasks
-_0813C328: .4byte 0x000006bf
-_0813C32C:
- ldr r0, _0813C378 @ =sub_813C384
- str r0, [r3]
-_0813C330:
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r2
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x80
- lsls r0, 9
- bl __divsi3
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- ldrh r3, [r4, 0x8]
- movs r0, 0x78
- movs r1, 0x50
- bl sub_813CE30
- ldr r0, _0813C37C @ =gUnknown_03005ED0
- ldr r0, [r0]
- cmp r0, 0x2C
- bne _0813C36E
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813C380 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0813C36E:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C378: .4byte sub_813C384
-_0813C37C: .4byte gUnknown_03005ED0
-_0813C380: .4byte 0x0000ffff
- thumb_func_end task_intro_11
-
- thumb_func_start sub_813C384
-sub_813C384: @ 813C384
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0813C3A4 @ =gUnknown_03005ED0
- ldr r0, [r0]
- cmp r0, 0x3B
- bls _0813C3A0
- ldr r0, _0813C3A8 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _0813C3AC @ =sub_813C3B0
- str r0, [r1]
-_0813C3A0:
- pop {r0}
- bx r0
- .align 2, 0
-_0813C3A4: .4byte gUnknown_03005ED0
-_0813C3A8: .4byte gTasks
-_0813C3AC: .4byte sub_813C3B0
- thumb_func_end sub_813C384
-
- thumb_func_start sub_813C3B0
-sub_813C3B0: @ 813C3B0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- bl intro_reset_and_hide_bgs
- movs r1, 0
- ldr r2, _0813C4E4 @ =0x02000000
- movs r7, 0
- adds r6, r2, 0
- adds r6, 0x20
- adds r5, r2, 0
- adds r5, 0x40
- mov r12, r2
- movs r4, 0x11
- movs r3, 0x22
-_0813C3D4:
- adds r0, r1, r2
- strb r7, [r0]
- adds r0, r1, r6
- strb r4, [r0]
- adds r0, r1, r5
- strb r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x1F
- bls _0813C3D4
- movs r1, 0xC0
- lsls r1, 19
- ldr r0, _0813C4E8 @ =0x040000d4
- mov r2, r12
- str r2, [r0]
- str r1, [r0, 0x4]
- ldr r1, _0813C4EC @ =0x80000030
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- movs r1, 0
- ldr r5, _0813C4F0 @ =gPlttBufferUnfaded
- ldr r6, _0813C4F4 @ =gPlttBufferFaded
- mov r0, r8
- lsls r7, r0, 2
- ldr r4, _0813C4F8 @ =0x06003000
- ldr r2, _0813C4FC @ =0x0000f001
- adds r3, r2, 0
- ldr r2, _0813C500 @ =0x0000027f
-_0813C40E:
- lsls r0, r1, 1
- adds r0, r4
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bls _0813C40E
- movs r1, 0
- ldr r3, _0813C504 @ =0x06003800
- ldr r0, _0813C508 @ =0x0000f002
- adds r2, r0, 0
-_0813C426:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x7F
- bls _0813C426
- movs r1, 0
- ldr r4, _0813C50C @ =0x06003900
- movs r2, 0xF0
- lsls r2, 8
- adds r3, r2, 0
- ldr r2, _0813C510 @ =0x0000017f
-_0813C442:
- lsls r0, r1, 1
- adds r0, r4
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bls _0813C442
- movs r1, 0
- ldr r3, _0813C514 @ =0x06003c00
- ldr r0, _0813C508 @ =0x0000f002
- adds r2, r0, 0
-_0813C45A:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x7F
- bls _0813C45A
- movs r0, 0xF0
- lsls r0, 1
- adds r2, r5, r0
- movs r4, 0
- ldr r1, _0813C518 @ =0x00007fff
- strh r1, [r2]
- adds r0, r6, r0
- strh r1, [r0]
- movs r0, 0x1
- bl sub_813D084
- movs r0, 0xF2
- lsls r0, 1
- adds r1, r5, r0
- strh r4, [r1]
- adds r0, r6, r0
- strh r4, [r0]
- ldr r0, _0813C51C @ =gUnknown_0840A778
- ldr r1, _0813C520 @ =0x06004000
- bl LZ77UnCompVram
- ldr r0, _0813C524 @ =gUnknown_0840A7E4
- ldr r1, _0813C528 @ =0x06007000
- bl LZ77UnCompVram
- ldr r0, _0813C52C @ =gUnknown_0840A758
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _0813C530 @ =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r0, _0813C534 @ =gUnknown_0840B20C
- bl LoadCompressedObjectPic
- ldr r0, _0813C538 @ =gUnknown_0840B21C
- bl LoadCompressedObjectPic
- ldr r0, _0813C53C @ =gUnknown_0840B22C
- bl LoadCompressedObjectPalette
- ldr r0, _0813C540 @ =gUnknown_0840B23C
- bl LoadSpritePalettes
- ldr r1, _0813C544 @ =gTasks
- mov r2, r8
- adds r0, r7, r2
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813C548 @ =sub_813C54C
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C4E4: .4byte 0x02000000
-_0813C4E8: .4byte 0x040000d4
-_0813C4EC: .4byte 0x80000030
-_0813C4F0: .4byte gPlttBufferUnfaded
-_0813C4F4: .4byte gPlttBufferFaded
-_0813C4F8: .4byte 0x06003000
-_0813C4FC: .4byte 0x0000f001
-_0813C500: .4byte 0x0000027f
-_0813C504: .4byte 0x06003800
-_0813C508: .4byte 0x0000f002
-_0813C50C: .4byte 0x06003900
-_0813C510: .4byte 0x0000017f
-_0813C514: .4byte 0x06003c00
-_0813C518: .4byte 0x00007fff
-_0813C51C: .4byte gUnknown_0840A778
-_0813C520: .4byte 0x06004000
-_0813C524: .4byte gUnknown_0840A7E4
-_0813C528: .4byte 0x06007000
-_0813C52C: .4byte gUnknown_0840A758
-_0813C530: .4byte gReservedSpritePaletteCount
-_0813C534: .4byte gUnknown_0840B20C
-_0813C538: .4byte gUnknown_0840B21C
-_0813C53C: .4byte gUnknown_0840B22C
-_0813C540: .4byte gUnknown_0840B23C
-_0813C544: .4byte gTasks
-_0813C548: .4byte sub_813C54C
- thumb_func_end sub_813C3B0
-
- thumb_func_start sub_813C54C
-sub_813C54C: @ 813C54C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _0813C5BC @ =REG_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- adds r1, 0x4
- movs r0, 0xA0
- strh r0, [r1]
- adds r1, 0x4
- movs r0, 0x1C
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0x1D
- strh r0, [r1]
- subs r1, 0x3C
- ldr r2, _0813C5C0 @ =0x00000603
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x6
- adds r2, 0xFD
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x8
- movs r2, 0xE5
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _0813C5C4 @ =sub_813CAF4
- movs r1, 0
- bl CreateTask
- ldr r5, _0813C5C8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0
- strh r0, [r1, 0x26]
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r5
- strh r3, [r0, 0x8]
- strh r3, [r1, 0x8]
- ldr r0, _0813C5CC @ =sub_813C5D0
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C5BC: .4byte REG_WIN0H
-_0813C5C0: .4byte 0x00000603
-_0813C5C4: .4byte sub_813CAF4
-_0813C5C8: .4byte gTasks
-_0813C5CC: .4byte sub_813C5D0
- thumb_func_end sub_813C54C
-
- thumb_func_start sub_813C5D0
-sub_813C5D0: @ 813C5D0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0813C600 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- ldrh r1, [r3, 0x8]
- movs r2, 0x8
- ldrsh r0, [r3, r2]
- cmp r0, 0x20
- beq _0813C608
- adds r0, r1, 0x4
- strh r0, [r3, 0x8]
- ldr r2, _0813C604 @ =REG_WIN0V
- movs r4, 0x8
- ldrsh r0, [r3, r4]
- lsls r0, 8
- subs r1, 0x9C
- subs r0, r1
- strh r0, [r2]
- b _0813C616
- .align 2, 0
-_0813C600: .4byte gTasks
-_0813C604: .4byte REG_WIN0V
-_0813C608:
- ldr r0, _0813C61C @ =REG_WIN0V
- movs r2, 0x82
- lsls r2, 6
- adds r1, r2, 0
- strh r1, [r0]
- ldr r0, _0813C620 @ =sub_813C624
- str r0, [r3]
-_0813C616:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813C61C: .4byte REG_WIN0V
-_0813C620: .4byte sub_813C624
- thumb_func_end sub_813C5D0
-
- thumb_func_start sub_813C624
-sub_813C624: @ 813C624
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0813C638 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _0813C63C @ =sub_813C640
- str r0, [r1]
- bx lr
- .align 2, 0
-_0813C638: .4byte gTasks
-_0813C63C: .4byte sub_813C640
- thumb_func_end sub_813C624
-
- thumb_func_start sub_813C640
-sub_813C640: @ 813C640
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0813C65C @ =gUnknown_0203931A
- movs r1, 0
- strh r1, [r2]
- ldr r2, _0813C660 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _0813C664 @ =sub_813C668
- str r0, [r1]
- bx lr
- .align 2, 0
-_0813C65C: .4byte gUnknown_0203931A
-_0813C660: .4byte gTasks
-_0813C664: .4byte sub_813C668
- thumb_func_end sub_813C640
-
- thumb_func_start sub_813C668
-sub_813C668: @ 813C668
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0813CA24 @ =gUnknown_03005ED0
- mov r8, r0
- ldr r0, [r0]
- cmp r0, 0x50
- bne _0813C6AC
- ldr r0, _0813CA28 @ =0x0000014b
- movs r4, 0x1
- str r4, [sp]
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x5
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x1C
- adds r1, r0, r1
- ldr r2, _0813CA30 @ =sub_813DB9C
- str r2, [r1]
- adds r0, r3
- movs r1, 0
- strh r4, [r0, 0x30]
- strh r1, [r0, 0x32]
-_0813C6AC:
- mov r1, r8
- ldr r0, [r1]
- cmp r0, 0x98
- bne _0813C6E2
- ldr r0, _0813CA34 @ =0x00000169
- movs r4, 0x1
- str r4, [sp]
- movs r1, 0
- movs r2, 0xA0
- movs r3, 0x4
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x1C
- adds r1, r0, r1
- ldr r2, _0813CA30 @ =sub_813DB9C
- str r2, [r1]
- adds r0, r3
- movs r1, 0x2
- strh r1, [r0, 0x30]
- strh r4, [r0, 0x32]
-_0813C6E2:
- mov r3, r8
- ldr r0, [r3]
- cmp r0, 0xDB
- bne _0813C720
- movs r0, 0
- bl sub_813D084
- ldr r0, _0813CA38 @ =gUnknown_02039318
- ldrh r0, [r0]
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x60
- movs r3, 0x6
- bl sub_813CFA8
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0813CA3C @ =sub_813DE70
- str r1, [r0]
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
-_0813C720:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x98
- lsls r0, 1
- cmp r1, r0
- bne _0813C758
- ldr r3, _0813CA40 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r3
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r3
- movs r2, 0x4
- strh r2, [r0, 0x8]
- ldr r2, _0813CA2C @ =gSprites
- movs r3, 0xA
- ldrsh r1, [r1, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x2E]
-_0813C758:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0xC0
- lsls r0, 1
- cmp r1, r0
- bne _0813C790
- ldr r3, _0813CA40 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r3
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r3
- movs r2, 0
- strh r2, [r0, 0x8]
- ldr r2, _0813CA2C @ =gSprites
- movs r3, 0xA
- ldrsh r1, [r1, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x4
- strh r1, [r0, 0x2E]
-_0813C790:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0xC8
- lsls r0, 1
- cmp r1, r0
- bne _0813C7AE
- movs r0, 0xFF
- lsls r0, 16
- ldr r1, _0813CA44 @ =0x00007eff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0813C7AE:
- mov r3, r8
- ldr r1, [r3]
- movs r0, 0xD8
- lsls r0, 1
- cmp r1, r0
- bne _0813C7D6
- ldr r2, _0813CA2C @ =gSprites
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- movs r3, 0xA
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x5
- strh r1, [r0, 0x2E]
-_0813C7D6:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0xE7
- lsls r0, 1
- cmp r1, r0
- bne _0813C80E
- ldr r3, _0813CA2C @ =gSprites
- ldr r4, _0813CA40 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r4
- movs r0, 0xA
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r2, 0x6
- strh r2, [r0, 0x2E]
- movs r3, 0x26
- ldrsh r1, [r1, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x8]
-_0813C80E:
- mov r0, r8
- ldr r1, [r0]
- ldr r0, _0813CA48 @ =0x000001cf
- cmp r1, r0
- bne _0813C854
- movs r0, 0x1
- bl sub_813D084
- ldr r0, _0813CA28 @ =0x0000014b
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xD0
- movs r2, 0x8
- movs r3, 0x5
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0813CA4C @ =sub_813E10C
- str r1, [r0]
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xC]
- adds r0, r2, 0
- bl sub_813E7C0
-_0813C854:
- mov r3, r8
- ldr r1, [r3]
- ldr r0, _0813CA50 @ =0x0000021b
- cmp r1, r0
- bne _0813C894
- subs r0, 0xB2
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xF8
- movs r2, 0x10
- movs r3, 0x4
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0813CA4C @ =sub_813E10C
- str r1, [r0]
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xE]
- adds r0, r2, 0
- bl sub_813E930
-_0813C894:
- mov r0, r8
- ldr r1, [r0]
- ldr r0, _0813CA54 @ =0x0000026f
- cmp r1, r0
- bne _0813C8D8
- ldr r4, _0813CA2C @ =gSprites
- ldr r5, _0813CA40 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r5
- movs r3, 0xC
- ldrsh r2, [r1, r3]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- movs r3, 0x2
- strh r3, [r0, 0x2E]
- movs r0, 0xE
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x2E]
- movs r3, 0x26
- ldrsh r1, [r1, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x3
- strh r1, [r0, 0x8]
-_0813C8D8:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x9C
- lsls r0, 2
- cmp r1, r0
- bne _0813C920
- movs r0, 0
- bl sub_813D084
- ldr r0, _0813CA58 @ =0x0000011b
- movs r1, 0
- str r1, [sp]
- movs r1, 0x20
- movs r2, 0x98
- movs r3, 0
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0813CA5C @ =sub_813E210
- str r1, [r0]
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0x10]
- adds r0, r2, 0
- bl sub_813EDBC
-_0813C920:
- mov r3, r8
- ldr r1, [r3]
- movs r0, 0xAF
- lsls r0, 2
- cmp r1, r0
- bne _0813C966
- movs r0, 0x8C
- lsls r0, 1
- movs r1, 0x8
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x1
- bl sub_813CE88
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0813CA2C @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0813CA5C @ =sub_813E210
- str r1, [r0]
- ldr r1, _0813CA40 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0x12]
- adds r0, r2, 0
- bl sub_813EB4C
-_0813C966:
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0xC2
- lsls r0, 2
- cmp r1, r0
- bne _0813C9B2
- ldr r1, _0813CA60 @ =gUnknown_0203931A
- movs r0, 0x1
- strh r0, [r1]
- ldr r4, _0813CA2C @ =gSprites
- ldr r6, _0813CA40 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r6
- movs r3, 0x10
- ldrsh r2, [r1, r3]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- movs r5, 0
- movs r3, 0x2
- strh r3, [r0, 0x2E]
- movs r0, 0x12
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x2E]
- movs r3, 0x26
- ldrsh r1, [r1, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r5, [r0, 0x8]
-_0813C9B2:
- mov r0, r8
- ldr r1, [r0]
- ldr r0, _0813CA64 @ =0x0000030d
- cmp r1, r0
- bne _0813CA76
- movs r0, 0x2
- bl sub_813D084
- ldr r4, _0813CA2C @ =gSprites
- ldr r0, _0813CA40 @ =gTasks
- lsls r2, r7, 2
- adds r2, r7
- lsls r2, 3
- adds r2, r0
- movs r3, 0xC
- ldrsh r1, [r2, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r3, 0x3
- strh r3, [r0, 0x2E]
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x2E]
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x2E]
- movs r0, 0x12
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x2E]
- ldr r0, _0813CA68 @ =gSpriteTemplate_840B1F4
- movs r1, 0x78
- movs r2, 0x50
- movs r3, 0xF
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- b _0813CA6C
- .align 2, 0
-_0813CA24: .4byte gUnknown_03005ED0
-_0813CA28: .4byte 0x0000014b
-_0813CA2C: .4byte gSprites
-_0813CA30: .4byte sub_813DB9C
-_0813CA34: .4byte 0x00000169
-_0813CA38: .4byte gUnknown_02039318
-_0813CA3C: .4byte sub_813DE70
-_0813CA40: .4byte gTasks
-_0813CA44: .4byte 0x00007eff
-_0813CA48: .4byte 0x000001cf
-_0813CA4C: .4byte sub_813E10C
-_0813CA50: .4byte 0x0000021b
-_0813CA54: .4byte 0x0000026f
-_0813CA58: .4byte 0x0000011b
-_0813CA5C: .4byte sub_813E210
-_0813CA60: .4byte gUnknown_0203931A
-_0813CA64: .4byte 0x0000030d
-_0813CA68: .4byte gSpriteTemplate_840B1F4
-_0813CA6C:
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0813CA76:
- mov r3, r8
- ldr r1, [r3]
- movs r0, 0xC8
- lsls r0, 2
- cmp r1, r0
- bne _0813CA88
- movs r0, 0x67
- bl PlaySE
-_0813CA88:
- mov r0, r8
- ldr r1, [r0]
- ldr r0, _0813CAC8 @ =0x00000352
- cmp r1, r0
- bne _0813CAA4
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0813CACC @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0813CAA4:
- mov r3, r8
- ldr r1, [r3]
- ldr r0, _0813CAD0 @ =0x000003b2
- cmp r1, r0
- bne _0813CABC
- ldr r0, _0813CAD4 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _0813CAD8 @ =sub_813CADC
- str r0, [r1]
-_0813CABC:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813CAC8: .4byte 0x00000352
-_0813CACC: .4byte 0x0000ffff
-_0813CAD0: .4byte 0x000003b2
-_0813CAD4: .4byte gTasks
-_0813CAD8: .4byte sub_813CADC
- thumb_func_end sub_813C668
-
- thumb_func_start sub_813CADC
-sub_813CADC: @ 813CADC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- ldr r0, _0813CAF0 @ =CB2_813B7EC
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0813CAF0: .4byte CB2_813B7EC
- thumb_func_end sub_813CADC
-
thumb_func_start sub_813CAF4
sub_813CAF4: @ 813CAF4
push {r4-r6,lr}
@@ -3659,7 +1672,7 @@ _0813D7C6:
adds r0, r4, 0
movs r1, 0
bl StartSpriteAnimIfDifferent
- ldr r0, _0813D7E0 @ =gUnknown_03005ED0
+ ldr r0, _0813D7E0 @ =gIntroFrameCounter
ldr r0, [r0]
movs r1, 0x7
ands r0, r1
@@ -3669,7 +1682,7 @@ _0813D7C6:
adds r0, 0x1
b _0813D82E
.align 2, 0
-_0813D7E0: .4byte gUnknown_03005ED0
+_0813D7E0: .4byte gIntroFrameCounter
_0813D7E4:
adds r0, r4, 0
movs r1, 0x2
@@ -3679,7 +1692,7 @@ _0813D7E4:
ldrsh r0, [r4, r1]
cmp r0, 0x78
ble _0813D802
- ldr r0, _0813D808 @ =gUnknown_03005ED0
+ ldr r0, _0813D808 @ =gIntroFrameCounter
ldr r0, [r0]
movs r1, 0x7
ands r0, r1
@@ -3689,7 +1702,7 @@ _0813D802:
adds r0, r2, 0x1
b _0813D82E
.align 2, 0
-_0813D808: .4byte gUnknown_03005ED0
+_0813D808: .4byte gIntroFrameCounter
_0813D80C:
adds r0, r4, 0
movs r1, 0x3
@@ -3710,7 +1723,7 @@ _0813D816:
_0813D82E:
strh r0, [r4, 0x20]
_0813D830:
- ldr r0, _0813D84C @ =gUnknown_03005ED0
+ ldr r0, _0813D84C @ =gIntroFrameCounter
ldr r0, [r0]
movs r1, 0x7
ands r0, r1
@@ -3725,7 +1738,7 @@ _0813D83C:
strh r0, [r4, 0x26]
b _0813D87A
.align 2, 0
-_0813D84C: .4byte gUnknown_03005ED0
+_0813D84C: .4byte gIntroFrameCounter
_0813D850:
bl Random
movs r1, 0x3
@@ -18853,7 +16866,7 @@ _08144F5C:
bl LoadSpritePalettes
movs r0, 0x78
movs r1, 0x2E
- bl sub_8149310
+ bl intro_create_brendan_sprite
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _08144FD0 @ =gTasks
@@ -18878,7 +16891,7 @@ _08144F5C:
movs r0, 0x88
lsls r0, 1
movs r1, 0x2E
- bl sub_8149368
+ bl intro_create_may_sprite
b _08145034
.align 2, 0
_08144FBC: .4byte gSaveBlock2
@@ -18901,7 +16914,7 @@ _08144FE0:
bl LoadSpritePalettes
movs r0, 0x78
movs r1, 0x2E
- bl sub_8149368
+ bl intro_create_may_sprite
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _0814506C @ =gTasks
@@ -18926,7 +16939,7 @@ _08144FE0:
movs r0, 0x88
lsls r0, 1
movs r1, 0x2E
- bl sub_8149310
+ bl intro_create_brendan_sprite
_08145034:
lsls r0, 24
lsrs r2, r0, 24
diff --git a/asm/rom_8148B8C.s b/asm/rom_8148B8C.s
index 6ed24195f..5ed359627 100644
--- a/asm/rom_8148B8C.s
+++ b/asm/rom_8148B8C.s
@@ -902,8 +902,8 @@ sub_81492A0: @ 81492A0
_0814930C: .4byte gSprites
thumb_func_end sub_81492A0
- thumb_func_start sub_8149310
-sub_8149310: @ 8149310
+ thumb_func_start intro_create_brendan_sprite
+intro_create_brendan_sprite: @ 8149310
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
@@ -943,10 +943,10 @@ sub_8149310: @ 8149310
_0814935C: .4byte gSpriteTemplate_8416CDC
_08149360: .4byte gSpriteTemplate_8416D2C
_08149364: .4byte gSprites
- thumb_func_end sub_8149310
+ thumb_func_end intro_create_brendan_sprite
- thumb_func_start sub_8149368
-sub_8149368: @ 8149368
+ thumb_func_start intro_create_may_sprite
+intro_create_may_sprite: @ 8149368
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
@@ -986,7 +986,7 @@ sub_8149368: @ 8149368
_081493B4: .4byte gSpriteTemplate_8416CF4
_081493B8: .4byte gSpriteTemplate_8416D44
_081493BC: .4byte gSprites
- thumb_func_end sub_8149368
+ thumb_func_end intro_create_may_sprite
thumb_func_start nullsub_83
nullsub_83: @ 81493C0
@@ -1045,8 +1045,8 @@ sub_81493C4: @ 81493C4
_08149420: .4byte gSprites
thumb_func_end sub_81493C4
- thumb_func_start sub_8149424
-sub_8149424: @ 8149424
+ thumb_func_start intro_create_latios_sprite
+intro_create_latios_sprite: @ 8149424
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -1102,10 +1102,10 @@ _08149490: .4byte gSpriteTemplate_8416D7C
_08149494: .4byte 0xffe00000
_08149498: .4byte gSprites
_0814949C: .4byte sub_81493C4
- thumb_func_end sub_8149424
+ thumb_func_end intro_create_latios_sprite
- thumb_func_start sapphire_sub_81494A0
-sapphire_sub_81494A0: @ 81494A0
+ thumb_func_start intro_create_latias_sprite
+intro_create_latias_sprite: @ 81494A0
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -1161,7 +1161,7 @@ _0814950C: .4byte gSpriteTemplate_8416D94
_08149510: .4byte 0xffe00000
_08149514: .4byte gSprites
_08149518: .4byte sub_81493C4
- thumb_func_end sapphire_sub_81494A0
+ thumb_func_end intro_create_latias_sprite
thumb_func_start nullsub_84
nullsub_84: @ 814951C
diff --git a/include/sprite.h b/include/sprite.h
index 2da099d59..4298593ca 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -134,7 +134,7 @@ struct Sprite
union AnimCmd **anims;
struct SpriteFrameImage *images;
union AffineAnimCmd **affineAnims;
- struct SpriteTemplate *template;
+ const struct SpriteTemplate *template;
struct SubspriteTable *subspriteTables;
void (*callback)(struct Sprite *);
@@ -193,8 +193,8 @@ extern struct Sprite gSprites[];
void ResetSpriteData(void);
void AnimateSprites(void);
void BuildOamBuffer(void);
-u8 CreateSprite(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
-u8 CreateSpriteAtEnd(struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority);
+u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
+u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority);
u8 CreateInvisibleSprite(void (*callback)(struct Sprite *));
u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
void DestroySprite(struct Sprite *sprite);
@@ -236,8 +236,8 @@ u16 GetSpriteTileTagByTileStart(u16 start);
void RequestSpriteSheetCopy(struct SpriteSheet *sheet);
u16 LoadSpriteSheetDeferred(struct SpriteSheet *sheet);
void FreeAllSpritePalettes(void);
-u8 LoadSpritePalette(struct SpritePalette *palette);
-void LoadSpritePalettes(struct SpritePalette *palettes);
+u8 LoadSpritePalette(const struct SpritePalette *palette);
+void LoadSpritePalettes(const struct SpritePalette *palettes);
u8 AllocSpritePalette(u16 tag);
u8 IndexOfSpritePaletteTag(u16 tag);
u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum);
diff --git a/src/decompress.c b/src/decompress.c
index adc6798b6..b38acc7b2 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -10,7 +10,7 @@ extern void *gUnknown_081FAF4C[];
extern void DrawSpindaSpots(u16, u32, void *, u8);
-void sub_800D378(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *e, s32 f, u32 g, u32 h);
+void sub_800D378(const struct SpriteSheet *a, u32 b, u32 c, u32 d, void *e, s32 f, u32 g, u32 h);
void sub_800D238(const void *src, void *dest)
{
@@ -22,7 +22,7 @@ void LZDecompressVram(const void *src, void *dest)
LZ77UnCompVram(src, dest);
}
-void LoadCompressedObjectPic(struct SpriteSheet *a)
+void LoadCompressedObjectPic(const struct SpriteSheet *a)
{
struct SpriteSheet spriteSheet;
@@ -33,7 +33,7 @@ void LoadCompressedObjectPic(struct SpriteSheet *a)
LoadSpriteSheet(&spriteSheet);
}
-void LoadCompressedObjectPicOverrideBuffer(struct SpriteSheet *a, void *buffer)
+void LoadCompressedObjectPicOverrideBuffer(const struct SpriteSheet *a, void *buffer)
{
struct SpriteSheet spriteSheet;
@@ -44,7 +44,7 @@ void LoadCompressedObjectPicOverrideBuffer(struct SpriteSheet *a, void *buffer)
LoadSpriteSheet(&spriteSheet);
}
-void LoadCompressedObjectPalette(struct SpritePalette *a)
+void LoadCompressedObjectPalette(const struct SpritePalette *a)
{
struct SpritePalette spritePalette;
@@ -54,7 +54,7 @@ void LoadCompressedObjectPalette(struct SpritePalette *a)
LoadSpritePalette(&spritePalette);
}
-void LoadCompressedObjectPaletteOverrideBuffer(struct SpritePalette *a, void *buffer)
+void LoadCompressedObjectPaletteOverrideBuffer(const struct SpritePalette *a, void *buffer)
{
struct SpritePalette spritePalette;
@@ -72,7 +72,7 @@ void DecompressPicFromTable_2(const struct SpriteSheet *a, u8 b, u8 c, void *d,
LZ77UnCompWram(a->data, e);
}
-void sub_800D334(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g)
+void sub_800D334(const struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g)
{
u32 unk;
@@ -83,7 +83,7 @@ void sub_800D334(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f,
sub_800D378(a, b, c, d, dest, f, g, unk);
}
-void sub_800D378(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g, u32 h)
+void sub_800D378(const struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g, u32 h)
{
u8 r7 = h;
diff --git a/src/intro.c b/src/intro.c
index e103109f9..ac51e456c 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1,8 +1,14 @@
#include "global.h"
+#include "link.h"
#include "main.h"
#include "palette.h"
+#include "rng.h"
+#include "songs.h"
+#include "sound.h"
+#include "species.h"
+#include "sprite.h"
#include "task.h"
-#include "link.h"
+#include "trig.h"
struct GcmbStruct
{
@@ -10,57 +16,131 @@ struct GcmbStruct
u8 gcmb_field_2;
};
-extern s32 gUnknown_03005ED0;
+extern u16 gUnknown_02039318;
+extern u16 gUnknown_0203931A;
+extern u16 gUnknown_02039358;
+extern u16 gUnknown_0203935A;
+
+extern u32 gIntroFrameCounter;
extern struct GcmbStruct gUnknown_03005EE0;
extern u16 gSaveFileStatus;
+extern u8 gReservedSpritePaletteCount;
+
+extern const u16 gUnknown_08406974[];
+extern const u8 gUnknown_08406B74[];
+extern const u8 gUnknown_08406F28[];
+extern const u8 gUnknown_0840725C[];
+extern const u8 gUnknown_0840754C[];
+extern const u8 gUnknown_08407764[];
+extern const u8 gUnknown_084098D4[];
+extern const u8 gUnknown_08409AD4[];
+extern const u8 gUnknown_08409C04[];
+extern const u16 gUnknown_0840A758[];
+extern const u8 gUnknown_0840A778[];
+extern const u8 gUnknown_0840A7E4[];
+extern union AnimCmd *gUnknown_0840AE80[];
+extern const struct SpriteTemplate gSpriteTemplate_840AFF0;
+extern const struct SpriteSheet gUnknown_0840B008;
+extern const struct SpriteSheet gUnknown_0840B018;
+extern const struct SpritePalette gUnknown_0840B028[];
+extern const struct SpriteTemplate gSpriteTemplate_840B1F4;
+extern const struct SpriteSheet gUnknown_0840B20C;
+extern const struct SpriteSheet gUnknown_0840B21C;
+extern const struct SpritePalette gUnknown_0840B22C;
+extern const struct SpritePalette gUnknown_0840B23C[];
+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 SpritePalette gIntro2SpritePalettes[];
extern const u8 gIntroCopyright_Gfx[];
extern const u16 gIntroCopyright_Pal[];
extern const u16 gIntroCopyright_Tilemap[];
+extern void LoadCompressedObjectPic(const struct SpriteSheet *);
+extern void LoadCompressedObjectPalette(const struct SpritePalette *);
extern void CB2_InitTitleScreen(void);
+extern u8 sub_8148EC0(/*TODO: arg types*/);
+extern u8 intro_create_brendan_sprite(/*TODO: arg types*/);
+extern u8 intro_create_may_sprite(/*TODO: arg types*/);
-void CB2_813B7EC(void);
-void task_intro_1(u8);
+static void MainCB2_EndIntro(void);
+static void Task_IntroLoadPart1Graphics(u8);
+static void Task_IntroFadeIn(u8);
+static void Task_IntroWaterDrops(u8);
+static void task_intro_4(u8);
+static void task_intro_5(u8);
+static void Task_IntroLoadPart2Graphics(u8);
+static void Task_IntroStartBikeRide(u8);
+static void task_intro_8(u8);
+static void task_intro_9(u8);
+static void task_intro_10(u8);
+static void task_intro_11(u8);
+static void task_intro_12(u8);
+static void task_intro_13(u8);
+static void task_intro_14(u8);
+static void task_intro_15(u8);
+static void task_intro_16(u8);
+static void task_intro_17(u8);
+static void Task_IntroPokemonBattle(u8);
+static void task_intro_19(u8);
+void sub_813CAF4(u8);
+void intro_reset_and_hide_bgs(void);
+void sub_813CCE8(u8);
+void sub_813CE30(u16, u16, u16, u16);
+u8 sub_813CE88(/*TODO: arg types*/);
+u8 sub_813CFA8(/*TODO: arg types*/);
+u8 sub_813D584(/*TODO: arg types*/);
+void sub_813D788(struct Sprite *);
+void sub_813D880(struct Sprite *);
+sub_813D954(/*TODO: arg types*/);
+void sub_813DB9C(struct Sprite *);
+void sub_813DE70(struct Sprite *);
+void sub_813E10C(struct Sprite *);
+void sub_813E210(struct Sprite *);
+void sub_813E7C0(u8);
+void sub_813EB4C(u8);
-void sub_813B784(void)
+static void VBlankCB_Intro(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void CB2_813B798(void)
+static void MainCB2_Intro(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
if (gMain.newKeys && !gPaletteFade.active)
- SetMainCallback2(CB2_813B7EC);
- else if (gUnknown_03005ED0 != -1)
- gUnknown_03005ED0++;
+ SetMainCallback2(MainCB2_EndIntro);
+ else if (gIntroFrameCounter != -1)
+ gIntroFrameCounter++;
}
-void CB2_813B7EC(void)
+static void MainCB2_EndIntro(void)
{
if (!UpdatePaletteFade())
SetMainCallback2(CB2_InitTitleScreen);
}
-void sub_813B808(u16 a1, u16 a2, u16 a3)
+static void LoadCopyrightGraphics(u16 a1, u16 a2, u16 a3)
{
LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + a1));
LoadPalette(gIntroCopyright_Pal, a3, 0x20);
CpuCopy16(gIntroCopyright_Tilemap, (void *)(VRAM + a2), 0x500);
}
-void SerialCb_CopyrightScreen(void)
+static void SerialCb_CopyrightScreen(void)
{
GameCubeMultiBoot_HandleSerialInterrupt(&gUnknown_03005EE0);
}
-u8 SetUpCopyrightScreen(void)
+static u8 SetUpCopyrightScreen(void)
{
u16 ime;
@@ -79,7 +159,7 @@ u8 SetUpCopyrightScreen(void)
DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
ResetPaletteFade();
- sub_813B808(0, 14336, 0);
+ LoadCopyrightGraphics(0, 14336, 0);
remove_some_task();
ResetTasks();
ResetSpriteData();
@@ -90,9 +170,9 @@ u8 SetUpCopyrightScreen(void)
REG_IME = 0;
REG_IE |= INTR_FLAG_VBLANK;
REG_IME = ime;
- REG_DISPSTAT |= 8;
- SetVBlankCallback(sub_813B784);
- REG_DISPCNT = 320;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+ SetVBlankCallback(VBlankCB_Intro);
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON;
SetSerialCallback(SerialCb_CopyrightScreen);
GameCubeMultiBoot_Init(&gUnknown_03005EE0);
default:
@@ -111,8 +191,8 @@ u8 SetUpCopyrightScreen(void)
case 141:
if (UpdatePaletteFade())
break;
- CreateTask(task_intro_1, 0);
- SetMainCallback2(CB2_813B798);
+ CreateTask(Task_IntroLoadPart1Graphics, 0);
+ SetMainCallback2(MainCB2_Intro);
if (gUnknown_03005EE0.gcmb_field_2)
{
GameCubeMultiBoot_ExecuteProgram(&gUnknown_03005EE0);
@@ -145,3 +225,477 @@ void CB2_InitCopyrightScreen(void)
{
SetUpCopyrightScreen();
}
+
+static void Task_IntroLoadPart1Graphics(u8 taskId)
+{
+ SetVBlankCallback(NULL);
+ gUnknown_02039318 = Random() & 1;
+ intro_reset_and_hide_bgs();
+ REG_BG3VOFS = 0;
+ REG_BG2VOFS = 0x50;
+ REG_BG1VOFS = 0x18;
+ REG_BG0VOFS = 0x28;
+ LZ77UnCompVram(gUnknown_08407764, (void *)VRAM);
+ LZ77UnCompVram(gUnknown_08406B74, (void *)(VRAM + 0x8000));
+ DmaClear16(3, VRAM + 0x8800, 0x800);
+ LZ77UnCompVram(gUnknown_08406F28, (void *)(VRAM + 0x9000));
+ DmaClear16(3, VRAM + 0x9800, 0x800);
+ LZ77UnCompVram(gUnknown_0840725C, (void *)(VRAM + 0xA000));
+ DmaClear16(3, VRAM + 0xA800, 0x800);
+ LZ77UnCompVram(gUnknown_0840754C, (void *)(VRAM + 0xB000));
+ DmaClear16(3, VRAM + 0xB800, 0x800);
+ LoadPalette(gUnknown_08406974, 0, 0x200);
+ REG_BG3CNT = 0x9603;
+ REG_BG2CNT = 0x9402;
+ REG_BG1CNT = 0x9201;
+ REG_BG0CNT = 0x9000;
+ LoadCompressedObjectPic(&gUnknown_0840B008);
+ LoadCompressedObjectPic(&gUnknown_0840B018);
+ LoadSpritePalettes(gUnknown_0840B028);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1D2, 0x1C);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1C3, 0x1A);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1B4, 0x18);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1A5, 0x16);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x196, 0x14);
+ gTasks[taskId].data[0] = sub_813D584(0xEC, -14, 0x200, 1, 0x78, 0);
+ gTasks[taskId].func = Task_IntroFadeIn;
+}
+
+static void Task_IntroFadeIn(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
+ SetVBlankCallback(VBlankCB_Intro);
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
+ gTasks[taskId].func = Task_IntroWaterDrops;
+ gIntroFrameCounter = 0;
+ m4aSongNumStart(0x19E);
+ ResetSerial();
+}
+
+static void Task_IntroWaterDrops(u8 taskId)
+{
+ //start moving rock
+ if (gIntroFrameCounter == 76)
+ gSprites[gTasks[taskId].data[0]].data0 = 1;
+
+ //drop rock
+ if (gIntroFrameCounter == 251)
+ gSprites[gTasks[taskId].data[0]].data0 = 2;
+
+ //drop two more rocks
+ if (gIntroFrameCounter == 368)
+ sub_813D584(0x30, 0, 0x400, 5, 0x70, 1);
+ if (gIntroFrameCounter == 384)
+ sub_813D584(0xC8, 0x3C, 0x400, 9, 0x80, 1);
+
+ //show GameFreak logo
+ if (gIntroFrameCounter == 560)
+ sub_813D954(0x78, 0x50, CreateTask(sub_813CCE8, 0));
+
+ if (gIntroFrameCounter > 739)
+ {
+ gTasks[taskId].data[1] = 0x50;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0x18;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 0x28;
+ gTasks[taskId].data[6] = 0;
+ gTasks[taskId].func = task_intro_4;
+ }
+}
+
+static void task_intro_4(u8 taskId)
+{
+ if (gIntroFrameCounter < 904)
+ {
+ s32 r2;
+
+ //slide backgrounds downward
+ r2 = (gTasks[taskId].data[1] << 16) + (u16)gTasks[taskId].data[2] - 0xC000;
+ gTasks[taskId].data[1] = r2 >> 16;
+ gTasks[taskId].data[2] = r2;
+ REG_BG2VOFS = gTasks[taskId].data[1];
+ r2 = (gTasks[taskId].data[3] << 16) + (u16)gTasks[taskId].data[4] - 0x10000;
+ gTasks[taskId].data[3] = r2 >> 16;
+ gTasks[taskId].data[4] = r2;
+ REG_BG1VOFS = gTasks[taskId].data[3];
+ r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - 0x18000;
+ gTasks[taskId].data[5] = r2 >> 16;
+ gTasks[taskId].data[6] = r2;
+ REG_BG0VOFS = gTasks[taskId].data[5];
+
+ //show Lati@s sprite
+ if (gIntroFrameCounter == 880)
+ {
+ u8 spriteId = CreateSprite(&gSpriteTemplate_840AFF0, 0xC8, 0xA0, 10);
+
+ gSprites[spriteId].invisible = 1;
+ }
+ }
+ else
+ {
+ //fade to white
+ if (gIntroFrameCounter > 1007)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF);
+ gTasks[taskId].func = task_intro_5;
+ }
+ }
+}
+
+static void task_intro_5(u8 taskId)
+{
+ if (gIntroFrameCounter > 1026)
+ gTasks[taskId].func = Task_IntroLoadPart2Graphics;
+}
+
+static void Task_IntroLoadPart2Graphics(u8 taskId)
+{
+ intro_reset_and_hide_bgs();
+ SetVBlankCallback(NULL);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gUnknown_02039358 = 0;
+ gUnknown_0203935A = 0;
+#ifdef SAPPHIRE
+ load_intro_part2_graphics(0);
+#else
+ load_intro_part2_graphics(1);
+#endif
+ gTasks[taskId].func = Task_IntroStartBikeRide;
+}
+
+static void Task_IntroStartBikeRide(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gUnknown_02039318 == 0)
+ LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet);
+ else
+ LoadCompressedObjectPic(&gIntro2MaySpriteSheet);
+ LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet);
+#ifdef SAPPHIRE
+ LoadCompressedObjectPic(&gIntro2LatiasSpriteSheet);
+#else
+ LoadCompressedObjectPic(&gIntro2LatiosSpriteSheet);
+#endif
+ LoadSpritePalettes(gIntro2SpritePalettes);
+ if (gUnknown_02039318 == 0)
+ spriteId = intro_create_brendan_sprite(0x110, 100);
+ else
+ spriteId = intro_create_may_sprite(0x110, 100);
+ gSprites[spriteId].callback = sub_813D788;
+ gSprites[spriteId].anims = gUnknown_0840AE80;
+ gTasks[taskId].data[1] = spriteId;
+#ifdef SAPPHIRE
+ spriteId = intro_create_latias_sprite(-0x40, 0x3C);
+#else
+ spriteId = intro_create_latios_sprite(-0x40, 0x3C);
+#endif
+ gSprites[spriteId].callback = sub_813D880;
+ gTasks[taskId].data[2] = spriteId;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF);
+ SetVBlankCallback(VBlankCB_Intro);
+#ifdef SAPPHIRE
+ gTasks[taskId].data[0] = sub_8148EC0(0, 0x4000, 0x40, 0x10);
+ sub_8148C78(0);
+#else
+ gTasks[taskId].data[0] = sub_8148EC0(1, 0x4000, 0x400, 0x10);
+ sub_8148C78(1);
+#endif
+ gTasks[taskId].func = task_intro_8;
+}
+
+static void task_intro_8(u8 taskId)
+{
+ s16 a;
+ u16 sine;
+
+ if (gIntroFrameCounter > 1823)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0x10, 0, 0x10, 0xFFFF);
+ gTasks[taskId].func = task_intro_9;
+ }
+ if (gIntroFrameCounter == 1109)
+ gSprites[gTasks[taskId].data[1]].data0 = 1;
+ if (gIntroFrameCounter == 1214)
+ gSprites[gTasks[taskId].data[1]].data0 = 0;
+ if (gIntroFrameCounter == 1394)
+ gSprites[gTasks[taskId].data[2]].data0 = 1;
+ if (gIntroFrameCounter == 1398)
+ gSprites[gTasks[taskId].data[1]].data0 = 2;
+ if (gIntroFrameCounter == 1586)
+ gSprites[gTasks[taskId].data[1]].data0 = 3;
+ if (gIntroFrameCounter == 1727)
+ gSprites[gTasks[taskId].data[1]].data0 = 4;
+
+ //TODO: Clean this up
+ a = (((u16)gTasks[taskId].data[3] << 16) >> 18) & 0x7F;
+ sine = Sin(a, 0x30);
+ gUnknown_0203935A = sine;
+ if (gTasks[taskId].data[3] < 0x200)
+ gTasks[taskId].data[3]++;
+#ifdef SAPPHIRE
+ sub_8149020(0);
+#else
+ sub_8149020(1);
+#endif
+}
+
+static void task_intro_9(u8 taskId)
+{
+ if (gIntroFrameCounter > 2068)
+ {
+ DestroyTask(gTasks[taskId].data[0]);
+ gTasks[taskId].func = task_intro_10;
+ }
+}
+
+static void task_intro_10(u8 taskId)
+{
+ intro_reset_and_hide_bgs();
+ LZ77UnCompVram(gUnknown_08409C04, (void *)VRAM);
+ LZ77UnCompVram(gUnknown_08409AD4, (void *)(VRAM + 0x4000));
+ LoadPalette(gUnknown_084098D4, 0, 0x200);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ sub_813CE30(0x78, 0x50, 0, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF);
+ REG_BG2CNT = 0x4883;
+ REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
+ gTasks[taskId].func = task_intro_11;
+ gIntroFrameCounter = 0;
+ m4aSongNumStart(0x1BA);
+}
+
+static void task_intro_11(u8 taskId)
+{
+ gTasks[taskId].data[0] += 0x400;
+ if (gTasks[taskId].data[1] <= 0x6BF)
+ {
+ gTasks[taskId].data[1] += gTasks[taskId].data[2];
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ gTasks[taskId].func = task_intro_12;
+ }
+ sub_813CE30(0x78, 0x50, 0x10000 / gTasks[taskId].data[1], gTasks[taskId].data[0]);
+ if (gIntroFrameCounter == 44)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF);
+}
+
+static void task_intro_12(u8 taskId)
+{
+ if (gIntroFrameCounter > 59)
+ gTasks[taskId].func = task_intro_13;
+}
+
+extern u8 unk_2000000[][32];
+
+static void task_intro_13(u8 taskId)
+{
+ u16 i;
+ void *vram;
+
+ intro_reset_and_hide_bgs();
+ for (i = 0; i < 32; i++)
+ {
+ unk_2000000[0][i] = 0;
+ unk_2000000[1][i] = 17;
+ unk_2000000[2][i] = 34;
+ }
+ vram = (void *)VRAM;
+ DmaCopy16(3, unk_2000000, vram, 0x60);
+ for (i = 0; i < 0x280; i++)
+ ((u16 *)(VRAM + 0x3000))[i] = 0xF001;
+ for (i = 0; i < 0x80; i++)
+ ((u16 *)(VRAM + 0x3800))[i] = 0xF002;
+ for (i = 0; i < 0x180; i++)
+ ((u16 *)(VRAM + 0x3900))[i] = 0xF000;
+ for (i = 0; i < 0x80; i++)
+ ((u16 *)(VRAM + 0x3C00))[i] = 0xF002;
+ gPlttBufferUnfaded[0xF0] = RGB_WHITE;
+ gPlttBufferFaded[0xF0] = RGB_WHITE;
+ sub_813D084(1);
+ gPlttBufferUnfaded[0xF2] = RGB_BLACK;
+ gPlttBufferFaded[0xF2] = RGB_BLACK;
+ LZ77UnCompVram(gUnknown_0840A778, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(gUnknown_0840A7E4, (void *)(VRAM + 0x7000));
+ LoadPalette(gUnknown_0840A758, 0, 0x20);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LoadCompressedObjectPic(&gUnknown_0840B20C);
+ LoadCompressedObjectPic(&gUnknown_0840B21C);
+ LoadCompressedObjectPalette(&gUnknown_0840B22C);
+ LoadSpritePalettes(gUnknown_0840B23C);
+ gTasks[taskId].func = task_intro_14;
+}
+
+static void task_intro_14(u8 taskId)
+{
+ u8 newTaskId;
+
+ REG_WIN0H = 0xF0;
+ REG_WIN0V = 0xA0;
+ REG_WININ = 0x1C;
+ REG_WINOUT = 0x1D;
+ REG_BG3CNT = 0x603;
+ REG_BG0CNT = 0x700;
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON;
+ gTasks[taskId].data[15] = CreateTask(sub_813CAF4, 0);
+ gTasks[gTasks[taskId].data[15]].data[0] = 0;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = task_intro_15;
+}
+
+static void task_intro_15(u8 taskId)
+{
+ u16 foo = gTasks[taskId].data[0];
+
+ if (gTasks[taskId].data[0] != 32)
+ {
+ u32 bar; //needed to match for some reason
+
+ gTasks[taskId].data[0] += 4;
+ REG_WIN0V = (gTasks[taskId].data[0] * 256) - (bar = foo - 0x9C);
+ }
+ else
+ {
+ REG_WIN0V = 0x2080;
+ gTasks[taskId].func = task_intro_16;
+ }
+}
+
+static void task_intro_16(u8 taskId)
+{
+ gTasks[taskId].func = task_intro_17;
+}
+
+static void task_intro_17(u8 taskId)
+{
+ gUnknown_0203931A = 0;
+ gTasks[taskId].func = Task_IntroPokemonBattle;
+}
+
+static void Task_IntroPokemonBattle(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gIntroFrameCounter == 80)
+ {
+ spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xF0, 0xA0, 5, 1);
+ gSprites[spriteId].callback = sub_813DB9C;
+ gSprites[spriteId].data1 = 1;
+ gSprites[spriteId].data2 = 0;
+ }
+ if (gIntroFrameCounter == 152)
+ {
+ spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1);
+ gSprites[spriteId].callback = sub_813DB9C;
+ gSprites[spriteId].data1 = 2;
+ gSprites[spriteId].data2 = 1;
+ }
+ if (gIntroFrameCounter == 219)
+ {
+ sub_813D084(0);
+ spriteId = sub_813CFA8(gUnknown_02039318, 0x110, 0x60, 6);
+ gSprites[spriteId].callback = sub_813DE70;
+ gTasks[taskId].data[1] = spriteId;
+ }
+ if (gIntroFrameCounter == 304)
+ {
+ gTasks[gTasks[taskId].data[15]].data[0] = 4;
+ gSprites[gTasks[taskId].data[1]].data0 = 2;
+ }
+ if (gIntroFrameCounter == 384)
+ {
+ gTasks[gTasks[taskId].data[15]].data[0] = 0;
+ gSprites[gTasks[taskId].data[1]].data0 = 4;
+ }
+ if (gIntroFrameCounter == 400)
+ {
+ BeginNormalPaletteFade(0xFF0000, 0, 0x10, 0, 0x7EFF);
+ }
+ if (gIntroFrameCounter == 432)
+ {
+ gSprites[gTasks[taskId].data[1]].data0 = 5;
+ }
+ if (gIntroFrameCounter == 462)
+ {
+ gSprites[gTasks[taskId].data[1]].data0 = 6;
+ gTasks[gTasks[taskId].data[15]].data[0] = 2;
+ }
+ if (gIntroFrameCounter == 463)
+ {
+ sub_813D084(1);
+ spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xD0, 8, 5, 1);
+ gSprites[spriteId].callback = sub_813E10C;
+ gTasks[taskId].data[2] = spriteId;
+ sub_813E7C0(spriteId);
+ }
+ if (gIntroFrameCounter == 539)
+ {
+ spriteId = sub_813CE88(SPECIES_DUSKULL, 0xF8, 0x10, 4, 1);
+ gSprites[spriteId].callback = sub_813E10C;
+ gTasks[taskId].data[3] = spriteId;
+ sub_813E930(spriteId);
+ }
+ if (gIntroFrameCounter == 623)
+ {
+ gSprites[gTasks[taskId].data[2]].data0 = 2;
+ gSprites[gTasks[taskId].data[3]].data0 = 2;
+ gTasks[gTasks[taskId].data[15]].data[0] = 3;
+ }
+ if (gIntroFrameCounter == 624)
+ {
+ sub_813D084(0);
+ spriteId = sub_813CE88(SPECIES_MUDKIP, 0x20, 0x98, 0, 0);
+ gSprites[spriteId].callback = sub_813E210;
+ gTasks[taskId].data[4] = spriteId;
+ sub_813EDBC(spriteId);
+ }
+ if (gIntroFrameCounter == 700)
+ {
+ spriteId = sub_813CE88(SPECIES_TORCHIC, -8, 0x90, 1, 0);
+ gSprites[spriteId].callback = sub_813E210;
+ gTasks[taskId].data[5] = spriteId;
+ sub_813EB4C(spriteId);
+ }
+ if (gIntroFrameCounter == 776)
+ {
+ gUnknown_0203931A = 1;
+ gSprites[gTasks[taskId].data[4]].data0 = 2;
+ gSprites[gTasks[taskId].data[5]].data0 = 2;
+ gTasks[gTasks[taskId].data[15]].data[0] = 0;
+ }
+ if (gIntroFrameCounter == 781)
+ {
+ sub_813D084(2);
+ gSprites[gTasks[taskId].data[2]].data0 = 3;
+ gSprites[gTasks[taskId].data[3]].data0 = 3;
+ gSprites[gTasks[taskId].data[4]].data0 = 3;
+ gSprites[gTasks[taskId].data[5]].data0 = 3;
+ spriteId = CreateSprite(&gSpriteTemplate_840B1F4, 0x78, 0x50, 15);
+ gSprites[spriteId].invisible = 1;
+ }
+ if (gIntroFrameCounter == 800)
+ PlaySE(SE_OP_BASYU);
+ if (gIntroFrameCounter == 850)
+ BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, 0xFFFF);
+ if (gIntroFrameCounter == 946)
+ gTasks[taskId].func = task_intro_19;
+}
+
+static void task_intro_19(u8 taskId)
+{
+ DestroyTask(taskId);
+ SetMainCallback2(MainCB2_EndIntro);
+}
diff --git a/src/sprite.c b/src/sprite.c
index 12c62145e..c91476f51 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -57,7 +57,7 @@ static void BuildSpritePriorities(void);
static void SortSprites(void);
static void CopyMatricesToOamBuffer(void);
static void AddSpritesToOamBuffer(void);
-static u8 CreateSpriteAt(u8 index, struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
+static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
static void ClearSpriteCopyRequests(void);
static void ResetOamMatrices(void);
static void ResetSprite(struct Sprite *sprite);
@@ -530,7 +530,7 @@ static void AddSpritesToOamBuffer(void)
}
}
-u8 CreateSprite(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
+u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
{
u8 i;
@@ -541,7 +541,7 @@ u8 CreateSprite(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
return MAX_SPRITES;
}
-u8 CreateSpriteAtEnd(struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority)
+u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, u16 x, u16 y, u8 subpriority)
{
s16 i;
@@ -554,7 +554,7 @@ u8 CreateSpriteAtEnd(struct SpriteTemplate *template, u16 x, u16 y, u8 subpriori
u8 CreateInvisibleSprite(void (*callback)(struct Sprite *))
{
- u8 index = CreateSprite((struct SpriteTemplate *)&gDummySpriteTemplate, 0, 0, 31);
+ u8 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31);
if (index == MAX_SPRITES)
{
@@ -568,7 +568,7 @@ u8 CreateInvisibleSprite(void (*callback)(struct Sprite *))
}
}
-static u8 CreateSpriteAt(u8 index, struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
+static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
{
struct Sprite *sprite = &gSprites[index];
@@ -1635,7 +1635,7 @@ void FreeAllSpritePalettes(void)
sSpritePaletteTags[i] = 0xFFFF;
}
-u8 LoadSpritePalette(struct SpritePalette *palette)
+u8 LoadSpritePalette(const struct SpritePalette *palette)
{
u8 index = IndexOfSpritePaletteTag(palette->tag);
@@ -1656,7 +1656,7 @@ u8 LoadSpritePalette(struct SpritePalette *palette)
}
}
-void LoadSpritePalettes(struct SpritePalette *palettes)
+void LoadSpritePalettes(const struct SpritePalette *palettes)
{
u8 i;
for (i = 0; palettes[i].data != NULL; i++)
diff --git a/sym_common.txt b/sym_common.txt
index 252bcbfbc..2c2479b83 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -337,7 +337,7 @@ gSaveFileStatus: @ 3005EB8
gUnknown_03005EBC: @ 3005EBC
.space 0x14
-gUnknown_03005ED0: @ 3005ED0
+gIntroFrameCounter: @ 3005ED0
.space 0x10
gUnknown_03005EE0: @ 3005EE0