summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-04-10 11:00:39 -0400
committerscnorton <scnorton@biociphers.org>2019-04-10 11:00:39 -0400
commitdfc2fa2b393437a471bf815f2c9a7be0bc061021 (patch)
tree5486441c512fe82138d8d7b8edc9a5f53bba689e
parentbf7084cb60f0375973d8caf1005fb8b02653ade2 (diff)
sub_812F4A8
-rw-r--r--asm/oak_speech.s303
-rw-r--r--src/oak_speech.c101
2 files changed, 101 insertions, 303 deletions
diff --git a/asm/oak_speech.s b/asm/oak_speech.s
index 4823a9717..224e5cbc2 100644
--- a/asm/oak_speech.s
+++ b/asm/oak_speech.s
@@ -5,309 +5,6 @@
.text
- thumb_func_start sub_812F4A8
-sub_812F4A8: @ 812F4A8
- push {r4-r7,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r6, r0, 3
- ldr r7, _0812F4D8 @ =gTasks+0x8
- adds r5, r6, r7
- ldr r0, _0812F4DC @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r3, r0, r1
- ldrb r1, [r3]
- adds r4, r0, 0
- cmp r1, 0x4
- bls _0812F4CC
- b _0812F6C0
-_0812F4CC:
- lsls r0, r1, 2
- ldr r1, _0812F4E0 @ =_0812F4E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0812F4D8: .4byte gTasks+0x8
-_0812F4DC: .4byte gMain
-_0812F4E0: .4byte _0812F4E4
- .align 2, 0
-_0812F4E4:
- .4byte _0812F4F8
- .4byte _0812F538
- .4byte _0812F5B4
- .4byte _0812F644
- .4byte _0812F688
-_0812F4F8:
- ldr r0, _0812F534 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0812F506
- b _0812F71C
-_0812F506:
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- movs r1, 0x85
- lsls r1, 5
- movs r0, 0x44
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x1F
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- b _0812F676
- .align 2, 0
-_0812F534: .4byte gPaletteFade
-_0812F538:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0812F544
- b _0812F71C
-_0812F544:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0812F55C
- ldr r0, _0812F558 @ =sOakSpeechResources
- ldr r1, [r0]
- ldrh r0, [r1, 0x12]
- adds r0, 0x1
- b _0812F56A
- .align 2, 0
-_0812F558: .4byte sOakSpeechResources
-_0812F55C:
- ldr r0, _0812F58C @ =sOakSpeechResources
- ldr r1, [r0]
- ldrh r0, [r1, 0x12]
- cmp r0, 0
- bne _0812F568
- b _0812F71C
-_0812F568:
- subs r0, 0x1
-_0812F56A:
- strh r0, [r1, 0x12]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0812F58C @ =sOakSpeechResources
- ldr r0, [r0]
- ldrh r0, [r0, 0x12]
- cmp r0, 0x3
- bne _0812F594
- ldr r0, _0812F590 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0x4
- strb r1, [r0]
- b _0812F71C
- .align 2, 0
-_0812F58C: .4byte sOakSpeechResources
-_0812F590: .4byte gMain
-_0812F594:
- ldr r1, _0812F5B0 @ =0x00000241
- movs r0, 0x50
- bl SetGpuReg
- ldrh r0, [r5, 0x1E]
- movs r1, 0x10
- subs r1, r0
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- b _0812F6A2
- .align 2, 0
-_0812F5B0: .4byte 0x00000241
-_0812F5B4:
- ldrh r1, [r5, 0x1E]
- subs r1, 0x2
- strh r1, [r5, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- ble _0812F5D6
- b _0812F71C
-_0812F5D6:
- ldrb r0, [r5, 0x1C]
- movs r1, 0
- bl FillWindowPixelBuffer
- ldrb r0, [r5, 0x1C]
- movs r1, 0x1
- str r1, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r1, _0812F620 @ =gUnknown_8462EEC
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r2, _0812F624 @ =gUnknown_8462EF0
- ldr r4, _0812F628 @ =sOakSpeechResources
- ldr r1, [r4]
- ldrh r1, [r1, 0x12]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- str r1, [sp, 0x10]
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x5
- bl AddTextPrinterParametrized2
- ldr r0, [r4]
- ldrh r0, [r0, 0x12]
- cmp r0, 0
- bne _0812F630
- bl sub_810F71C
- ldr r0, _0812F62C @ =gUnknown_8415D48
- movs r1, 0
- movs r2, 0x1
- bl sub_810F5E8
- b _0812F6A2
- .align 2, 0
-_0812F620: .4byte gUnknown_8462EEC
-_0812F624: .4byte gUnknown_8462EF0
-_0812F628: .4byte sOakSpeechResources
-_0812F62C: .4byte gUnknown_8415D48
-_0812F630:
- bl sub_810F71C
- ldr r0, _0812F640 @ =gUnknown_8415D50
- movs r1, 0
- movs r2, 0x1
- bl sub_810F5E8
- b _0812F6A2
- .align 2, 0
-_0812F640: .4byte gUnknown_8415D50
-_0812F644:
- ldrh r1, [r5, 0x1E]
- adds r1, 0x2
- strh r1, [r5, 0x1E]
- movs r4, 0x10
- subs r0, r4, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0xF
- ble _0812F71C
- strh r4, [r5, 0x1E]
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
-_0812F676:
- ldr r0, _0812F684 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- b _0812F71C
- .align 2, 0
-_0812F684: .4byte gMain
-_0812F688:
- ldr r1, _0812F6B4 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x12]
- bl sub_8006398
- ldr r0, _0812F6B8 @ =0x00000145
- bl PlayBGM
- movs r0, 0x18
- strh r0, [r5, 0x1E]
-_0812F6A2:
- ldr r1, _0812F6BC @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0812F71C
- .align 2, 0
-_0812F6B4: .4byte gTasks
-_0812F6B8: .4byte 0x00000145
-_0812F6BC: .4byte gMain
-_0812F6C0:
- ldrh r0, [r5, 0x1E]
- movs r1, 0x1E
- ldrsh r4, [r5, r1]
- cmp r4, 0
- beq _0812F6D0
- subs r0, 0x1
- strh r0, [r5, 0x1E]
- b _0812F71C
-_0812F6D0:
- strb r4, [r3]
- ldr r0, _0812F724 @ =sOakSpeechResources
- ldr r0, [r0]
- strh r4, [r0, 0x12]
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl ClearGpuRegBits
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, _0812F728 @ =sub_812F72C
- str r1, [r0]
-_0812F71C:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812F724: .4byte sOakSpeechResources
-_0812F728: .4byte sub_812F72C
- thumb_func_end sub_812F4A8
-
thumb_func_start sub_812F72C
sub_812F72C: @ 812F72C
push {r4-r7,lr}
diff --git a/src/oak_speech.c b/src/oak_speech.c
index ec30dfe6e..83e82b495 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -43,6 +43,7 @@ void sub_812F180(u8 taskId);
void sub_812F274(u8 taskId);
void sub_812F33C(u8 taskId);
void sub_812F4A8(u8 taskId);
+void sub_812F72C(u8 taskId);
void sub_8130FD4(u8 taskId, u8 state);
extern const u8 gUnknown_8415D2C[];
@@ -844,3 +845,103 @@ void sub_812F33C(u8 taskId)
gTasks[taskId].func = sub_812F4A8;
}
}
+
+void sub_812F4A8(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ switch (gMain.state)
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0x00F0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x10A0);
+ SetGpuReg(REG_OFFSET_WININ, 0x003F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x001F);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ gMain.state = 1;
+ }
+ break;
+ case 1:
+ if (JOY_NEW((A_BUTTON | B_BUTTON)))
+ {
+ if (JOY_NEW(A_BUTTON))
+ {
+ sOakSpeechResources->unk_0012++;
+ }
+ else if (sOakSpeechResources->unk_0012 != 0)
+ {
+ sOakSpeechResources->unk_0012--;
+ }
+ else
+ {
+ break;
+ }
+ PlaySE(SE_SELECT);
+ if (sOakSpeechResources->unk_0012 == 3)
+ {
+ gMain.state = 4;
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 - data[15]) | data[15]);
+ gMain.state++;
+ }
+ }
+ break;
+ case 2:
+ data[15] -= 2;
+ SetGpuReg(REG_OFFSET_BLDALPHA, ((16 - data[15]) << 8) | data[15]);
+ if (data[15] <= 0)
+ {
+ FillWindowPixelBuffer(data[14], 0x00);
+ AddTextPrinterParametrized2(data[14], 2, 3, 5, 1, 0, &gUnknown_8462EEC, 0, gUnknown_8462EF0[sOakSpeechResources->unk_0012]);
+ if (sOakSpeechResources->unk_0012 == 0)
+ {
+ sub_810F71C();
+ sub_810F5E8(gUnknown_8415D48, 0, 1);
+ }
+ else
+ {
+ sub_810F71C();
+ sub_810F5E8(gUnknown_8415D50, 0, 1);
+ }
+ gMain.state++;
+ }
+ break;
+ case 3:
+ data[15] += 2;
+ SetGpuReg(REG_OFFSET_BLDALPHA, ((16 - data[15]) << 8) | data[15]);
+ if (data[15] >= 16)
+ {
+ data[15] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ gMain.state = 1;
+ }
+ break;
+ case 4:
+ sub_8006398(gTasks[taskId].data[5]);
+ PlayBGM(325);
+ data[15] = 24;
+ gMain.state++;
+ break;
+ default:
+ if (data[15] != 0)
+ data[15]--;
+ else
+ {
+ gMain.state = 0;
+ sOakSpeechResources->unk_0012 = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = sub_812F72C;
+ }
+ break;
+ }
+}