summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-04-10 12:11:36 -0400
committerscnorton <scnorton@biociphers.org>2019-04-10 12:11:36 -0400
commit2f337edf36ded496efd8ec6cc0c35dda10e1bc98 (patch)
treeb6b303c4cf286c79d2a8e6792fe5c2bd0036b13b
parentdfc2fa2b393437a471bf815f2c9a7be0bc061021 (diff)
through sub_812FD78
-rw-r--r--asm/oak_speech.s805
-rw-r--r--data/data_845FD54.s6
-rw-r--r--data/oak_speech/unk_8460CA4.pngbin0 -> 110 bytes
-rw-r--r--data/oak_speech/unk_8460CE8.binbin0 -> 1280 bytes
-rw-r--r--include/menu.h1
-rw-r--r--include/pokeball.h3
-rw-r--r--src/oak_speech.c217
7 files changed, 219 insertions, 813 deletions
diff --git a/asm/oak_speech.s b/asm/oak_speech.s
index 224e5cbc2..29cfd154d 100644
--- a/asm/oak_speech.s
+++ b/asm/oak_speech.s
@@ -5,811 +5,6 @@
.text
- thumb_func_start sub_812F72C
-sub_812F72C: @ 812F72C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r7, r0, 3
- ldr r0, _0812F7B4 @ =gTasks+0x8
- mov r8, r0
- adds r4, r7, r0
- ldr r0, _0812F7B8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- bne _0812F7A6
- bl sub_810F740
- ldrb r0, [r4, 0x1C]
- movs r1, 0
- bl FillWindowPixelBuffer
- ldrb r0, [r4, 0x1C]
- bl ClearWindowTilemap
- ldrb r0, [r4, 0x1C]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4, 0x1C]
- bl RemoveWindow
- strh r6, [r4, 0x1C]
- movs r0, 0x1E
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- adds r0, r5, 0
- movs r1, 0
- bl sub_8131168
- movs r0, 0x50
- strh r0, [r4, 0x6]
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, _0812F7BC @ =sub_812F7C0
- str r1, [r0]
-_0812F7A6:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812F7B4: .4byte gTasks+0x8
-_0812F7B8: .4byte gPaletteFade
-_0812F7BC: .4byte sub_812F7C0
- thumb_func_end sub_812F72C
-
- thumb_func_start sub_812F7C0
-sub_812F7C0: @ 812F7C0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r7, r0, 3
- ldr r0, _0812F7EC @ =gTasks+0x8
- mov r8, r0
- adds r5, r7, r0
- movs r0, 0
- str r0, [sp, 0x4]
- ldrh r0, [r5, 0x6]
- movs r1, 0x6
- ldrsh r6, [r5, r1]
- cmp r6, 0
- beq _0812F7F0
- subs r0, 0x1
- strh r0, [r5, 0x6]
- b _0812F862
- .align 2, 0
-_0812F7EC: .4byte gTasks+0x8
-_0812F7F0:
- ldr r0, _0812F870 @ =gUnknown_8460CA4
- add r1, sp, 0x4
- bl malloc_and_decompress
- adds r1, r0, 0
- ldr r0, _0812F874 @ =sOakSpeechResources
- ldr r0, [r0]
- str r1, [r0]
- ldr r2, [sp, 0x4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r3, 0
- bl LoadBgTiles
- ldr r1, _0812F878 @ =gUnknown_8460CE8
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- adds r0, r4, 0
- bl sub_8130F2C
- movs r0, 0x3
- movs r1, 0
- bl sub_81311F4
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8130FD4
- movs r0, 0x92
- lsls r0, 1
- bl PlayBGM
- movs r0, 0x1
- negs r0, r0
- str r6, [sp]
- movs r1, 0x5
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x50
- strh r0, [r5, 0x6]
- movs r0, 0x2
- bl ShowBg
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, _0812F87C @ =sub_812F880
- str r1, [r0]
-_0812F862:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812F870: .4byte gUnknown_8460CA4
-_0812F874: .4byte sOakSpeechResources
-_0812F878: .4byte gUnknown_8460CE8
-_0812F87C: .4byte sub_812F880
- thumb_func_end sub_812F7C0
-
- thumb_func_start sub_812F880
-sub_812F880: @ 812F880
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0812F8B0 @ =gTasks+0x8
- adds r2, r0, r1
- ldr r0, _0812F8B4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812F92E
- ldrh r0, [r2, 0x6]
- movs r1, 0x6
- ldrsh r4, [r2, r1]
- cmp r4, 0
- beq _0812F8B8
- subs r0, 0x1
- strh r0, [r2, 0x6]
- b _0812F92E
- .align 2, 0
-_0812F8B0: .4byte gTasks+0x8
-_0812F8B4: .4byte gPaletteFade
-_0812F8B8:
- movs r0, 0
- movs r1, 0
- bl sub_80F6EE4
- ldr r2, _0812F8F0 @ =gUnknown_81C5C78
- ldr r5, _0812F8F4 @ =gStringVar4
- cmp r2, r5
- beq _0812F8FC
- adds r0, r5, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- ldr r0, _0812F8F8 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParametrized
- b _0812F918
- .align 2, 0
-_0812F8F0: .4byte gUnknown_81C5C78
-_0812F8F4: .4byte gStringVar4
-_0812F8F8: .4byte sOakSpeechResources
-_0812F8FC:
- ldr r0, _0812F938 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- bl AddTextPrinterParametrized
-_0812F918:
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, _0812F93C @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812F940 @ =sub_812F944
- str r0, [r1]
-_0812F92E:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812F938: .4byte sOakSpeechResources
-_0812F93C: .4byte gTasks
-_0812F940: .4byte sub_812F944
- thumb_func_end sub_812F880
-
- thumb_func_start sub_812F944
-sub_812F944: @ 812F944
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _0812F9D6
- movs r0, 0
- movs r1, 0
- bl sub_80F6EE4
- ldr r2, _0812F994 @ =gUnknown_81C5D06
- ldr r5, _0812F998 @ =gStringVar4
- cmp r2, r5
- beq _0812F9A0
- adds r0, r5, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- ldr r0, _0812F99C @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParametrized
- b _0812F9BC
- .align 2, 0
-_0812F994: .4byte gUnknown_81C5D06
-_0812F998: .4byte gStringVar4
-_0812F99C: .4byte sOakSpeechResources
-_0812F9A0:
- ldr r0, _0812F9E0 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- bl AddTextPrinterParametrized
-_0812F9BC:
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r1, _0812F9E4 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1E
- strh r1, [r0, 0xE]
- ldr r1, _0812F9E8 @ =sub_812F9EC
- str r1, [r0]
-_0812F9D6:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812F9E0: .4byte sOakSpeechResources
-_0812F9E4: .4byte gTasks
-_0812F9E8: .4byte sub_812F9EC
- thumb_func_end sub_812F944
-
- thumb_func_start sub_812F9EC
-sub_812F9EC: @ 812F9EC
- push {r4-r7,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r6, r1, 3
- ldr r7, _0812FA68 @ =gTasks+0x8
- adds r4, r6, r7
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- bne _0812FA5E
- ldrh r1, [r4, 0x6]
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0812FA1A
- subs r0, r1, 0x1
- strh r0, [r4, 0x6]
-_0812FA1A:
- adds r4, r7, 0
- subs r4, 0x8
- adds r4, r6, r4
- ldrb r0, [r4, 0x10]
- ldr r1, _0812FA6C @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r3, 0x3E
- adds r3, r2
- mov r12, r3
- ldrb r3, [r3]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- mov r3, r12
- strb r1, [r3]
- strh r5, [r2, 0x2E]
- ldrb r1, [r2, 0x5]
- lsrs r1, 4
- str r5, [sp]
- str r5, [sp, 0x4]
- movs r2, 0x20
- str r2, [sp, 0x8]
- ldr r2, _0812FA70 @ =0xffff1fff
- str r2, [sp, 0xC]
- movs r2, 0x64
- movs r3, 0x42
- bl CreatePokeballSpriteToReleaseMon
- ldr r0, _0812FA74 @ =sub_812FA78
- str r0, [r4]
- strh r5, [r4, 0xE]
-_0812FA5E:
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FA68: .4byte gTasks+0x8
-_0812FA6C: .4byte gSprites
-_0812FA70: .4byte 0xffff1fff
-_0812FA74: .4byte sub_812FA78
- thumb_func_end sub_812F9EC
-
- thumb_func_start sub_812FA78
-sub_812FA78: @ 812FA78
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- beq _0812FAA0
- ldr r0, _0812FAFC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0x5F
- ble _0812FAA0
- ldr r0, _0812FB00 @ =sub_812FB4C
- str r0, [r1]
-_0812FAA0:
- ldr r1, _0812FAFC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- ldrh r3, [r2, 0xE]
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- ldr r0, _0812FB04 @ =0x00003fff
- cmp r1, r0
- bgt _0812FB40
- adds r0, r3, 0x1
- movs r5, 0
- strh r0, [r2, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x20
- bne _0812FB40
- movs r0, 0
- movs r1, 0
- bl sub_80F6EE4
- ldr r2, _0812FB08 @ =gUnknown_81C5D12
- ldr r4, _0812FB0C @ =gStringVar4
- cmp r2, r4
- beq _0812FB14
- adds r0, r4, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- ldr r0, _0812FB10 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- adds r2, r4, 0
- bl AddTextPrinterParametrized
- b _0812FB30
- .align 2, 0
-_0812FAFC: .4byte gTasks
-_0812FB00: .4byte sub_812FB4C
-_0812FB04: .4byte 0x00003fff
-_0812FB08: .4byte gUnknown_81C5D12
-_0812FB0C: .4byte gStringVar4
-_0812FB10: .4byte sOakSpeechResources
-_0812FB14:
- ldr r0, _0812FB48 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- bl AddTextPrinterParametrized
-_0812FB30:
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1D
- movs r1, 0
- bl PlayCry1
-_0812FB40:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FB48: .4byte sOakSpeechResources
- thumb_func_end sub_812FA78
-
- thumb_func_start sub_812FB4C
-sub_812FB4C: @ 812FB4C
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _0812FBDA
- movs r0, 0
- movs r1, 0
- bl sub_80F6EE4
- ldr r2, _0812FB9C @ =gUnknown_81C5D4B
- ldr r5, _0812FBA0 @ =gStringVar4
- cmp r2, r5
- beq _0812FBA8
- adds r0, r5, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- ldr r0, _0812FBA4 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParametrized
- b _0812FBC4
- .align 2, 0
-_0812FB9C: .4byte gUnknown_81C5D4B
-_0812FBA0: .4byte gStringVar4
-_0812FBA4: .4byte sOakSpeechResources
-_0812FBA8:
- ldr r0, _0812FBE4 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- bl AddTextPrinterParametrized
-_0812FBC4:
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, _0812FBE8 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812FBEC @ =sub_812FBF0
- str r0, [r1]
-_0812FBDA:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FBE4: .4byte sOakSpeechResources
-_0812FBE8: .4byte gTasks
-_0812FBEC: .4byte sub_812FBF0
- thumb_func_end sub_812FB4C
-
- thumb_func_start sub_812FBF0
-sub_812FBF0: @ 812FBF0
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- bne _0812FC4E
- movs r0, 0
- movs r1, 0x1
- bl sub_80F6F54
- ldr r0, _0812FC58 @ =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x10]
- ldr r2, _0812FC5C @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- str r5, [sp]
- str r5, [sp, 0x4]
- movs r2, 0x20
- str r2, [sp, 0x8]
- ldr r2, _0812FC60 @ =0xffff1f3f
- str r2, [sp, 0xC]
- movs r2, 0x64
- movs r3, 0x42
- bl sub_804BB98
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r0, 0x30
- strh r0, [r4, 0xE]
- movs r0, 0x40
- strh r0, [r4, 0x8]
- ldr r0, _0812FC64 @ =sub_812FC68
- str r0, [r4]
-_0812FC4E:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FC58: .4byte gTasks
-_0812FC5C: .4byte gSprites
-_0812FC60: .4byte 0xffff1f3f
-_0812FC64: .4byte sub_812FC68
- thumb_func_end sub_812FBF0
-
- thumb_func_start sub_812FC68
-sub_812FC68: @ 812FC68
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0812FCA4 @ =gTasks+0x8
- adds r5, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _0812FCAC
- cmp r0, 0x17
- bgt _0812FC9A
- ldr r2, _0812FCA8 @ =gSprites
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
-_0812FC9A:
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- b _0812FD62
- .align 2, 0
-_0812FCA4: .4byte gTasks+0x8
-_0812FCA8: .4byte gSprites
-_0812FCAC:
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- cmp r0, 0x30
- bne _0812FCD6
- movs r0, 0x8
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0812FCE8 @ =gSprites
- adds r0, r4
- bl DestroySprite
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
-_0812FCD6:
- ldrh r0, [r5, 0x6]
- movs r1, 0x6
- ldrsh r4, [r5, r1]
- cmp r4, 0
- beq _0812FCEC
- subs r0, 0x1
- strh r0, [r5, 0x6]
- b _0812FD62
- .align 2, 0
-_0812FCE8: .4byte gSprites
-_0812FCEC:
- movs r0, 0
- movs r1, 0
- bl sub_80F6EE4
- ldr r2, _0812FD24 @ =gUnknown_81C5DBD
- ldr r5, _0812FD28 @ =gStringVar4
- cmp r2, r5
- beq _0812FD30
- adds r0, r5, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- ldr r0, _0812FD2C @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParametrized
- b _0812FD4C
- .align 2, 0
-_0812FD24: .4byte gUnknown_81C5DBD
-_0812FD28: .4byte gStringVar4
-_0812FD2C: .4byte sOakSpeechResources
-_0812FD30:
- ldr r0, _0812FD6C @ =sOakSpeechResources
- ldr r0, [r0]
- ldrb r3, [r0, 0x1F]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x4
- bl AddTextPrinterParametrized
-_0812FD4C:
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, _0812FD70 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812FD74 @ =sub_812FD78
- str r0, [r1]
-_0812FD62:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FD6C: .4byte sOakSpeechResources
-_0812FD70: .4byte gTasks
-_0812FD74: .4byte sub_812FD78
- thumb_func_end sub_812FC68
-
- thumb_func_start sub_812FD78
-sub_812FD78: @ 812FD78
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r5, r0, 3
- ldr r7, _0812FDB8 @ =gTasks+0x8
- adds r6, r5, r7
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0812FDB2
- movs r0, 0
- movs r1, 0x1
- bl sub_80F6F54
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_813144C
- movs r0, 0x30
- strh r0, [r6, 0x6]
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, _0812FDBC @ =sub_812FDC0
- str r1, [r0]
-_0812FDB2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812FDB8: .4byte gTasks+0x8
-_0812FDBC: .4byte sub_812FDC0
- thumb_func_end sub_812FD78
-
thumb_func_start sub_812FDC0
sub_812FDC0: @ 812FDC0
push {r4-r6,lr}
diff --git a/data/data_845FD54.s b/data/data_845FD54.s
index c14671533..a5755b8db 100644
--- a/data/data_845FD54.s
+++ b/data/data_845FD54.s
@@ -5,12 +5,6 @@
.align 2
// oak_speech
-gUnknown_8460CA4:: @ 8460CA4
- .incbin "baserom.gba", 0x460CA4, 0x44
-
-gUnknown_8460CE8:: @ 8460CE8
- .incbin "baserom.gba", 0x460CE8, 0xAC
-
gUnknown_8460D94:: @ 8460D94
.incbin "baserom.gba", 0x460D94, 0xA0
diff --git a/data/oak_speech/unk_8460CA4.png b/data/oak_speech/unk_8460CA4.png
new file mode 100644
index 000000000..30066cdd8
--- /dev/null
+++ b/data/oak_speech/unk_8460CA4.png
Binary files differ
diff --git a/data/oak_speech/unk_8460CE8.bin b/data/oak_speech/unk_8460CE8.bin
new file mode 100644
index 000000000..64374cd24
--- /dev/null
+++ b/data/oak_speech/unk_8460CE8.bin
Binary files differ
diff --git a/include/menu.h b/include/menu.h
index b134ef7f5..cdc872a6d 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -42,5 +42,6 @@ void sub_810F558(u8, u8, u8, u8, u16);
void sub_810F650(const u8 *, const u8 *, u8, u32, u8);
void sub_810F5E8(const u8 *, u32, u8);
void sub_810F71C(void);
+void sub_810F740(void);
#endif // GUARD_MENU_H
diff --git a/include/pokeball.h b/include/pokeball.h
index 10a9529b9..5545f8870 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -24,7 +24,8 @@ enum
#define POKEBALL_OPPONENT_SENDOUT 0xFE
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow);
-void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species);
+void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h);
+u8 sub_804BB98(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h);
u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h);
void sub_8076918(u8 bank);
void DoHitAnimHealthboxEffect(u8 bank);
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 83e82b495..93275bc08 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -16,12 +16,15 @@
#include "sound.h"
#include "event_scripts.h"
#include "scanline_effect.h"
+#include "string_util.h"
+#include "pokeball.h"
#include "constants/species.h"
#include "constants/songs.h"
struct OakSpeechResources
{
- u8 filler_0000[0x8];
+ void * unk_0000;
+ u8 filler_0004[0x4];
void * unk_0008;
u8 filler_000C[6];
u16 unk_0012;
@@ -44,11 +47,31 @@ void sub_812F274(u8 taskId);
void sub_812F33C(u8 taskId);
void sub_812F4A8(u8 taskId);
void sub_812F72C(u8 taskId);
+void sub_812F7C0(u8 taskId);
+void sub_812F880(u8 taskId);
+void sub_812F880(u8 taskId);
+void sub_812F944(u8 taskId);
+void sub_812F9EC(u8 taskId);
+void sub_812FA78(u8 taskId);
+void sub_812FB4C(u8 taskId);
+void sub_812FBF0(u8 taskId);
+void sub_812FC68(u8 taskId);
+void sub_812FD78(u8 taskId);
+void sub_812FDC0(u8 taskId);
+void sub_8130F2C(u8 taskId);
void sub_8130FD4(u8 taskId, u8 state);
+void sub_8131168(u8 taskId, u8 state);
+void sub_81311F4(u8 taskId, u8 state);
+void sub_813144C(u8 taskId, u8 state);
extern const u8 gUnknown_8415D2C[];
extern const u8 gUnknown_8415D48[];
extern const u8 gUnknown_8415D50[];
+extern const u8 gUnknown_81C5C78[];
+extern const u8 gUnknown_81C5D06[];
+extern const u8 gUnknown_81C5D12[];
+extern const u8 gUnknown_81C5D4B[];
+extern const u8 gUnknown_81C5DBD[];
const u8 gUnknown_845FD54[][5] = {
[SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29},
@@ -469,6 +492,8 @@ const u8 gUnknown_845FD54[][5] = {
ALIGNED(4) const u16 gUnknown_8460568[] = INCBIN_U16("data/oak_speech/unk_8460568.gbapal");
const u32 gUnknown_84605E8[] = INCBIN_U32("data/oak_speech/unk_84605E8.4bpp.lz");
const u32 gUnknown_8460BA8[] = INCBIN_U32("data/oak_speech/unk_8460BA8.bin.lz");
+const u32 gUnknown_8460CA4[] = INCBIN_U32("data/oak_speech/unk_8460CA4.4bpp.lz");
+const u32 gUnknown_8460CE8[] = INCBIN_U32("data/oak_speech/unk_8460CE8.bin.lz");
extern const u16 gUnknown_8460D94[];
extern const u16 gUnknown_8460E34[];
@@ -945,3 +970,193 @@ void sub_812F4A8(u8 taskId)
break;
}
}
+
+void sub_812F72C(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ sub_810F740();
+ FillWindowPixelBuffer(data[14], 0x00);
+ ClearWindowTilemap(data[14]);
+ CopyWindowToVram(data[14], 3);
+ RemoveWindow(data[14]);
+ data[14] = 0;
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(1);
+ sub_8131168(taskId, 0);
+ data[3] = 80;
+ gTasks[taskId].func = sub_812F7C0;
+ }
+}
+
+void sub_812F7C0(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u32 size = 0;
+
+ if (data[3] != 0)
+ data[3]--;
+ else
+ {
+ sOakSpeechResources->unk_0000 = malloc_and_decompress(gUnknown_8460CA4, &size);
+ LoadBgTiles(1, sOakSpeechResources->unk_0000, size, 0);
+ CopyToBgTilemapBuffer(1, gUnknown_8460CE8, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+ sub_8130F2C(taskId);
+ sub_81311F4(3, 0);
+ sub_8130FD4(taskId, 1);
+ PlayBGM(292);
+ BeginNormalPaletteFade(0xFFFFFFFF, 5, 16, 0, RGB_BLACK);
+ data[3] = 80;
+ ShowBg(2);
+ gTasks[taskId].func = sub_812F880;
+ }
+}
+
+#define OaksSpeechPrintMessage(str) ({ \
+ sub_80F6EE4(0, FALSE);\
+ if (str != gStringVar4) \
+ { \
+ StringExpandPlaceholders(gStringVar4, str); \
+ AddTextPrinterParametrized(0, 4, gStringVar4, sOakSpeechResources->unk_001F, NULL, 2, 1, 3); \
+ } \
+ else \
+ { \
+ AddTextPrinterParametrized(0, 4, str, sOakSpeechResources->unk_001F, NULL, 2, 1, 3); \
+ } \
+ CopyWindowToVram(0, 3); \
+})
+
+void sub_812F880(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ if (data[3] != 0)
+ data[3]--;
+ else
+ {
+ OaksSpeechPrintMessage(gUnknown_81C5C78);
+ gTasks[taskId].func = sub_812F944;
+ }
+ }
+}
+
+void sub_812F944(u8 taskId)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ OaksSpeechPrintMessage(gUnknown_81C5D06);
+ gTasks[taskId].data[3] = 30;
+ gTasks[taskId].func = sub_812F9EC;
+ }
+}
+
+void sub_812F9EC(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ u8 spriteId;
+
+ if (!IsTextPrinterActive(0))
+ {
+ if (data[3] != 0)
+ data[3]--;
+ // else {
+ spriteId = gTasks[taskId].data[4];
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].data[0] = 0;
+ CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1FFF);
+ gTasks[taskId].func = sub_812FA78;
+ gTasks[taskId].data[3] = 0;
+ // }
+ }
+}
+
+void sub_812FA78(u8 taskId)
+{
+ if (IsCryFinished())
+ {
+ if (gTasks[taskId].data[3] >= 96)
+ gTasks[taskId].func = sub_812FB4C;
+ }
+ if (gTasks[taskId].data[3] < 0x4000)
+ {
+ gTasks[taskId].data[3]++;
+ if (gTasks[taskId].data[3] == 32)
+ {
+ OaksSpeechPrintMessage(gUnknown_81C5D12);
+ PlayCry1(SPECIES_NIDORAN_F, 0);
+ }
+ }
+}
+
+void sub_812FB4C(u8 taskId)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ OaksSpeechPrintMessage(gUnknown_81C5D4B);
+ gTasks[taskId].func = sub_812FBF0;
+ }
+}
+
+void sub_812FBF0(u8 taskId)
+{
+ u8 spriteId;
+
+ if (!IsTextPrinterActive(0))
+ {
+ sub_80F6F54(0, 1);
+ spriteId = gTasks[taskId].data[4];
+ gTasks[taskId].data[6] = sub_804BB98(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F);
+ gTasks[taskId].data[3] = 48;
+ gTasks[taskId].data[0] = 64;
+ gTasks[taskId].func = sub_812FC68;
+ }
+}
+
+void sub_812FC68(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (data[0] != 0)
+ {
+ if (data[0] < 24)
+ {
+ gSprites[data[4]].pos1.y--;
+ }
+ data[0]--;
+ }
+ else
+ {
+ if (data[3] == 48)
+ {
+ DestroySprite(&gSprites[data[4]]);
+ DestroySprite(&gSprites[data[6]]);
+ }
+ if (data[3] != 0)
+ {
+ data[3]--;
+ }
+ else
+ {
+ OaksSpeechPrintMessage(gUnknown_81C5DBD);
+ gTasks[taskId].func = sub_812FD78;
+ }
+ }
+}
+
+void sub_812FD78(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (!IsTextPrinterActive(0))
+ {
+ sub_80F6F54(0, 1);
+ sub_813144C(taskId, 2);
+ data[3] = 48;
+ gTasks[taskId].func = sub_812FDC0;
+ }
+}