diff options
-rw-r--r-- | asm/oak_speech.s | 367 | ||||
-rw-r--r-- | data/data_845FD54.s | 52 | ||||
-rw-r--r-- | data/oak_speech/unk_8460ED4.pal | 35 | ||||
-rw-r--r-- | data/oak_speech/unk_84615FC.pal | 35 | ||||
-rw-r--r-- | data/oak_speech/unk_8461CD4.pal | 35 | ||||
-rw-r--r-- | data/oak_speech/unk_84623AC.pal | 35 | ||||
-rw-r--r-- | src/oak_speech.c | 122 |
7 files changed, 260 insertions, 421 deletions
diff --git a/asm/oak_speech.s b/asm/oak_speech.s index f9d4e9b5a..cbe61c8ff 100644 --- a/asm/oak_speech.s +++ b/asm/oak_speech.s @@ -5,373 +5,6 @@ .text - thumb_func_start sub_8131168 -sub_8131168: @ 8131168 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - movs r4, 0 - lsls r1, r0, 2 - adds r1, r0 - lsls r5, r1, 3 - ldr r7, _081311AC @ =gTasks+0x8 -_0813117C: - adds r0, r4, 0x7 - lsls r0, 1 - adds r0, r5 - adds r0, r7 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081311B0 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _0813117C - cmp r6, 0 - beq _081311B4 - cmp r6, 0x1 - beq _081311DC - b _081311EC - .align 2, 0 -_081311AC: .4byte gTasks+0x8 -_081311B0: .4byte gSprites -_081311B4: - ldr r0, _081311D0 @ =0x00001003 - bl FreeSpriteTilesByTag - ldr r0, _081311D4 @ =0x00001002 - bl FreeSpriteTilesByTag - ldr r4, _081311D8 @ =0x00001001 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - b _081311EC - .align 2, 0 -_081311D0: .4byte 0x00001003 -_081311D4: .4byte 0x00001002 -_081311D8: .4byte 0x00001001 -_081311DC: - movs r4, 0x80 - lsls r4, 5 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag -_081311EC: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8131168 - - thumb_func_start sub_81311F4 -sub_81311F4: @ 81311F4 - push {r4-r6,lr} - sub sp, 0x24 - lsls r0, 16 - lsrs r0, 16 - adds r2, r0, 0 - lsls r1, 16 - lsrs r4, r1, 16 - cmp r0, 0x1 - beq _08131230 - cmp r0, 0x1 - bgt _08131210 - cmp r0, 0 - beq _0813121A - b _081312F6 -_08131210: - cmp r2, 0x2 - beq _08131248 - cmp r2, 0x3 - beq _0813126C - b _081312F6 -_0813121A: - ldr r0, _08131228 @ =gUnknown_84615FC - movs r1, 0x40 - movs r2, 0x40 - bl LoadPalette - ldr r0, _0813122C @ =gUnknown_846163C - b _08131254 - .align 2, 0 -_08131228: .4byte gUnknown_84615FC -_0813122C: .4byte gUnknown_846163C -_08131230: - ldr r0, _08131240 @ =gUnknown_8460ED4 - movs r1, 0x40 - movs r2, 0x40 - bl LoadPalette - ldr r0, _08131244 @ =gUnknown_8460F14 - b _08131254 - .align 2, 0 -_08131240: .4byte gUnknown_8460ED4 -_08131244: .4byte gUnknown_8460F14 -_08131248: - ldr r0, _08131260 @ =gUnknown_84623AC - movs r1, 0x60 - movs r2, 0x40 - bl LoadPalette - ldr r0, _08131264 @ =gUnknown_84623EC -_08131254: - ldr r2, _08131268 @ =0x06000600 - adds r1, r4, r2 - bl LZ77UnCompVram - b _08131280 - .align 2, 0 -_08131260: .4byte gUnknown_84623AC -_08131264: .4byte gUnknown_84623EC -_08131268: .4byte 0x06000600 -_0813126C: - ldr r0, _08131300 @ =gUnknown_8461CD4 - movs r1, 0x60 - movs r2, 0x40 - bl LoadPalette - ldr r0, _08131304 @ =gUnknown_8461D14 - ldr r2, _08131308 @ =0x06000600 - adds r1, r4, r2 - bl LZ77UnCompVram -_08131280: - movs r0, 0x60 - bl AllocZeroed - ldr r2, _0813130C @ =sOakSpeechResources - ldr r1, [r2] - str r0, [r1, 0x4] - movs r1, 0 - lsrs r6, r4, 6 -_08131290: - ldr r0, [r2] - ldr r0, [r0, 0x4] - adds r0, r1 - strb r1, [r0] - adds r1, 0x1 - cmp r1, 0x5F - bls _08131290 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r5, 0x10 - str r5, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - ldr r4, _0813130C @ =sOakSpeechResources - ldr r0, [r4] - ldr r1, [r0, 0x4] - movs r3, 0x8 - str r3, [sp] - movs r2, 0xC - str r2, [sp, 0x4] - movs r0, 0xB - str r0, [sp, 0x8] - movs r0, 0x2 - str r0, [sp, 0xC] - str r3, [sp, 0x10] - str r2, [sp, 0x14] - str r5, [sp, 0x18] - adds r0, r6, 0 - adds r0, 0x18 - str r0, [sp, 0x1C] - movs r5, 0 - str r5, [sp, 0x20] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyRectToBgTilemapBufferRect - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r0, [r4] - ldr r0, [r0, 0x4] - bl Free - ldr r0, [r4] - str r5, [r0, 0x4] -_081312F6: - add sp, 0x24 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08131300: .4byte gUnknown_8461CD4 -_08131304: .4byte gUnknown_8461D14 -_08131308: .4byte 0x06000600 -_0813130C: .4byte sOakSpeechResources - thumb_func_end sub_81311F4 - - thumb_func_start sub_8131310 -sub_8131310: @ 8131310 - push {lr} - sub sp, 0xC - movs r0, 0x8 - str r0, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0x10 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r2, 0xB - movs r3, 0x1 - bl FillBgTilemapBufferRect - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - add sp, 0xC - pop {r0} - bx r0 - thumb_func_end sub_8131310 - - thumb_func_start sub_8131338 -sub_8131338: @ 8131338 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - ldr r1, _081313A8 @ =gTasks - lsls r0, r6, 2 - mov r9, r0 - adds r0, r6 - lsls r5, r0, 3 - adds r2, r5, r1 - ldrh r3, [r2, 0xA] - movs r7, 0xA - ldrsh r0, [r2, r7] - mov r8, r1 - cmp r0, 0 - bne _081313B0 - movs r1, 0x8 - ldrsh r0, [r2, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - add r1, r8 - movs r0, 0x1 - strh r0, [r1, 0xC] - adds r0, r6, 0 - bl DestroyTask - ldr r6, _081313AC @ =gSprites - adds r2, r5, 0 - mov r5, r8 - adds r5, 0x8 - movs r3, 0x4 -_08131380: - adds r0, r4, 0x7 - lsls r0, 1 - adds r0, r2 - adds r0, r5 - movs r7, 0 - ldrsh r1, [r0, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _08131380 - b _0813143A - .align 2, 0 -_081313A8: .4byte gTasks -_081313AC: .4byte gSprites -_081313B0: - ldrh r1, [r2, 0x10] - movs r7, 0x10 - ldrsh r0, [r2, r7] - cmp r0, 0 - beq _081313C0 - subs r0, r1, 0x1 - strh r0, [r2, 0x10] - b _0813143A -_081313C0: - ldrh r0, [r2, 0xE] - strh r0, [r2, 0x10] - subs r1, r3, 0x1 - strh r1, [r2, 0xA] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - lsls r1, 16 - asrs r1, 16 - mov r12, r9 - cmp r1, 0x8 - bne _0813141E - adds r7, r5, 0 - movs r0, 0x8 - add r0, r8 - mov r10, r0 - movs r5, 0x1 - movs r1, 0x5 - negs r1, r1 - mov r9, r1 -_081313E8: - adds r0, r4, 0x7 - lsls r0, 1 - adds r0, r7 - add r0, r10 - movs r2, 0 - ldrsh r0, [r0, r2] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08131448 @ =gSprites - adds r2, r0 - adds r2, 0x3E - ldrb r3, [r2] - lsls r1, r3, 29 - lsrs r1, 31 - eors r1, r5 - ands r1, r5 - lsls r1, 2 - mov r0, r9 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _081313E8 -_0813141E: - mov r1, r12 - adds r0, r1, r6 - lsls r0, 3 - add r0, r8 - movs r2, 0xC - ldrsh r1, [r0, r2] - lsls r1, 8 - ldrh r0, [r0, 0xA] - adds r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg -_0813143A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08131448: .4byte gSprites - thumb_func_end sub_8131338 - thumb_func_start sub_813144C sub_813144C: @ 813144C push {r4-r7,lr} diff --git a/data/data_845FD54.s b/data/data_845FD54.s index b17d0fd12..42d8923b3 100644 --- a/data/data_845FD54.s +++ b/data/data_845FD54.s @@ -5,56 +5,10 @@ .align 2 // oak_speech -gUnknown_8460D94:: @ 8460D94 - .incbin "baserom.gba", 0x460D94, 0xA0 - -gUnknown_8460E34:: @ 8460E34 - .incbin "baserom.gba", 0x460E34, 0xA0 - -gUnknown_8460ED4:: @ 8460ED4 - .incbin "baserom.gba", 0x460ED4, 0x40 - -gUnknown_8460F14:: @ 8460F14 - .incbin "baserom.gba", 0x460F14, 0x6E8 - -gUnknown_84615FC:: @ 84615FC - .incbin "baserom.gba", 0x4615FC, 0x40 - -gUnknown_846163C:: @ 846163C - .incbin "baserom.gba", 0x46163C, 0x698 - -gUnknown_8461CD4:: @ 8461CD4 - .incbin "baserom.gba", 0x461CD4, 0x40 - -gUnknown_8461D14:: @ 8461D14 - .incbin "baserom.gba", 0x461D14, 0x698 - -gUnknown_84623AC:: @ 84623AC - .incbin "baserom.gba", 0x4623AC, 0x40 - -gUnknown_84623EC:: @ 84623EC - .incbin "baserom.gba", 0x4623EC, 0x5E4 - -gUnknown_84629D0:: - .incbin "data/oak_speech/unk_84629D0.gbapal" - -gUnknown_84629F0:: - .incbin "data/oak_speech/unk_84629F0.gbapal" - -gUnknown_8462A10:: - .incbin "data/oak_speech/unk_8462A10.4bpp.lz" - -gUnknown_8462B74:: - .incbin "data/oak_speech/unk_8462B74.4bpp.lz" - -gUnknown_8462D34:: - .incbin "data/oak_speech/unk_8462D34.4bpp.lz" - -gUnknown_8462E18:: - .incbin "data/oak_speech/unk_8462E18.4bpp.lz" - gUnknown_8462E58:: @ 8462E58 - .incbin "baserom.gba", 0x462E58, 0xC + .4byte 0x000001f8 + .4byte 0x000021e1 + .4byte 0x00001bc2 gUnknown_8462E64:: @ 8462E64 window_template 0x00, 0x00, 0x07, 0x1e, 0x04, 0x0f, 0x0001 diff --git a/data/oak_speech/unk_8460ED4.pal b/data/oak_speech/unk_8460ED4.pal new file mode 100644 index 000000000..feb1214a1 --- /dev/null +++ b/data/oak_speech/unk_8460ED4.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +115 197 164 +255 238 205 +246 205 180 +213 164 148 +172 131 106 +106 74 65 +205 164 139 +164 123 98 +115 74 49 +74 41 16 +222 222 222 +180 180 180 +131 131 131 +82 82 90 +41 41 49 +255 255 255 +0 0 0 +131 189 213 +106 156 180 +82 131 156 +49 90 115 +32 65 90 +0 0 255 +255 255 189 +222 222 82 +172 172 57 +98 98 0 +213 131 123 +189 106 98 +164 82 74 +139 57 49 +98 24 16 diff --git a/data/oak_speech/unk_84615FC.pal b/data/oak_speech/unk_84615FC.pal new file mode 100644 index 000000000..7eec09831 --- /dev/null +++ b/data/oak_speech/unk_84615FC.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +115 197 164 +255 230 205 +222 189 156 +197 148 131 +148 106 90 +106 74 65 +205 164 139 +164 123 98 +115 74 49 +82 65 32 +222 222 222 +180 180 180 +131 131 131 +82 82 90 +57 57 65 +255 255 255 +0 0 0 +131 189 213 +106 156 180 +82 131 156 +49 90 115 +32 65 90 +0 0 255 +238 238 74 +205 205 49 +164 164 32 +98 98 0 +213 131 123 +189 106 98 +164 82 74 +139 57 49 +98 24 16 diff --git a/data/oak_speech/unk_8461CD4.pal b/data/oak_speech/unk_8461CD4.pal new file mode 100644 index 000000000..a0b648b2b --- /dev/null +++ b/data/oak_speech/unk_8461CD4.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +115 197 164 +255 230 205 +222 189 156 +197 148 115 +106 74 65 +238 222 148 +205 189 115 +172 156 90 +139 123 65 +98 90 49 +255 0 255 +205 205 222 +123 131 156 +57 74 106 +255 255 255 +0 0 0 +0 0 255 +172 148 222 +131 115 172 +82 65 115 +230 222 180 +205 197 156 +180 172 139 +164 156 123 +123 115 90 +82 57 49 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/data/oak_speech/unk_84623AC.pal b/data/oak_speech/unk_84623AC.pal new file mode 100644 index 000000000..8240527a6 --- /dev/null +++ b/data/oak_speech/unk_84623AC.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +115 197 164 +255 230 205 +222 189 156 +197 148 115 +106 74 65 +238 189 74 +213 156 57 +189 123 41 +139 82 41 +164 123 106 +222 222 222 +197 197 197 +139 139 139 +98 98 98 +65 65 65 +255 255 255 +0 0 0 +180 148 180 +139 106 139 +106 74 106 +82 49 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +246 131 131 +205 82 82 diff --git a/src/oak_speech.c b/src/oak_speech.c index 159a377cb..37f7169ff 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -29,7 +29,7 @@ struct OakSpeechResources { void * unk_0000; - u8 filler_0004[0x4]; + void * unk_0004; void * unk_0008; u8 filler_000C[4]; u16 unk_0010; @@ -96,7 +96,7 @@ static void CB2_ReturnFromNamingScreen(void); static void CreateNidoranFSprite(u8 taskId); void sub_8130FD4(u8 taskId, u8 state); void sub_8131168(u8 taskId, u8 state); -void sub_81311F4(u8 arg0, u8 state); +void sub_81311F4(u16 whichPic, u16 tileOffset); void sub_8131310(void); void sub_813144C(u8 taskId, u8 state); void sub_81315CC(u8 taskId, u8 state); @@ -533,9 +533,22 @@ 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[]; +const u16 gUnknown_8460D94[] = INCBIN_U16("data/oak_speech/unk_8460D94.bin"); +const u16 gUnknown_8460E34[] = INCBIN_U16("data/oak_speech/unk_8460E34.bin"); +const u16 gUnknown_8460ED4[] = INCBIN_U16("data/oak_speech/unk_8460ED4.gbapal"); +const u32 gUnknown_8460F14[] = INCBIN_U32("data/oak_speech/unk_8460F14.8bpp.lz"); +const u16 gUnknown_84615FC[] = INCBIN_U16("data/oak_speech/unk_84615FC.gbapal"); +const u32 gUnknown_846163C[] = INCBIN_U32("data/oak_speech/unk_846163C.8bpp.lz"); +const u16 gUnknown_8461CD4[] = INCBIN_U16("data/oak_speech/unk_8461CD4.gbapal"); +const u32 gUnknown_8461D14[] = INCBIN_U32("data/oak_speech/unk_8461D14.8bpp.lz"); +const u16 gUnknown_84623AC[] = INCBIN_U16("data/oak_speech/unk_84623AC.gbapal"); +const u32 gUnknown_84623EC[] = INCBIN_U32("data/oak_speech/unk_84623EC.8bpp.lz"); +const u16 gUnknown_84629D0[] = INCBIN_U16("data/oak_speech/unk_84629D0.gbapal"); +const u16 gUnknown_84629F0[] = INCBIN_U16("data/oak_speech/unk_84629F0.gbapal"); +const u32 gUnknown_8462A10[] = INCBIN_U32("data/oak_speech/unk_8462A10.4bpp.lz"); +const u32 gUnknown_8462B74[] = INCBIN_U32("data/oak_speech/unk_8462B74.4bpp.lz"); +const u32 gUnknown_8462D34[] = INCBIN_U32("data/oak_speech/unk_8462D34.4bpp.lz"); +const u32 gUnknown_8462E18[] = INCBIN_U32("data/oak_speech/unk_8462E18.4bpp.lz"); extern const struct BgTemplate gUnknown_8462E58[3]; extern const struct WindowTemplate *const gUnknown_8462EB4[3]; @@ -1845,3 +1858,102 @@ void sub_8130FD4(u8 taskId, u8 state) break; } } + +void sub_8131168(u8 taskId, u8 state) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + DestroySprite(&gSprites[gTasks[taskId].data[7 + i]]); + } + + switch (state) + { + case 0: + FreeSpriteTilesByTag(0x1003); + FreeSpriteTilesByTag(0x1002); + FreeSpriteTilesByTag(0x1001); + FreeSpritePaletteByTag(0x1001); + break; + case 1: + FreeSpriteTilesByTag(0x1000); + FreeSpritePaletteByTag(0x1000); + break; + } +} + +void sub_81311F4(u16 whichPic, u16 tileOffset) +{ + u32 i; + + switch (whichPic) + { + case 0: // FIRE + LoadPalette(gUnknown_84615FC, 0x40, 0x40); + LZ77UnCompVram(gUnknown_846163C, (void *)0x06000600 + tileOffset); + break; + case 1: // LEAF + LoadPalette(gUnknown_8460ED4, 0x40, 0x40); + LZ77UnCompVram(gUnknown_8460F14, (void *)0x06000600 + tileOffset); + break; + case 2: // BLUE + LoadPalette(gUnknown_84623AC, 0x60, 0x40); + LZ77UnCompVram(gUnknown_84623EC, (void *)0x06000600 + tileOffset); + break; + case 3: // OAK + LoadPalette(gUnknown_8461CD4, 0x60, 0x40); + LZ77UnCompVram(gUnknown_8461D14, (void *)0x06000600 + tileOffset); + break; + default: + return; + } + + sOakSpeechResources->unk_0004 = AllocZeroed(0x60); + for (i = 0; i < 0x60; i++) + ((u8 *)sOakSpeechResources->unk_0004)[i] = i; + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x10); + CopyRectToBgTilemapBufferRect(2, sOakSpeechResources->unk_0004, 0, 0, 8, 12, 11, 2, 8, 12, 0x10, (tileOffset / 64) + 0x18, 0x00); + CopyBgTilemapBufferToVram(2); + Free(sOakSpeechResources->unk_0004); + sOakSpeechResources->unk_0004 = 0; +} + +void sub_8131310(void) +{ + FillBgTilemapBufferRect(2, 0x000, 11, 1, 8, 12, 0x10); + CopyBgTilemapBufferToVram(2); +} + +void sub_8131338(u8 taskId) +{ + u8 i = 0; + if (gTasks[taskId].data[1] == 0) + { + gTasks[gTasks[taskId].data[0]].data[2] = 1; + DestroyTask(taskId); + for (i = 0; i < 3; i++) + { + gSprites[gTasks[taskId].data[7 + i]].invisible = TRUE; + } + } + else + { + if (gTasks[taskId].data[4] != 0) + gTasks[taskId].data[4]--; + else + { + gTasks[taskId].data[4] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]--; + gTasks[taskId].data[2]++; + if (gTasks[taskId].data[1] == 8) + { + for (i = 0; i < 3; i++) + { + gSprites[gTasks[taskId].data[7 + i]].invisible ^= TRUE; + } + } + SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); + } + } +} |